예제 #1
0
 def test_eliminate_left_recursion_3(self):
     A = 1
     B = 2
     nfa = ["A: A A A | A A | B",
     (A,0,0,A),
     {(A,0,0,A): [(A,1,0,A),(A,2,0,A),(B,3,0,A)],
     (A,1,0,A): [(A,5,0,A)],
     (A,5,0,A): [(A,6,0,A)],
     (B,3,0,A): [(FIN,FEX,0,A)],
     (A,6,0,A): [(FIN,FEX,0,A)],
     (A,2,0,A): [(A,4,0,A)],
     (A,4,0,A): [(FIN,FEX,0,A)]}]
     # A: B (A | A A)*
     bnftranslator.eliminate_left_recursion(nfa)
     pprint.pprint(nfa[2])
예제 #2
0
 def test_eliminate_left_recursion(self):
     A = 1
     B = 2
     X = 3
     C = 4
     Y = 5
     nfa = ["A: A X Y | B | C",
     (A,0,0,A),
     {(A,0,0,A): [(A,1,0,A),(B,2,0,A),(C,4,0,A)],
     (B,2,0,A): [(FIN,FEX,0,A)],
     (C,4,0,A): [(FIN,FEX,0,A)],
     (A,1,0,A): [(X,3,0,A)],
     (X,3,0,A): [(Y,5,0,A)],
     (Y,5,0,A): [(FIN,FEX,0,A)]}]
     bnftranslator.eliminate_left_recursion(nfa)
     pprint.pprint(nfa[2])
예제 #3
0
 def test_eliminate_left_recursion_3(self):
     A = 1
     B = 2
     nfa = [
         "A: A A A | A A | B", (A, 0, 0, A), {
             (A, 0, 0, A): [(A, 1, 0, A), (A, 2, 0, A), (B, 3, 0, A)],
             (A, 1, 0, A): [(A, 5, 0, A)],
             (A, 5, 0, A): [(A, 6, 0, A)],
             (B, 3, 0, A): [(FIN, FEX, 0, A)],
             (A, 6, 0, A): [(FIN, FEX, 0, A)],
             (A, 2, 0, A): [(A, 4, 0, A)],
             (A, 4, 0, A): [(FIN, FEX, 0, A)]
         }
     ]
     # A: B (A | A A)*
     bnftranslator.eliminate_left_recursion(nfa)
     pprint.pprint(nfa[2])
예제 #4
0
 def test_eliminate_left_recursion(self):
     A = 1
     B = 2
     X = 3
     C = 4
     Y = 5
     nfa = [
         "A: A X Y | B | C", (A, 0, 0, A), {
             (A, 0, 0, A): [(A, 1, 0, A), (B, 2, 0, A), (C, 4, 0, A)],
             (B, 2, 0, A): [(FIN, FEX, 0, A)],
             (C, 4, 0, A): [(FIN, FEX, 0, A)],
             (A, 1, 0, A): [(X, 3, 0, A)],
             (X, 3, 0, A): [(Y, 5, 0, A)],
             (Y, 5, 0, A): [(FIN, FEX, 0, A)]
         }
     ]
     bnftranslator.eliminate_left_recursion(nfa)
     pprint.pprint(nfa[2])