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]/")