| Index: tools/lexer_generator/rule_parser.py
|
| diff --git a/tools/lexer_generator/rule_parser.py b/tools/lexer_generator/rule_parser.py
|
| index 9dc0b4e9672f14e89e71e797c3c075c80e517361..a616fec33d1c2faa49c833e85cf83b94b11f5003 100644
|
| --- a/tools/lexer_generator/rule_parser.py
|
| +++ b/tools/lexer_generator/rule_parser.py
|
| @@ -179,7 +179,7 @@ class RuleParser:
|
| 'empty :'
|
|
|
| def p_error(self, p):
|
| - raise Exception("Syntax error in input '%s'" % p)
|
| + raise Exception("Syntax error in input '%s'" % str(p))
|
|
|
| def build(self, **kwargs):
|
| self.parser = yacc.yacc(module=self, debug=0, write_tables=0, **kwargs)
|
| @@ -189,10 +189,15 @@ class RuleParser:
|
| __static_instance = None
|
| @staticmethod
|
| def parse(data, parser_state):
|
| - if not RuleParser.__static_instance:
|
| - RuleParser.__static_instance = RuleParser()
|
| - RuleParser.__static_instance.build()
|
| parser = RuleParser.__static_instance
|
| + if not parser:
|
| + parser = RuleParser()
|
| + parser.build()
|
| + RuleParser.__static_instance = parser
|
| parser.__state = parser_state
|
| - parser.parser.parse(data, lexer=parser.lexer.lexer)
|
| + try:
|
| + parser.parser.parse(data, lexer=parser.lexer.lexer)
|
| + except Exception as e:
|
| + RuleParser.__static_instance = None
|
| + raise e
|
| parser.__state = None
|
|
|