Пример #1
0
 def test_reachablesInvalid(self):
     g = Grammar(terminals=[0, 1, 2],
                 nonterminals=[S, A, B, C],
                 rules=[Rules],
                 start_symbol=S)
     res = ContextFree.find_nonterminals_reachable_by_unit_rules(g)
     self.assertEqual(res.reachables(D), [])
     self.assertEqual(res.reachables(E), [])
Пример #2
0
 def test_pathRulesInvalid(self):
     g = Grammar(terminals=[0, 1, 2],
                 nonterminals=[S, A, B, C],
                 rules=[Rules],
                 start_symbol=S)
     res = ContextFree.find_nonterminals_reachable_by_unit_rules(g)
     self.assertIsNone(res.path_rules(A, D))
     self.assertIsNone(res.path_rules(D, S))
     self.assertIsNone(res.path_rules(D, S))
     self.assertIsNone(res.path_rules(E, D))
Пример #3
0
 def test_reachInvalid(self):
     g = Grammar(terminals=[0, 1, 2],
                 nonterminals=[S, A, B, C],
                 rules=[Rules],
                 start_symbol=S)
     res = ContextFree.find_nonterminals_reachable_by_unit_rules(g)
     self.assertFalse(res.reach(D, S))
     self.assertFalse(res.reach(S, D))
     self.assertFalse(res.reach(D, D))
     self.assertFalse(res.reach(D, E))
Пример #4
0
 def test_simpleTest(self):
     g = Grammar(terminals=[0, 1, 2],
                 nonterminals=[S, A, B, C],
                 rules=[Rules],
                 start_symbol=S)
     res = ContextFree.find_nonterminals_reachable_by_unit_rules(g)
     # From S
     self.assertTrue(res.reach(S, S))
     self.assertTrue(res.reach(S, A))
     self.assertTrue(res.reach(S, B))
     self.assertTrue(res.reach(S, C))
     # From A
     self.assertFalse(res.reach(B, S))
     self.assertTrue(res.reach(B, A))
     self.assertTrue(res.reach(B, B))
     self.assertTrue(res.reach(B, C))
     # From B
     self.assertFalse(res.reach(B, S))
     self.assertTrue(res.reach(B, A))
     self.assertTrue(res.reach(B, B))
     self.assertTrue(res.reach(B, C))
     # From C
     self.assertFalse(res.reach(C, S))
     self.assertTrue(res.reach(C, A))
     self.assertTrue(res.reach(C, B))
     self.assertTrue(res.reach(C, C))
     # Reachables
     self.assertEqual(len(res.reachables(S)), 4)
     for n in [S, A, B, C]:
         self.assertIn(n, res.reachables(S))
     self.assertEqual(len(res.reachables(A)), 3)
     for n in [A, B, C]:
         self.assertIn(n, res.reachables(A))
     self.assertEqual(len(res.reachables(B)), 3)
     for n in [A, B, C]:
         self.assertIn(n, res.reachables(B))
     self.assertEqual(len(res.reachables(C)), 3)
     for n in [A, B, C]:
         self.assertIn(n, res.reachables(C))
     # Rules S
     self.assertEqual(res.path_rules(S, S), [])
     SARules = res.path_rules(S, A)
     self.assertEqual(len(SARules), 1)
     self.assertEqual(SARules[0].rule, ([S], [A]))
     SBRules = res.path_rules(S, B)
     self.assertEqual(len(SBRules), 2)
     self.assertEqual(SBRules[0].rule, ([S], [A]))
     self.assertEqual(SBRules[1].rule, ([A], [B]))
     SCRules = res.path_rules(S, C)
     self.assertEqual(len(SCRules), 3)
     self.assertEqual(SCRules[0].rule, ([S], [A]))
     self.assertEqual(SCRules[1].rule, ([A], [B]))
     self.assertEqual(SCRules[2].rule, ([B], [C]))
     # Rules A
     self.assertEqual(res.path_rules(A, A), [])
     ABRules = res.path_rules(A, B)
     self.assertEqual(len(ABRules), 1)
     self.assertEqual(ABRules[0].rule, ([A], [B]))
     ACRules = res.path_rules(A, C)
     self.assertEqual(len(ACRules), 2)
     self.assertEqual(ACRules[0].rule, ([A], [B]))
     self.assertEqual(ACRules[1].rule, ([B], [C]))
     # Rules B
     self.assertEqual(res.path_rules(B, B), [])
     BCRules = res.path_rules(B, C)
     self.assertEqual(len(BCRules), 1)
     self.assertEqual(BCRules[0].rule, ([B], [C]))
     BARules = res.path_rules(B, A)
     self.assertEqual(len(BARules), 2)
     self.assertEqual(BARules[0].rule, ([B], [C]))
     self.assertEqual(BARules[1].rule, ([C], [A]))
     # Rules C
     self.assertEqual(res.path_rules(C, C), [])
     CARules = res.path_rules(C, A)
     self.assertEqual(len(CARules), 1)
     self.assertEqual(CARules[0].rule, ([C], [A]))
     CBRules = res.path_rules(C, B)
     self.assertEqual(len(CBRules), 2)
     self.assertEqual(CBRules[0].rule, ([C], [A]))
     self.assertEqual(CBRules[1].rule, ([A], [B]))
