diff --git a/lark/parsers/lalr_interactive_parser.py b/lark/parsers/lalr_interactive_parser.py index 0013ddf3..f8fd93aa 100644 --- a/lark/parsers/lalr_interactive_parser.py +++ b/lark/parsers/lalr_interactive_parser.py @@ -114,8 +114,9 @@ def accepts(self): return accepts def resume_parse(self): - """Resume automated parsing from the current state.""" - return self.parser.parse_from_state(self.parser_state) + """Resume automated parsing from the current state. + """ + return self.parser.parse_from_state(self.parser_state, last_token=self.lexer_state.state.last_token) diff --git a/lark/parsers/lalr_parser.py b/lark/parsers/lalr_parser.py index c89c49df..5cf6ca45 100644 --- a/lark/parsers/lalr_parser.py +++ b/lark/parsers/lalr_parser.py @@ -171,10 +171,15 @@ def parse(self, lexer, start, value_stack=None, state_stack=None, start_interact return self.parse_from_state(parser_state) - def parse_from_state(self, state): - # Main LALR-parser loop + def parse_from_state(self, state, last_token=None): + """Run the main LALR parser loop + + Parameters: + state (ParseState) - the initial state. Changed in-place. + last_token (optional, Token) - Used only for line information in case of an empty lexer. + """ try: - token = None + token = last_token for token in state.lexer.lex(state): state.feed_token(token)