Advertisement
Jinx3d

Nondeterministic Automaton with epsilon transitions

Apr 11th, 2014
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.39 KB | None | 0 0
  1. import sys
  2.  
  3. data, inputArrays, transitionFunction = [], [], {}
  4.  
  5. # Get all shit from input file into nice array
  6. for line in sys.stdin :
  7.     data.append(line.rstrip())
  8.  
  9. # Gimme initial state
  10. initialState = data[4]
  11.  
  12. # Gimme my transition function
  13. for transition in data[5:] :
  14.     transitionFunction[transition.split('->')[0]] = transition.split('->')[1].split(',')
  15.  
  16. # Put all input strings into nice list
  17. for array in data[0].split('|') :
  18.     inputArrays.append(array.split(','))
  19.  
  20. # eNKA
  21. # ss = start state; ic = input character; fn = transition function;
  22. def eNKA(ss, ic, fn) :
  23.     if not ss or not ic or ((ss == '#') and not ic) : return []
  24.  
  25.     if (ic == '$') and (ss + ',$') in fn : return fn[ss+',$']
  26.     elif ic == '$' : return []
  27.  
  28.     if (ss+','+ic) in fn : return fn[ss+','+ic]
  29.  
  30. # Automaton
  31. # ss = start states; ir = input array; fn = transition function;
  32. def automaton(ss, ir, fn) :
  33.     if not ir : return ''
  34.     states, estates, returnString, other = [], [], '', ''
  35.  
  36.     for s in ss :
  37.         states += eNKA(s, ir[0], fn)
  38.     if states :
  39.         for state in states :
  40.             estates += eNKA(state, '$', fn)
  41.  
  42.     returnString = ','.join(list(set(states + estates)))
  43.  
  44.     if estates : print(str(estates)+' : '+str(ir[1:]))
  45.     #if estates : other = automaton(estates, ir[1:], fn)
  46.  
  47.     return returnString + ('|'+other if other else '')
  48.  
  49. # print(str(inputArrays[0]))
  50. print(automaton(['stanje1'], inputArrays[0], transitionFunction))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement