NFA Python Implementation
Consider the following encoding of an NFA:
<number_of_states> <list_of_chars_in_alphabet> <list_of_final_states> <state> <symbol> <list_of_states>
Example:
9 a b 4 0 EPS 1 0 a 5 0 b 0 1 EPS 2 1 b 3 5 2 EPS 4 2 a 2 3 3 a 3 3 b 3 4 EPS 4 7 8 5 a 6 5 b 5 6 EPS 7 6 a 6 7 EPS 6 7 b 4
You'll find in nfa_skel.rar a class that already reads the input and forms the NFA.
Also, you can use the graphvizNFA method to get a graphical representation of the NFA, but you will have to install the graphviz library.
pip install graphviz
Implement (in Python) an NFA class that supports the following methods:
1. step(configuration)
- returns a list with all reachable configurations in one step.
- an epsilon transition is also considered a step.
2. kstep(configuration, k)
- returns a list including all reachable configurations in k steps
- an epsilon transition is also considered a step.
- the final list contains only the states where we stopped, not the entire path to them.
- if no transitions are available and $ k > 0 $, return an empty list
3. accept(self, word: Word)
- True or False if the NFA accepts the given word.
4. epsilonClosure(self, state: State)
- the set of all states where we can go from the current state by going through epsilon transitions
5. emptyLanguage(self)
- True or False if the NFA's accepted language is the Empty Language