Пример #5
0
 def test_simpleTest(self):
     g = Grammar(terminals=[0, 1, 2, 3],
                 nonterminals=[S, A, B, C, D],
                 rules=[Rules],
                 start_symbol=S)
     res = ContextFree.find_nonterminals_reachable_by_unit_rules(g)
     # From S
     self.assertTrue(res.reach(S, S))
     self.assertTrue(res.reach(S, A))
     self.assertTrue(res.reach(S, B))
     self.assertTrue(res.reach(S, C))
     self.assertTrue(res.reach(S, D))
     # From A
     self.assertFalse(res.reach(A, S))
     self.assertTrue(res.reach(A, A))
     self.assertFalse(res.reach(A, B))
     self.assertTrue(res.reach(A, C))
     self.assertFalse(res.reach(A, D))
     # From B
     self.assertFalse(res.reach(B, S))
     self.assertFalse(res.reach(B, A))
     self.assertTrue(res.reach(B, B))
     self.assertFalse(res.reach(B, C))
     self.assertTrue(res.reach(B, D))
     # From C
     self.assertFalse(res.reach(C, S))
     self.assertFalse(res.reach(C, A))
     self.assertFalse(res.reach(C, B))
     self.assertTrue(res.reach(C, C))
     self.assertFalse(res.reach(C, D))
     # From D
     self.assertFalse(res.reach(D, S))
     self.assertFalse(res.reach(D, A))
     self.assertFalse(res.reach(D, B))
     self.assertFalse(res.reach(D, C))
     self.assertTrue(res.reach(D, D))
     # Reachables
     self.assertEqual(len(res.reachables(S)), 5)
     for n in [S, A, B, C, D]:
         self.assertIn(n, res.reachables(S))
     self.assertEqual(len(res.reachables(A)), 2)
     for n in [A, C]:
         self.assertIn(n, res.reachables(A))
     self.assertEqual(len(res.reachables(B)), 2)
     for n in [B, D]:
         self.assertIn(n, res.reachables(B))
     self.assertEqual(len(res.reachables(C)), 1)
     for n in [C]:
         self.assertIn(n, res.reachables(C))
     self.assertEqual(len(res.reachables(D)), 1)
     for n in [D]:
         self.assertIn(n, res.reachables(D))
     # Rules S
     self.assertEqual(res.path_rules(S, S), [])
     SARules = res.path_rules(S, A)
     self.assertEqual(len(SARules), 1)
     self.assertEqual(SARules[0].rule, ([S], [A]))
     SBRules = res.path_rules(S, B)
     self.assertEqual(len(SBRules), 1)
     self.assertEqual(SBRules[0].rule, ([S], [B]))
     SCRules = res.path_rules(S, C)
     self.assertEqual(len(SCRules), 2)
     self.assertEqual(SCRules[0].rule, ([S], [A]))
     self.assertEqual(SCRules[1].rule, ([A], [C]))
     SDRules = res.path_rules(S, D)
     self.assertEqual(len(SDRules), 2)
     self.assertEqual(SDRules[0].rule, ([S], [B]))
     self.assertEqual(SDRules[1].rule, ([B], [D]))
     # Rules A
     self.assertEqual(res.path_rules(A, A), [])
     ACRules = res.path_rules(A, C)
     self.assertEqual(len(ACRules), 1)
     self.assertEqual(ACRules[0].rule, ([A], [C]))
     # Rules B
     self.assertEqual(res.path_rules(B, B), [])
     BDRules = res.path_rules(B, D)
     self.assertEqual(len(BDRules), 1)
     self.assertEqual(BDRules[0].rule, ([B], [D]))
     # Rules C
     self.assertEqual(res.path_rules(C, C), [])
     # Rules D
     self.assertEqual(res.path_rules(D, D), [])