How are finite automata implemented in code?

前端 未结 5 1471
我在风中等你
我在风中等你 2020-12-14 01:59

How does one implement a dfa or an nfa for that matter in Python code?

What are some good ways to do it in python? And are they ever used

5条回答
  •  萌比男神i
    2020-12-14 02:32

    You don't need a for loop over range(len(input)) if you're using recursion. You're overcomplicating the code. Here's a simplified version

    import sys
    
    def main():
        transition = [[[0,1],[0]], [[4],[2]], [[4],[3]], [[4],[4]]]
        input = raw_input("enter the string: ")
        input = list(input) #copy the input in list because python strings are immutable and thus can't be changed directly
        for index in range(len(input)): #parse the string of a,b in 0,1 for simplicity
            if input[index]=='a':
                input[index]='0' 
            else:
                input[index]='1'
    
        final = "3" #set of final states = {3}
        start = 0
    
        trans(transition, input, final, start)
        print "rejected"
    
    
    def trans(transition, input, final, state):
        for each in transition[state][int(input[0])]: #check for each possibility       
            if each < 4:                              #move further only if you are at non-hypothetical state
                state = each
                if len(input)==1:
                    if (str(state) in final): #last symbol is read and current state lies in the set of final states
                        print "accepted"
                        sys.exit()
                    else:
                        continue
                trans(transition, input[1:], final, state) #input string for next transition is input[i+1:]
    
    main()
    

提交回复
热议问题