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

nfa_skel.rar