Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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'})