I think this will do that:

mj=: 256$0                     NB. X other
mj=: 1 (9,a.i.' ')}mj          NB. S space and tab
mj=: 2 (,(a.i.'Aa')+/i.26)}mj  NB. A A-Z a-z excluding N B
mj=: 3 (a.i.'N')}mj            NB. N the letter N
mj=: 4 (a.i.'B')}mj            NB. B the letter B
mj=: 5 (a.i.'0123456789_')}mj  NB. 9 digits and _
mj=: 6 (a.i.'.')}mj            NB. . the decimal point
mj=: 7 (a.i.':')}mj            NB. : the colon
mj=: 8 (a.i.'''')}mj           NB. Q quote
mj=: 9 (a.i.'{')}mj            NB. { the left curly brace
mj=:10 (10)} mj                NB. LF
mj=:11 (a.i.'}')}mj            NB. } the right curly brace

sj=: 0 10#:10*}.".;._2(0 :0)
' X   S   A   N   B   9   .   :   Q    {    }   LF ']0
 1.1 0.0 2.1 3.1 2.1 6.1 1.1 1.1 7.1 11.1 10.1 12.1 NB. 0 space
 1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2 11.2 10.2 12.2 NB. 1 other
 1.2 0.3 2.0 2.0 2.0 2.0 1.0 1.0 7.2 11.2 10.2 12.2 NB. 2 alp/num
 1.2 0.3 2.0 2.0 4.0 2.0 1.0 1.0 7.2 11.2 10.2 12.2 NB. 3 N
 1.2 0.3 2.0 2.0 2.0 2.0 5.0 1.0 7.2 11.2 10.2 12.2 NB. 4 NB
 9.0 9.0 9.0 9.0 9.0 9.0 1.0 1.0 9.0  9.0 10.2  9.0 NB. 5 NB.
 1.4 0.5 6.0 6.0 6.0 6.0 6.0 1.0 7.4 11.4 10.2 12.4 NB. 6 num
 7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0  7.0  7.0  7.0 NB. 7 '
 1.2 0.3 2.2 3.2 2.2 6.2 1.2 1.2 7.0 11.2 10.2 12.2 NB. 8 ''
 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0  9.0 10.2  9.0 NB. 9 comment
 1.2 0.2 2.2 3.2 2.2 6.2 1.0 1.0 7.2 11.2 10.2 12.2 NB. 10 LF
 1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2 13.0 10.2  1.2 NB. 11 {
 1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2  1.2 10.2 14.0 NB. 12 }
 1.2 0.3 2.2 3.2 2.2 6.2 1.7 1.7 7.2  1.2 10.2  1.2 NB. 13 {{
 1.2 0.3 2.2 3.2 2.2 6.2 1.7 1.7 7.2  1.2 10.2  1.2 NB. 14 }}
)


Thanks,

-- 
Raul

On Sat, Nov 7, 2020 at 2:19 PM Henry Rich <[email protected]> wrote:
>
> That's good.  If anybody can see a problem with adding an opcode 7,
> titled 'backtrack', which goes back to the previous character without
> outputting anything, please speak up.
>
> To match (;: y), your state machine needs to treat LF as a special
> character that ends a comment, does not end a quoted string, and cannot
> be inflected.  When not in a quoted string it becomes a word by itself.
>
> Henry Rich
>
> On 11/7/2020 1:53 PM, Raul Miller wrote:
> > I took the model proposed at
> > https://code.jsoftware.com/wiki/Vocabulary/semico#Running_the_Machine
> > and fixed a few problems and added an opcode 7, and built a state
> > table that satisfies the tests I put it through.
> >
> > It seems to work:
> >
> > sq=:4 :0
> >    'f s m ijrd'=. x,(#x)}.0;0;'';0 _1 0 _1 assert. 2 <: #x
> >    'i j r d'=. ijrd
> >    'p pj'=. _1,j
> >    if. 0 < L. m do.
> >      n=. (y i.~;m) { (#m),~(#&>m)#i.#m
> >    elseif. ''-:m do.
> >      n=. y
> >    elseif. do.
> >      n=. (a.i.y){m
> >    end.
> >    result=. f {:: (0#a:);'';i.&.>0 2;0;0 3;0 6
> >    while. i <: #n do.
> >      if. i = #n do.
> >        if. d >: 0 do. 'newrow action' =. (<r,c =. d) { s
> >        elseif. j = _1 do. break.
> >        elseif. f = 5 do. break.  NB. Don't output final flush
> >        elseif. do. 'newrow action' =. 0 5
> >        end.
> >      else. 'newrow action' =. (<r,c =. i { n) { s
> >      end.
> >      assert. newrow < #s
> >      if. f = 5 do. result =. result , i, j, r, c, newrow, action end.
> >      select. action
> >        case. 0 do.
> >        case. 6 do. break.
> >        case. 7 do. i=. i-2
> >        fcase. 2;3;4;5 do. NB. emit
> >          assert. j >: 0
> >          if. f ~: 5 do.
> >            ej=. ((r=p)*action>3) { j,pj
> >            select. f
> >              case. 0 do. newdata =. < ej }. i {. y
> >              case. 1 do. newdata =. ej }. i {. y
> >              case. 2 do. newdata =. ej , i
> >              case. 3 do. newdata =. (}:$s) #: r,c
> >              case. 4 do. newdata =. ej , (i-ej) , (}:$s) #: r,c
> >              case. do.
> >                'Invalid output type' 13!:8 (1)
> >            end.
> >            if. (action <: 3)+.r~:p do. result =. result , newdata
> >            else. result =. newdata (<:#result)} result
> >            end.
> >          end.
> >          if. r~:p do. pj=. j end.
> >          p=. action {_1 _1 _1 _1,r,r
> >        case. 1 do.
> >          j =. (action e. 1 2 4) { _1,i
> >        case. do.
> >          'Invalid action' 13!:8 (1)
> >      end. NB. select action
> >      r =. newrow
> >      i =. i + 1
> >    end.
> >    result
> > )
> >
> > mj=: 256$0                     NB. X other
> > mj=: 1 (9,a.i.' ')}mj          NB. S space and tab
> > mj=: 2 (,(a.i.'Aa')+/i.26)}mj  NB. A A-Z a-z excluding N B
> > mj=: 3 (a.i.'N')}mj            NB. N the letter N
> > mj=: 4 (a.i.'B')}mj            NB. B the letter B
> > mj=: 5 (a.i.'0123456789_')}mj  NB. 9 digits and _
> > mj=: 6 (a.i.'.')}mj            NB. . the decimal point
> > mj=: 7 (a.i.':')}mj            NB. : the colon
> > mj=: 8 (a.i.'''')}mj           NB. Q quote
> > mj=: 9 (a.i.'{')}mj            NB. { the left curly brace
> > mj=:10 (a.i.'}')}mj            NB. } the right curly brace
> >
> > NB.0   1    2   3     4    5    6    7    8     9     10
> > sj=: _2]\"1 }.".;._2 (0 : 0)
> > ' X    S    A    N    B    9    .    :    Q     {      } ']0
> >   1 1  0 0  2 1  3 1  2 1  6 1  1 1  1 1  7 1  10 1  11 1  NB.  0 space
> >   1 2  0 3  2 2  3 2  2 2  6 2  1 0  1 0  7 2  10 2  11 2  NB.  1 other
> >   1 2  0 3  2 0  2 0  2 0  2 0  1 0  1 0  7 2  10 2  11 2  NB.  2 alp/num
> >   1 2  0 3  2 0  2 0  4 0  2 0  1 0  1 0  7 2  10 2  11 2  NB.  3 N
> >   1 2  0 3  2 0  2 0  2 0  2 0  5 0  1 0  7 2  10 2  11 2  NB.  4 NB
> >   9 0  9 0  9 0  9 0  9 0  9 0  1 0  1 0  9 0   9 0   9 0  NB.  5 NB.
> >   1 4  0 5  6 0  6 0  6 0  6 0  6 0  1 0  7 4  10 4  11 4  NB.  6 num
> >   7 0  7 0  7 0  7 0  7 0  7 0  7 0  7 0  8 0   7 0   7 0  NB.  7 '
> >   1 2  0 3  2 2  3 2  2 2  6 2  1 2  1 2  7 0  10 2  11 2  NB.  8 ''
> >   9 0  9 0  9 0  9 0  9 0  9 0  9 0  9 0  9 0   9 0   9 0  NB.  9 comment
> >   1 2  0 3  2 2  3 2  2 2  6 2  1 0  1 0  7 2  12 0   1 2  NB. 10 {
> >   1 2  0 3  2 2  3 2  2 2  6 2  1 0  1 0  7 2   1 2  13 0  NB. 11 }
> >   1 2  0 3  2 2  3 2  2 2  6 2  1 7  1 7  7 2   1 2   1 2  NB. 12 {{
> >   1 2  0 3  2 2  3 2  2 2  6 2  1 7  1 7  7 2   1 2   1 2  NB. 13 }}
> > )
> >
> >     (0;sj;mj) sq '{{+/y}}'
> > +--+-+-+-+--+
> > |{{|+|/|y|}}|
> > +--+-+-+-+--+
> >     (0;sj;mj) sq '{{+/y}}}'
> > +--+-+-+-+--+-+
> > |{{|+|/|y|}}|}|
> > +--+-+-+-+--+-+
> >     (0;sj;mj) sq '{{.+/y}}.'
> > +-+--+-+-+-+-+--+
> > |{|{.|+|/|y|}|}.|
> > +-+--+-+-+-+-+--+
> >
> > Thanks,
> >
>
>
> --
> This email has been checked for viruses by AVG.
> https://www.avg.com
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to