1
0
forked from VimPlug/jedi

Create a default implementation of leafs.

This commit is contained in:
Dave Halter
2017-03-20 19:34:48 +01:00
parent c6811675b6
commit d218acee6b

View File

@@ -34,6 +34,10 @@ class BaseParser(object):
node_map = {} node_map = {}
default_node = tree.Node default_node = tree.Node
leaf_map = {
}
default_leaf = tree.Leaf
def __init__(self, grammar, start_symbol='file_input', error_recovery=False): def __init__(self, grammar, start_symbol='file_input', error_recovery=False):
self._grammar = grammar self._grammar = grammar
self._start_symbol = start_symbol self._start_symbol = start_symbol
@@ -62,13 +66,16 @@ class BaseParser(object):
else: else:
raise ParserSyntaxError('SyntaxError: invalid syntax', start_pos) raise ParserSyntaxError('SyntaxError: invalid syntax', start_pos)
def convert_node(self, grammar, type, children): def convert_node(self, grammar, type_, children):
# TODO REMOVE symbol, we don't want type here. # TODO REMOVE symbol, we don't want type here.
symbol = grammar.number2symbol[type] symbol = grammar.number2symbol[type_]
try: try:
return self.node_map[symbol](children) return self.node_map[symbol](children)
except KeyError: except KeyError:
return self.default_node(symbol, children) return self.default_node(symbol, children)
def convert_leaf(self, grammar, type, value, prefix, start_pos): def convert_leaf(self, grammar, type_, value, prefix, start_pos):
raise NotImplementedError try:
return self.leaf_map[type_](value, start_pos, prefix)
except KeyError:
return self.default_leaf(value, start_pos, prefix)