I wrote a script to model the behaviour of Deterministic Finite Automata, 
defined as the DFA, M = (Q,L,delta,s,F), where Q is the set of states, L is the 
alphabet, delta is the transition function, delta: Q x L -> Q, s is the start 
state, F is the set of all accept/final states.

There is a verb, run, which takes a string and returns 1 if the string is 
accepted by the machine, 0 if not.

   M =: 0 1 2 ; 'ab' ; (1 2 ; 0 1 ; 2 0) ; 0 ; 1 2      NB. M=(Q,L,delta,s,F)

   Q =: >0{M                                            NB. states
   L =: >1{M                                            NB. language
   delta =: >2{M                                        NB. transition function
   s =: >3{M                                            NB. start state
   F =: >4{M                                            NB. final states

   run =: 3 :0                                          NB. run y tests if y is 
accepted
   ​q =. s
   ​while. 0<#y do.
​      q =. ​(L i.{.y) { >q{delta
      ​y =. }.y
​   end.
​   q e. F
​   )

   run 'a'
1
   run 'aa'
0
   run 'aaa'
1
   run 'abbbbbbbbbbbaabbbbb'
1
   run 'abbbbbbbbbbbaabbbbba'
0

I was wondering if anyone knows if it is possible to check if the machine 
accepts a regular expression (e.g. ab*(aab*)* )?
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to