Example #1
0
 def test_to_pda(self):
     cfg = CFG([Variable("E"), Variable("I")], [
         Terminal("a"),
         Terminal("b"),
         Terminal("0"),
         Terminal("1"),
         Terminal("+"),
         Terminal("*"),
         Terminal("("),
         Terminal(")")
     ], [
         CFGRule(Variable("I"), [Terminal("a")]),
         CFGRule(Variable("I"), [Terminal("b")]),
         CFGRule(Variable("I"),
                 [Variable("I"), Terminal("a")]),
         CFGRule(Variable("I"),
                 [Variable("I"), Terminal("b")]),
         CFGRule(Variable("I"),
                 [Variable("I"), Terminal("0")]),
         CFGRule(Variable("I"),
                 [Variable("I"), Terminal("1")]),
         CFGRule(Variable("E"), [Variable("I")]),
         CFGRule(
             Variable("E"),
             [Variable("E"), Terminal("*"),
              Variable("E")]),
         CFGRule(
             Variable("E"),
             [Variable("E"), Terminal("+"),
              Variable("E")]),
         CFGRule(
             Variable("E"),
             [Terminal("("), Variable("E"),
              Terminal(")")])
     ], Variable("E"))
     pda = cfg.to_PDA()
     self.assertIsInstance(pda, PDA)
     self.assertIn(
         PDATransitionFunction(PDAState("q"), "epsilon", Variable("I"),
                               PDAState("q"), [Terminal("a")]),
         pda.transition_function)
     self.assertIn(
         PDATransitionFunction(PDAState("q"), "epsilon", Variable("I"),
                               PDAState("q"),
                               [Variable("I"), Terminal("0")]),
         pda.transition_function)
     self.assertIn(
         PDATransitionFunction(PDAState("q"), "epsilon", Variable("E"),
                               PDAState("q"), [Variable("I")]),
         pda.transition_function)
     self.assertEqual(18, len(pda.transition_function))
     self.assertTrue(pda.accepts_by_empty_stack([Terminal("a")], 100))
     self.assertTrue(pda.accepts_by_empty_stack([Terminal("b")], 100))
     self.assertFalse(
         pda.accepts_by_empty_stack([Terminal(x) for x in "b0"], 100))
     self.assertTrue(
         pda.accepts_by_empty_stack([Terminal(x) for x in "b0"], 1000))
     self.assertTrue(
         pda.accepts_by_empty_stack([Terminal(x) for x in "b00"], 10000))