parser returns None if an error is seen

This commit is contained in:
Josh Holtrop 2011-08-30 16:07:27 -04:00
parent 9fe95aa7f2
commit 1d44cc0e6e

View File

@ -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)