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)
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"))