From bd7e331ad7244c7b34c8eb82d6cdc2beed759c6c Mon Sep 17 00:00:00 2001 From: Erez Shinan Date: Wed, 5 Sep 2018 14:23:12 +0300 Subject: [PATCH] Slightly better error message (UnexpectedToken) --- lark/exceptions.py | 4 ++-- lark/parsers/lalr_parser.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lark/exceptions.py b/lark/exceptions.py index ceb71b0..f3642ac 100644 --- a/lark/exceptions.py +++ b/lark/exceptions.py @@ -81,8 +81,8 @@ class UnexpectedToken(ParseError, UnexpectedInput): self.pos_in_stream = getattr(token, 'pos_in_stream', None) message = ("Unexpected token %r at line %s, column %s.\n" - "Expected: %s\n" - % (token, self.line, self.column, ', '.join(self.expected))) + "Expected one of: \n\t* %s\n" + % (token, self.line, self.column, '\n\t* '.join(self.expected))) super(UnexpectedToken, self).__init__(message) diff --git a/lark/parsers/lalr_parser.py b/lark/parsers/lalr_parser.py index 9b8ff10..09b264b 100644 --- a/lark/parsers/lalr_parser.py +++ b/lark/parsers/lalr_parser.py @@ -45,7 +45,7 @@ class _Parser: try: return states[state][key] except KeyError: - expected = states[state].keys() + expected = [s for s in states[state].keys() if s.isupper()] raise UnexpectedToken(token, expected, state=state) # TODO filter out rules from expected def reduce(rule):