| @@ -827,6 +827,13 @@ GRAMMAR_ERRORS = [ | |||||
| ('%ignore expects a value', ['%ignore %import\n']), | ('%ignore expects a value', ['%ignore %import\n']), | ||||
| ] | ] | ||||
| def _translate_parser_exception(parse, e): | |||||
| error = e.match_examples(parse, GRAMMAR_ERRORS, use_accepts=True) | |||||
| if error: | |||||
| return error | |||||
| elif 'STRING' in e.expected: | |||||
| return "Expecting a value" | |||||
| def _parse_grammar(text, name, start='start'): | def _parse_grammar(text, name, start='start'): | ||||
| try: | try: | ||||
| tree = _get_parser().parse(text + '\n', start) | tree = _get_parser().parse(text + '\n', start) | ||||
| @@ -836,11 +843,9 @@ def _parse_grammar(text, name, start='start'): | |||||
| (e.line, e.column, name, context)) | (e.line, e.column, name, context)) | ||||
| except UnexpectedToken as e: | except UnexpectedToken as e: | ||||
| context = e.get_context(text) | context = e.get_context(text) | ||||
| error = e.match_examples(_get_parser().parse, GRAMMAR_ERRORS, use_accepts=True) | |||||
| error = _translate_parser_exception(_get_parser().parse, e) | |||||
| if error: | if error: | ||||
| raise GrammarError("%s, at line %s column %s\n\n%s" % (error, e.line, e.column, context)) | raise GrammarError("%s, at line %s column %s\n\n%s" % (error, e.line, e.column, context)) | ||||
| elif 'STRING' in e.expected: | |||||
| raise GrammarError("Expecting a value at line %s column %s\n\n%s" % (e.line, e.column, context)) | |||||
| raise | raise | ||||
| return PrepareGrammar().transform(tree) | return PrepareGrammar().transform(tree) | ||||
| @@ -1069,7 +1074,10 @@ class GrammarBuilder: | |||||
| def rule_dependencies(symbol): | def rule_dependencies(symbol): | ||||
| if self._is_term(symbol): | if self._is_term(symbol): | ||||
| return [] | return [] | ||||
| params, tree,_ = self._definitions[symbol] | |||||
| try: | |||||
| params, tree,_ = self._definitions[symbol] | |||||
| except KeyError: | |||||
| return [] | |||||
| return _find_used_symbols(tree) - set(params) | return _find_used_symbols(tree) - set(params) | ||||
| _used = set(bfs(used, rule_dependencies)) | _used = set(bfs(used, rule_dependencies)) | ||||