Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lfa:lab05-nfa-python [2020/11/02 09:06]
lfa created
lfa:lab05-nfa-python [2020/11/08 13:11] (current)
dmihai
Line 1: Line 1:
-.+====== NFA Python Implementation ====== 
 + 
 +Consider the following encoding of an NFA: 
 +<​code>​ 
 +   <​number_of_states>​ 
 +   <​list_of_chars_in_alphabet>​ 
 +   <​list_of_final_states>​ 
 +   <​state>​ <​symbol>​ <​list_of_states>​ 
 +</​code>​ 
 + 
 +Example: 
 +<​code>​ 
 +
 +a b 
 +
 +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 
 +</​code>​ 
 + 
 +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. 
 +<​code>​ 
 +   pip install graphviz 
 +</​code>​ 
 + 
 +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 
 + 
 +{{:​lfa:​nfa_skel.rar|}}