Skip to content

Commit 6cbfaae

Browse files
committed
Test that mutual recursion works for Ometa V1 syntax
Working on issue 57
1 parent 308bf5c commit 6cbfaae

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

ometa/test/test_pymeta.py

+17
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,23 @@ def test_leftrecursion(self):
359359
self.assertEqual(g.num("32767"), 32767)
360360

361361

362+
def test_mutual_leftrecursion(self):
363+
g = self.compile("""
364+
num ::= (<num>:n <digit>:d => n * 10 + d
365+
| <digit>)
366+
digit ::= :x ?(x.isdigit()) => int(x)
367+
x ::= <expr>
368+
expr ::= <expr>:e '-' <num>:n => e - n
369+
| <num>
370+
""")
371+
self.assertEqual(g.expr("3"), 3)
372+
self.assertEqual(g.expr("3-2"), 1)
373+
self.assertEqual(g.expr("3-2-1"), 0)
374+
self.assertEqual(g.x("3"), 3)
375+
self.assertEqual(g.x("3-2"), 1)
376+
self.assertEqual(g.x("3-2-1"), 0)
377+
378+
362379
def test_characterVsSequence(self):
363380
"""
364381
Characters (in single-quotes) are not regarded as sequences.

0 commit comments

Comments
 (0)