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