From 3d3bf69403fb34be115c45a545985bb50d1cc972 Mon Sep 17 00:00:00 2001 From: MegaIng1 Date: Thu, 16 Jul 2020 18:18:06 +0200 Subject: [PATCH] Added support of expansions --- lark/load_grammar.py | 9 ++++++--- tests/test_parser.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lark/load_grammar.py b/lark/load_grammar.py index f20feb6..eac1473 100644 --- a/lark/load_grammar.py +++ b/lark/load_grammar.py @@ -451,9 +451,12 @@ class TerminalTreeToPattern(Transformer): def expansions(self, exps): if len(exps) == 1: return exps[0] - if len({i.flags for i in exps}) > 1: - raise GrammarError("Lark doesn't support joining terminals with conflicting flags!") - return PatternRE('(?:%s)' % ('|'.join(i.to_regexp() for i in exps)), exps[0].flags) + if not Py36: + if len({i.flags for i in exps}) > 1: + raise GrammarError("Lark doesn't support joining terminals with conflicting flags!") + return PatternRE('(?:%s)' % ('|'.join(i.to_regexp() for i in exps)), exps[0].flags) + else: + return PatternRE('(?:%s)' % ('|'.join(i.to_regexp() for i in exps)), ()) def expr(self, args): inner, op = args[:2] diff --git a/tests/test_parser.py b/tests/test_parser.py index 762c979..1249211 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -1078,6 +1078,18 @@ def _make_parser_test(LEXER, PARSER): self.assertEqual(g.parse(" ").children,[" "]) self.assertEqual(g.parse("\n ").children,["\n "]) self.assertRaises(UnexpectedCharacters, g.parse, "\n\n") + + g = r""" + start: A + A: B | C + B: "b"i + C: "c" + """ + g = _Lark(g) + self.assertEqual(g.parse("b").children,["b"]) + self.assertEqual(g.parse("B").children,["B"]) + self.assertEqual(g.parse("c").children,["c"]) + self.assertRaises(UnexpectedCharacters, g.parse, "C") def test_lexer_token_limit(self):