Oops, typo in the documentation string that I didn't catch in the copy
and paste.
Fixed here:
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 }}
)
On Sat, Nov 7, 2020 at 5:02 PM Raul Miller <[email protected]> wrote:
>
> 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