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):
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.
You can’t perform that action at this time.
0 commit comments