CR, LF, and CRLF terminate lines in a script, and are not part of what the script sends to the parser.  Trailing CR, LF, CRCR, and CRLF are removed from lines from the keyboard.

Raul is working on a model for (;: y), which applies more generally.  Non-graphic ASCII characters except for SP and TAB are all treated as letters and are inflectable.

The change in 9.02 is to make LF special, always creating a word of its own even if followed by :. .  This is so that a quoted string can be scanned by (;: y) to split it into executable lines.

The C code for (x ;: y) bears no resemblance whatever to this J model.

(x ;: y) does allow floating-point type, but it converts to integer for each use.  It also audits the state table on each use.  For best speed on repeated use, use

(x&;: y)

Henry Rich

On 11/8/2020 11:05 AM, Don Guinn wrote:
True that a J script only contains LF, but if somehow a script were to
contain CR instead of LF it would be treated as if it contained LF. Windows
treats LF, CR and CR,LF in a script as the same. I don't know how LINUX
would handle CR. But if CR should be accepted like LF, I don't know how the
sequence LF,CR should be treated. Should each be put in separate words or
should they be in one word together?

And my comment about converting ms to integer. Not a problem for SQ, but
could be a problem if put into the interpreter as C code. Simpler to avoid
the problem now than later.

On Sun, Nov 8, 2020 at 8:44 AM Raul Miller <[email protected]> wrote:

That's not where we want to be.

    #;:'NB.',LF
2
    #;:'NB.',CR
1

Also:
    (;:32{.a.)-:(0;sj;mj) sq 32{.a.
1

Thanks,

--
Raul

On Sun, Nov 8, 2020 at 10:03 AM Don Guinn <[email protected]> wrote:
Would suggest that you add CR to the line 10 of sj as J treats CR like LF
in a J script:

mj=:10 (10 13)}mj  NB. LF and CR

On Sun, Nov 8, 2020 at 6:38 AM Raul Miller <[email protected]>
wrote:
I tested for that case:

    #;:'NB.',LF,LF
3
   #(0;sj;mj) sq 'NB.',LF,LF
3
    #(0;sj;mj) sq 'NB.',LF,LF,LF
4

Thanks,

--
Raul

On Sat, Nov 7, 2020 at 7:00 PM Henry Rich <[email protected]>
wrote:
I have only desk-checked this.  { } look OK; but it looks like LF.
will
inflect the LF.  I could be way off in my analysis.

LF outside of quotes is always a word of its own, admitting no
inflections.
Henry Rich

On 11/7/2020 5:04 PM, Raul Miller wrote:
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

--
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

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm


--
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

Reply via email to