From 5946e78ed246bde9a31ca14bc523d290e7c8f8f3 Mon Sep 17 00:00:00 2001 From: Erez Shinan Date: Sat, 6 May 2017 17:04:19 +0300 Subject: [PATCH] Bugfix for Scanless Earley. Thanks Ken! --- lark/load_grammar.py | 2 +- tests/test_parser.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lark/load_grammar.py b/lark/load_grammar.py index 4b8e7fe..460af8a 100644 --- a/lark/load_grammar.py +++ b/lark/load_grammar.py @@ -313,7 +313,7 @@ class PrepareLiterals(InlineTransformer): class SplitLiterals(InlineTransformer): def pattern(self, p): if isinstance(p, PatternStr) and len(p.value)>1: - return T('expansion', [T('pattern', [PatternStr(ch)]) for ch in p.value]) + return T('expansion', [T('pattern', [PatternStr(ch, flags=p.flags)]) for ch in p.value]) return T('pattern', [p]) class TokenTreeToPattern(Transformer): diff --git a/tests/test_parser.py b/tests/test_parser.py index 6063096..4a2171c 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -568,6 +568,14 @@ def _make_parser_test(LEXER, PARSER): tree = l.parse('AB,a') self.assertEqual(tree.children, ['AB']) + def test_token_flags3(self): + l = _Lark("""!start: ABC+ + ABC: "abc"i + """ + ) + tree = l.parse('aBcAbC') + self.assertEqual(tree.children, ['aBc', 'AbC']) + def test_token_flags2(self): g = """!start: ("a"i | /a/ /b/?)+ """