parser returns None if an error is seen
This commit is contained in:
parent
9fe95aa7f2
commit
1d44cc0e6e
@ -9,10 +9,14 @@ class Parser(object):
|
|||||||
self.lexer = Lexer()
|
self.lexer = Lexer()
|
||||||
self.tokens = self.lexer.tokens
|
self.tokens = self.lexer.tokens
|
||||||
self.parser = yacc.yacc(module = self, outputdir = 'parser')
|
self.parser = yacc.yacc(module = self, outputdir = 'parser')
|
||||||
|
self.saw_error = False
|
||||||
|
|
||||||
def p_unit(self, p):
|
def p_unit(self, p):
|
||||||
'unit : unit_items'
|
'unit : unit_items'
|
||||||
p[0] = UnitNode([p[1]])
|
if self.saw_error:
|
||||||
|
p[0] = None
|
||||||
|
else:
|
||||||
|
p[0] = UnitNode([p[1]])
|
||||||
|
|
||||||
def p_unit_items(self, p):
|
def p_unit_items(self, p):
|
||||||
'unit_items : unit_item unit_items'
|
'unit_items : unit_item unit_items'
|
||||||
@ -42,5 +46,8 @@ class Parser(object):
|
|||||||
'empty :'
|
'empty :'
|
||||||
p[0] = Node()
|
p[0] = Node()
|
||||||
|
|
||||||
|
def p_error(self, p):
|
||||||
|
self.saw_error = True
|
||||||
|
|
||||||
def parse(self):
|
def parse(self):
|
||||||
return self.parser.parse(self.input, lexer = self.lexer)
|
return self.parser.parse(self.input, lexer = self.lexer)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user