File tree Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Original file line number Diff line number Diff line change @@ -359,6 +359,23 @@ def test_leftrecursion(self):
359
359
self .assertEqual (g .num ("32767" ), 32767 )
360
360
361
361
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
+
362
379
def test_characterVsSequence (self ):
363
380
"""
364
381
Characters (in single-quotes) are not regarded as sequences.
You can’t perform that action at this time.
0 commit comments