Bladeren bron

Added test for recursive templates + implemented them

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.8.6
MegaIng1 4 jaren geleden
bovenliggende
commit
0c1c48411d
2 gewijzigde bestanden met toevoegingen van 13 en 1 verwijderingen
  1. +1
    -0
      lark/load_grammar.py
  2. +12
    -1
      tests/test_parser.py

+ 1
- 0
lark/load_grammar.py Bestand weergeven

@@ -384,6 +384,7 @@ class ApplyTemplates(Transformer_InPlace):
args = c[1:]
result_name = self._get_template_name(name.value, args)
if result_name not in self.created_templates:
self.created_templates.add(result_name)
(_n, params, tree, options) ,= (t for t in self.temp_defs if t[0] == name)
assert len(params) == len(args), args
result_tree = deepcopy(tree)


+ 12
- 1
tests/test_parser.py Bestand weergeven

@@ -822,7 +822,18 @@ def _make_parser_test(LEXER, PARSER):
self.assertSequenceEqual(x.children,['1', '2', '3', '4'])
x = g.parse("[1]")
self.assertSequenceEqual(x.children,['1'])
print(x)

def test_templates_recursion(self):
g = _Lark(r"""
start: "[" sep{NUMBER, ","} "]"
sep{item, delim}: item | sep{item, delim} delim item
NUMBER: /\d+/
%ignore " "
""")
x = g.parse("[1, 2, 3, 4]")
self.assertSequenceEqual(x.children,['1', '2', '3', '4'])
x = g.parse("[1]")
self.assertSequenceEqual(x.children,['1'])

def test_token_collision_WS(self):
g = _Lark(r"""start: "Hello" NAME


Laden…
Annuleren
Opslaan