コード例 #1
0
ファイル: test_pda.py プロジェクト: Aunsiels/pyformlang
 def test_to_final_state(self):
     """ Test transformation to final state """
     state = State("#STARTTOFINAL#")
     symbol_e = Symbol("e")
     symbol_i = Symbol("i")
     symbol_z = StackSymbol("Z")
     pda = PDA(states={state},
               input_symbols={symbol_i, symbol_e},
               stack_alphabet={symbol_z},
               start_state=state,
               start_stack_symbol=symbol_z)
     pda.add_transition(state, symbol_i, symbol_z, state,
                        [symbol_z, symbol_z])
     pda.add_transition(state, symbol_e, symbol_z, state, [])
     new_pda = pda.to_final_state()
     self.assertEqual(len(new_pda.states), 3)
     self.assertEqual(len(new_pda.input_symbols), 2)
     self.assertEqual(len(new_pda.stack_symbols), 2)
     self.assertEqual(new_pda.get_number_transitions(), 4)
     self.assertEqual(len(new_pda.final_states), 1)
コード例 #2
0
ファイル: test_pda.py プロジェクト: IlyaEp/pyformlang
 def test_pda_paper(self):
     """ Code in the paper """
     pda = PDA()
     pda.add_transitions([("q0", "0", "Z0", "q1", ("Z1", "Z0")),
                          ("q1", "1", "Z1", "q2", []),
                          ("q0", "epsilon", "Z1", "q2", [])])
     pda.set_start_state("q0")
     pda.set_start_stack_symbol("Z0")
     pda.add_final_state("q2")
     pda_final_state = pda.to_final_state()
     cfg = pda.to_empty_stack().to_cfg()
     self.assertTrue(cfg.contains(["0", "1"]))
     pda_networkx = PDA.from_networkx(pda.to_networkx())
     self.assertEqual(pda.states, pda_networkx.states)
     self.assertEqual(pda.start_state, pda_networkx.start_state)
     self.assertEqual(pda.final_states, pda_networkx.final_states)
     self.assertEqual(pda.input_symbols, pda_networkx.input_symbols)
     self.assertEqual(pda.stack_symbols, pda_networkx.stack_symbols)
     cfg = pda_networkx.to_empty_stack().to_cfg()
     pda_networkx.write_as_dot("pda.dot")
     self.assertTrue(cfg.contains(["0", "1"]))
     self.assertTrue(path.exists("pda.dot"))