From 5fd331be542c586f96feacacc5163e75a533ac2e Mon Sep 17 00:00:00 2001 From: Erez Shinan Date: Tue, 16 Jan 2018 00:52:31 +0200 Subject: [PATCH] BUGFIX: Internally repetitive rules are now handled silently (Issue #60) --- lark/load_grammar.py | 2 +- tests/test_parser.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lark/load_grammar.py b/lark/load_grammar.py index 2086591..16dc0d9 100644 --- a/lark/load_grammar.py +++ b/lark/load_grammar.py @@ -196,7 +196,7 @@ class SimplifyRule_Visitor(Visitor): tree.data = 'expansions' tree.children = [self.visit(T('expansion', [option if i==j else other for j, other in enumerate(tree.children)])) - for option in child.children] + for option in set(child.children)] break else: break diff --git a/tests/test_parser.py b/tests/test_parser.py index db28834..1c7cfcf 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -796,6 +796,16 @@ def _make_parser_test(LEXER, PARSER): self.assertEqual(tree.children, ['a', 'A']) + def test_twice_empty(self): + g = """!start: [["A"]] + """ + l = _Lark(g) + tree = l.parse('A') + self.assertEqual(tree.children, ['A']) + + tree = l.parse('') + self.assertEqual(tree.children, []) + def test_undefined_ignore(self): g = """!start: "A" @@ -1016,6 +1026,7 @@ def _make_parser_test(LEXER, PARSER): self.assertEqual(tree.children, []) + @unittest.skipIf(LEXER==None, "Scanless doesn't support regular expressions") def test_regex_escaping(self): g = _Lark("start: /[ab]/")