From f20d72d9f6e76b3b6bd4d42a296156d2f95b2996 Mon Sep 17 00:00:00 2001 From: Erez Sh Date: Mon, 19 Oct 2020 16:16:23 +0300 Subject: [PATCH] Fix due to CR - handle UnexpectedCharacters resume in the error loop --- lark/lark.py | 10 ++++++++++ lark/parsers/lalr_parser.py | 4 ---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lark/lark.py b/lark/lark.py index 2bf328a..bc34eb4 100644 --- a/lark/lark.py +++ b/lark/lark.py @@ -468,8 +468,18 @@ class Lark(Serialize): raise while True: + if isinstance(e, UnexpectedCharacters): + s = e.puppet.lexer_state.state + p = s.line_ctr.char_pos + if not on_error(e): raise e + + if isinstance(e, UnexpectedCharacters): + # If user didn't change the character position, then we should + if p == s.line_ctr.char_pos: + s.line_ctr.feed(s.text[p:p+1]) + try: return e.puppet.resume_parse() except UnexpectedToken as e2: diff --git a/lark/parsers/lalr_parser.py b/lark/parsers/lalr_parser.py index e5bb2a1..63e7119 100644 --- a/lark/parsers/lalr_parser.py +++ b/lark/parsers/lalr_parser.py @@ -134,10 +134,6 @@ class _Parser: e.puppet = ParserPuppet(self, state, state.lexer) except NameError: pass - if isinstance(e, UnexpectedCharacters): - s = state.lexer.state - p = s.line_ctr.char_pos - s.line_ctr.feed(s.text[p:p+1]) raise e except Exception as e: if self.debug: