def evaluateNFA(): print("Eval NFA") # NFA which matches strings beginning with 'a', ending with 'a', and containing # no consecutive 'b's value = str(mainWidget.lineEdit_eval.text()) nfa = NFA( # states=getStates(), # input_symbols=symbols, # transitions={ # 'q0': {'a': {'q1'}}, # # Use '' as the key name for empty string (lambda/epsilon) transitions # 'q1': {'a': {'q1'}, '': {'q2'}}, # 'q2': {'b': {'q0'}} # }, # initial_state='q0', # final_states={'q1'} states=getStates(), input_symbols=symbols, transitions=getNFATransitions(), initial_state=str(startNode.label.text()), final_states=getFinalStates()) try: listStates = list(nfa.validate_input(value, step=True)) print(str(listStates)) showMsg("NFA Successful, Last:" + str(nfa.validate_input(value))) except: showMsg("ERROR EVALUATING NFA") return nfa
def test_cyclic_lambda_transitions(self): """Should traverse NFA containing cyclic lambda transitions.""" # NFA which matches zero or more occurrences of 'a' nfa = NFA( states={'q0', 'q1', 'q2', 'q3'}, input_symbols={'a'}, transitions={ 'q0': {'': {'q1', 'q3'}}, 'q1': {'a': {'q2'}}, 'q2': {'': {'q3'}}, 'q3': {'': {'q0'}} }, initial_state='q0', final_states={'q3'} ) nose.assert_equal(nfa.validate_input(''), {'q0', 'q1', 'q3'}) nose.assert_equal(nfa.validate_input('a'), {'q0', 'q1', 'q2', 'q3'})