From 93bcca3ab4c1e70fb9d9e49c2eeedfddc53881ea Mon Sep 17 00:00:00 2001 From: Erez Sh Date: Sun, 18 Apr 2021 18:19:59 -0500 Subject: [PATCH] Fix: Push the end loop to feed_token --- lark/parsers/lalr_parser.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lark/parsers/lalr_parser.py b/lark/parsers/lalr_parser.py index 5ce195b..b5c3e94 100644 --- a/lark/parsers/lalr_parser.py +++ b/lark/parsers/lalr_parser.py @@ -136,7 +136,11 @@ class ParserState(object): # assert not is_end state_stack.append(arg) value_stack.append(token if token.type not in callbacks else callbacks[token.type](token)) - return + if not is_end: + return + + # If it's the end, keep feeding the same token until we get to a reduce + assert token.type == END else: # reduce+shift as many times as necessary rule = arg @@ -180,10 +184,7 @@ class _Parser(object): state.feed_token(token) token = Token.new_borrow_pos(END, '', token) if token else Token(END, '', 0, 1, 1) - while True: - x = state.feed_token(token, True) - if x is not None: - return x + return state.feed_token(token, True) except UnexpectedInput as e: try: e.interactive_parser = InteractiveParser(self, state, state.lexer)