1 ..1 ..1:begin: ignore blanks pr1: comment salt;pr1 parse first salt;pr2 diag error pr2: comment salt;pr2 parse line salt;pr2 diag error salt;pr2 putcharcl 1 parse last .3=. <1 \0>;.even .2=. .tx;.3 .tp;.byte 1,0; 1 .tn .1=. fref 1 trans;1 .2 .4=. .tp;.byte 2,0; .txs;': 1 .tp;.byte 1,0; first: parse .1 getfref line 1 trans;1 .4 .1=. 1 .2=. 2 .3=. 1 .txs;'; .5=. ;.even .4=. .tn .tx;.5 .tp;.byte 2,0; .tp;.byte 1,0; 1 .tn error: smark ignore none any .1 string .2 scopy .pxs;'; alt;..3 trans;1 .3 goto;..2 ..3:null ..2: 1 trans;1 .4 .1=. .tp;.byte 2,0; .tn .tp;.byte 1,0; 1 .tn line: labels charcl alt;..7 .pxs;'; goto;..4 ..7:statement salt;..5 numbers salt;..6 trule .pxs;'; ..6: ..5: ..4: 1 trans;1 .1 .1=. .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; numbers: number .pxs;'; numbers alt;done 1 trans;1 .1 .1=. .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; labels: label labels alt;done 1 trans;1 .1 .1=. .tp;.byte 1,0; 1 .txs;': label: name .pxs;': 1 trans;1 .1 .2=. <.pn:1 .pxs;12\0>;.even .3=. <.tn:1 .txs;12\0>;.even .1=. .tx;.2 .tn .tx;.3 1 .tn last: 1 trans;1 .1 .1=. ;.even .2=. 4 comment: .px;.1 co1: ignore .2 .pxs;'* ignore none .pxs;'/ 1 alt;co1 .1=. 0 .2=. gpar;1 .tp;.byte 2,0; 1 .tp;.byte 1,0; .3=. gpar;1 1 generate .4=. gpar;1 .tp;.byte 2,0;nil .tn 1 .tp;.byte 1,0;q1 .5=. 1 .tp;.byte 1,0;xbit .7=. <1 succ\0>;.even .6=. .tp;.byte 1,0;nil .tn 1 .tx;.7 statement: .l;csym .l;.1 .st .p oldtab dtt oldtab pat proc alt;..11 plst tlst .pxs;') trans;1 .2 goto;..10 ..11:trans;1 .3 noelem ..10: stt1: bundle frag alt;..15 trans;1 .4 salt;stt1 goto;..12 ..15:.pxs;'; ifelem alt;..14 trans;1 .5 goto;..13 ..14:trans;1 .6 ..13: ..12: 1 succ .1=. ;.even proc: smark ignore none 1 .px;.1 .1=. 1 octal npa .3=. ;.even .2=. .tx;.3 .tp;.byte 1,0; 1 .tn plst: list pident alt;null remote .1 1 trans;1 .2 pident: ident 1 newtab pat npa .1=. 0 .2=. name .l;i .ia 1 .p .3=. 1 octal i .5=. ;.even .4=. .tx;.5 .tp;.byte 1,0; .tn .tp;.byte 2,0; 1 .tn tlst: .pxs;'; alt;null .l;i .l;.1 .st .p list .2 remote .3 1 trans;1 .4 .1=. gpar;1 1 .tp;.byte 1,0;nil q1 .2=. gpar;1 1 .tp;.byte 1,0; frag: prule alt;..17 trans;1 .1 goto;..16 ..17:labels noelem trans;1 .2 ..16: 1 succ .2=. ;.even .1=. gpar;2 .tp;.byte 3,0;nil nil .tn .tx;.2 .tp;.byte 2,0; .tn .tp;.byte 1,0;q2 q1 .tn .tp;.byte 2,0; 1 .txs;': .5=. ;.even .4=. .tn .tx;.5 1 .tp;.byte 1,0; .6=. ;.even .3=. gpar;2 .tp;.byte 4,0;.4 q1 .tn .tx;.6 .tp;.byte 3,0; .tn .tp;.byte 1,0; .txs;': .tp;.byte 2,0;q2 q1 .tn .tp;.byte 3,0; 1 .txs;': prule: .l;sndt .l;ndt .st .p disj .pxs;'| alt;..23 .l;ndt .l;sndt .st .p fref ifeasy alt;..21 prule trans;1 .1 goto;..20 ..21:prule fref trans;1 .3 ..20: noelem goto;..22 ..23: ..22: 1 succ .1=. gpar;2 .tp;.byte 2,0;q2 nil .tn 1 .tp;.byte 1,0;nil q1 disj: pelem pdot disj alt;..25 trans;1 .1 ifelem alt;done ishard goto;..24 ..25: ..24: 1 succ .1=. gpar;2 .tp;.byte 1,0;q1 1 .tq;2 .2=. 1 .3=. gpar;2 1 generate pelem: pprim alt;..31 trans;1 .1 iseasy goto;..26 ..31:.pxs;'( push .2 sndt prule alt;..30 .pxs;') goto;..27 ..30:.pxs;') trans;1 .3 noelem ..27: ..26: 1 succ .1=. gpar;1 .tq;1 .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; .2=. gpar;1 .tq;1 1 .tp;.byte 1,0; .4=. ;.even .3=. 1 .tx;.4 .5=. <\\\0>;.even .7=. ;.even .6=. 1 .tx;.7 .10=. gpar;1 .tp;.byte 3,0;nil .tn .tq;1 .tp;.byte 2,0; 1 .tp;.byte 1,0; pprim: special salt;..32 rname .pxs;': alt;..37 fail goto;..33 ..37:spdot salt;..34 ..34: ignore none .pxs;'( alt;..36 ignore blanks list parg .pxs;') trans;1 .1 goto;..35 ..36:trans;1 .2 ..35: ..33: ..32: .pxs;'/ alt;..41 trans;1 .3 goto;..40 ..41:.px;.5 alt;..43 trans;1 .6 ..40: rname trans;1 .10 goto;..42 ..43: ..42: 1 succ .2=. 0 pdot: .pxs;'. alt;done ignore none ident salt;alias .l;dtt .t salt;..44 table dtt .l;ndt .l;.2 .st .p ..44: .l;ndt .ia 1 .p .1=. 1 any letter spdot: .pxs;'. ignore none not .1 alias: 1 newtab dtt ndt parg: rname salt;..45 remote specparg ..45: 1 succ .2=. <\\n\\0\0>;.even .1=. 1 .tx;.2 .4=. <1 succ\0>;.even .3=. 1 .tx;.4 .5=. 3 .6=. 0 .7=. 1 .tp;.byte 1,0;nil xbit .11=. <1 succ\0>;.even .10=. .tp;.byte 1,0;nil nil .tn 1 .tx;.11 specparg: number salt;..46 charcl salt;..47 .pxs;'< alt;..57 longlit goto;..50 ..57:.pxs;'* alt;..56 trans;1 .1 goto;..51 ..56:.pxs;'( .pxs;') alt;..55 trans;1 .3 goto;..52 ..55:push .5 dtt ndt sndt .l;dtt .l;.6 .st .p prule .pxs;') oldtab dtt ifelem alt;..54 trans;1 .7 goto;..53 ..54:trans;1 .10 ..53: ..52: ..51: ..50: ..47: ..46: 1 succ .1=. 1 iseasy: .l;easy .l;.1 .st 1 .p .1=. 0 ishard: .l;easy .l;.1 .st 1 .p .1=. 2 noelem: .l;easy .l;.1 .st 1 .p .1=. 2 ifelem: .l;easy .l;.1 .ne 1 .t .2=. 1 ifeasy: .l;easy .l;.2 .eq 1 .t .2=. ;.even .1=. gpar;1 .tq;1 .tx;.2 1 .tp;.byte 1,0; .4=. <.px\0>;.even .3=. gpar;1 .tq;1 .tx;.4 1 .tp;.byte 1,0; .6=. <.pn\0>;.even .5=. gpar;1 .tq;1 1 .tx;.6 .10=. <.t\0>;.even .7=. 1 .tx;.10 .12=. <.p\0>;.even .11=. 1 .tx;.12 .13=. gpar;1 .tp;.byte 2,0; .tn .tq;1 1 .tp;.byte 1,0; special: .pxs;'= alt;..70 rname salt;..60 remote trule ..60: trans;1 .1 goto;..61 ..70:.pxs;'< alt;..67 literal trans;1 .3 goto;..62 ..67:.pxs;'* alt;..66 trans;1 .5 goto;..63 ..66:.pxs;'[ expr .pxs;'? alt;..65 trans;1 .7 goto;..64 ..65:trans;1 .11 ..64: .pxs;'] trans;1 .13 ..63: ..62: ..61: 1 succ .2=. <[-\0>;.even .3=. <\\<1]\0>;.even .1=. .tx;.2 .tp;.byte 1,0; 1 .tx;.3 rname: name alt;..72 tabval pat npa alt;done goto;..71 ..72:.pxs;'$ number ..71: 1 trans;1 .1 .2=. ;.even .1=. .tx;.2 .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; trule: oldtab ptt tbody salt;..73 .pxs;'( number salt;..74 tra ..74: .pxs;') tbody trans;1 .1 ..73: 1 succ tra: list tident 1 octal npt tident: ident 1 newtab ptt npt .2=. <1 generate\0>;.even .1=. 1 .tx;.2 tbody: .pxs;'{ .pxs;'} alt;..76 trans;1 .1 goto;..75 ..76:trb ..75: 1 succ .1=. xbit 1 .tp;.byte 1,0; .2=. .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; trb: telem .pxs;'} alt;..100 trans;1 .1 goto;..77 ..100:trb trans;1 .2 ..77: 1 succ .2=. <.tx\0>;.even .1=. .tx;.2 1 .tp;.byte 1,0; .4=. <.tn\0>;.even .3=. 1 .tx;.4 .6=. <.tq;\0>;.even .5=. .tx;.6 1 .tp;.byte 1,0; telem: .pxs;'< alt;..110 literal trans;1 .1 goto;..101 ..110:.pxs;'* alt;..107 trans;1 .3 goto;..102 ..107:.pxs;'$ alt;..106 number trans;1 .5 goto;..103 ..106:number alt;..105 tdot trans;1 tpt goto;..104 ..105:name te1 salt;done te2 salt;done ..104: ..103: ..102: ..101: 1 succ te1: tabval dtt ndt tdot 1 trans;1 tpt .2=. <.tq;\0>;.even .1=. .tx;.2 1 .tp;.byte 1,0; te2: tabval ptt npt 1 trans;1 .1 .1=. 1 .txs;'0 .2=. .tp;.byte 2,0; .txs;'; 1 .tp;.byte 1,0; tdot: .pxs;'. alt;..112 number goto;..111 ..112:trans;1 .1 ..111: .pxs;'( alt;..114 list targ .pxs;') goto;..113 ..114:null ..113: 1 trans;1 .2 targ: name salt;..115 remote tbody ..115: 1 succ .1=. <.tp;.byte \0>;.even tpt: .tx;.1 .tp;.byte 2,0; .txs;', 1 .tp;.byte 1,0; .1=. .txs;'; 1 .tp;.byte 1,0; literal: shortlit salt;..116 remote longlit trans;1 .1 ..116: 1 succ .1=. <\>\0>;.even .3=. ;.even .2=. .tx;.3 1 .tp;.byte 1,0; shortlit: ignore none smark any litch .px;.1 scopy 1 trans;1 .2 .1=. <\>\0>;.even .3=. <\\\0>;.even .4=. <\>\0>;.even .2=. .tx;.3 1 .tx;.4 .5=. <\>\0>;.even .7=. <\\0\0>;.even .10=. <\>;.even\0>;.even .6=. .txs;'< .tp;.byte 2,0; .tp;.byte 1,0; .tx;.7 1 .tx;.10 longlit: ignore none .px;.1 alt;..120 trans;1 .2 goto;..117 ..120:null ..117: litb .px;.5 1 trans;1 .6 .1=. <\\\0>;.even .3=. <\\\\\0>;.even .2=. .tp;.byte 2,0; .tx;.3 1 .tp;.byte 1,0; litb: smark string litch scopy .px;.1 alt;done litb 1 trans;1 .2 expr: assignment salt;..121 rv ..121: 1 succ .1=. .tp;.byte 3,0; .tn .tp;.byte 1,0; .tn 1 .tp;.byte 2,0; assignment: lv assign expr 1 trans;1 .1 .1=. .tp;.byte 3,0; .tn .tp;.byte 1,0; .tn 1 .tp;.byte 2,0; .2=. .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; rv: prime rv1: bundle infix alt;..125 prime trans;1 .1 salt;rv1 goto;..122 ..125:rva alt;..124 trans;1 .2 goto;..123 ..124: ..123: ..122: 1 succ .2=. <.t;alt;\0>;.even .3=. ;.even .1=. .tx;.2 .tp;.byte 2,0; .tn .tp;.byte 4,0; .tn .tx;.3 .tp;.byte 1,0; .tn .tp;.byte 2,0; .txs;': .tp;.byte 3,0; .tn .tp;.byte 1,0; 1 .txs;': rva: .pxs;'? rv .pxs;': rv fref fref 1 trans;1 .1 .1=. .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; .2=. .tp;.byte 1,0; .tn 1 .tp;.byte 2,0; .3=. .tp;.byte 1,0; .tn 1 .tp;.byte 2,0; .5=. <.l;\0>;.even .4=. .tx;.5 1 .tp;.byte 1,0; prime: lv alt;..135 suffix alt;done trans;1 .1 goto;..126 ..135:prefix alt;..134 lv trans;1 .2 goto;..127 ..134:.pxs;'( alt;..133 expr .pxs;') goto;..130 ..133:unary alt;..132 prime trans;1 .3 goto;..131 ..132:remote number trans;1 .4 ..131: ..130: ..127: ..126: 1 succ .2=. <.l;\0>;.even .1=. .tx;.2 1 .tp;.byte 1,0; .4=. <.rv\0>;.even .3=. .tp;.byte 1,0; .tn 1 .tx;.4 .6=. <.f\0>;.even .5=. .tp;.byte 2,0; .tn .tp;.byte 1,0; .tn 1 .tx;.6 lv: rname alt;..141 trans;1 .1 goto;..136 ..141:.pxs;'( alt;..140 lv .pxs;') goto;..137 ..140:.pxs;'* prime trans;1 .3 ..137: ..136: lv1: .pxs;'[ alt;done bundle expr .pxs;'] trans;1 .5 1 salt;lv1 .2=. <.u\0>;.even .1=. .tp;.byte 1,0; .tn 1 .tx;.2 .4=. <.st\0>;.even .3=. 1 .tx;.4 assign: .pxs;'= ignore none infix alt;..143 trans;1 .1 goto;..142 ..143:trans;1 .3 ..142: 1 succ .2=. 1 .pxs;'+ .1=. .pxs;'+ 1 not .2 .4=. <.a\0>;.even .3=. 1 .tx;.4 .6=. <.s\0>;.even .5=. 1 .tx;.6 .10=. <.m\0>;.even .7=. 1 .tx;.10 .12=. <.q\0>;.even .11=. 1 .tx;.12 .14=. <.r\0>;.even .13=. 1 .tx;.14 .16=. <.o\0>;.even .15=. 1 .tx;.16 .20=. <.x\0>;.even .17=. 1 .tx;.20 .22=. <.n\0>;.even .21=. 1 .tx;.22 .23=. <==\0>;.even .25=. <.eq\0>;.even .24=. 1 .tx;.25 .26=. ;.even .30=. <.ne\0>;.even .27=. 1 .tx;.30 .31=. <<=\0>;.even .33=. <.le\0>;.even .32=. 1 .tx;.33 .34=. <\>=\0>;.even .36=. <.ge\0>;.even .35=. 1 .tx;.36 .37=. <<<\0>;.even .41=. <.sl\0>;.even .40=. 1 .tx;.41 .43=. <.lt\0>;.even .42=. 1 .tx;.43 .44=. <\>\0>;.even .45=. <\>\0>;.even .47=. <.sr\0>;.even .46=. 1 .tx;.47 .51=. <.gt\0>;.even .50=. 1 .tx;.51 infix: smark ignore none .pxs;'+ alt;..201 not .1 trans;1 .3 goto;..144 ..201:.pxs;'- alt;..200 trans;1 .5 goto;..145 ..200:.pxs;'* alt;..177 trans;1 .7 goto;..146 ..177:.pxs;'/ alt;..176 trans;1 .11 goto;..147 ..176:.pxs;'% alt;..175 trans;1 .13 goto;..150 ..175:.pxs;'| alt;..174 trans;1 .15 goto;..151 ..174:.pxs;'^ alt;..173 trans;1 .17 goto;..152 ..173:.pxs;'& alt;..172 trans;1 .21 goto;..153 ..172:.px;.23 alt;..171 trans;1 .24 goto;..154 ..171:.px;.26 alt;..170 trans;1 .27 goto;..155 ..170:.px;.31 alt;..167 trans;1 .32 goto;..156 ..167:.px;.34 alt;..166 trans;1 .35 goto;..157 ..166:.px;.37 alt;..165 trans;1 .40 goto;..160 ..165:.pxs;'< alt;..164 trans;1 .42 goto;..161 ..164:.px;.44 .px;.45 alt;..163 trans;1 .46 goto;..162 ..163:trans;1 .50 ..162: ..161: ..160: ..157: ..156: ..155: ..154: ..153: ..152: ..151: ..150: ..147: ..146: ..145: ..144: 1 succ .2=. <.lv\0>;.even .1=. 1 .tx;.2 .3=. <++\0>;.even .5=. <.ib\0>;.even .4=. 1 .tx;.5 .6=. <--\0>;.even .10=. <.db\0>;.even .7=. 1 .tx;.10 prefix: smark ignore none .pxs;'& alt;..205 trans;1 .1 goto;..202 ..205:.px;.3 alt;..204 trans;1 .4 goto;..203 ..204:.px;.6 trans;1 .7 ..203: ..202: 1 succ .1=. <++\0>;.even .3=. <.ia\0>;.even .2=. 1 .tx;.3 .4=. <--\0>;.even .6=. <.da\0>;.even .5=. 1 .tx;.6 suffix: smark ignore none .px;.1 alt;..207 trans;1 .2 goto;..206 ..207:.px;.4 trans;1 .5 ..206: 1 succ .2=. <.nt\0>;.even .1=. 1 .tx;.2 .4=. <.ng\0>;.even .3=. 1 .tx;.4 .6=. <.cm\0>;.even .5=. 1 .tx;.6 unary: .pxs;'! alt;..213 trans;1 .1 goto;..210 ..213:.pxs;'- alt;..212 trans;1 .3 goto;..211 ..212:.pxs;'~ trans;1 .5 ..211: ..210: 1 succ charcl: .pxs;'! alt;..215 ccla cclb goto;..214 ..215:ccla ..214: 1 octal classmask .1=. <<<\0>;.even .2=. 1 .4=. <<<\0>;.even ccla: .px;.1 .l;classmask .l;.2 .l;nclass .ia .sl .st .p .l;classmask .t alt;cherr ccl1: cclc .px;.4 1 salt;ccl1 .1=. <\>\0>;.even cclc: ignore none ccl3: .px;.1 salt;ccl4 ccle 1 salt;ccl3 .1=. <\>\0>;.even .3=. <\>\0>;.even .2=. 1 .px;.3 ccl4: .px;.1 salt;..216 cclx fail ..216: not .2 salt;..217 ccle ..217: 1 succ .1=. 2 ccle: char n .l;.1 .l;n .m .l;classes .lv .a .rv .l;classmask .o .u 1 .p cclb: zeron ccl5: .l;classes .lv .l;n .a .rv .l;classmask .x .u .p testn 1 salt;ccl5 cclx: .l;nclass .da .p zeron ccl6: .l;classes .lv .l;n .a .rv .l;classmask .cm .n .u .p testn 1 salt;ccl6 .3=. ;.even .2=. 1 .tx;.3 .1=. 1 trans;1 .2 cherr: 1 diag .1 .1=. 0 zeron: .l;n .l;.1 .st 1 .p .1=. 2 .2=. 400 testn: .l;n .l;.1 .a .u .l;.2 .lt 1 .t .1=. 0 .4=. <.globl classtab\0>;.even .5=. ;.even .3=. .tn .tx;.4 .tn .tx;.5 1 .tn .2=. 1 trans;1 .3 .7=. .tp;.byte 1,0; 1 .tn .6=. octal w 1 trans;1 .7 putcharcl: zeron .l;classes .l;.1 .st .p parse .2 ptc1: .l;w .l;classes .lv .l;n .a .rv .st .p parse .6 bundle testn 1 salt;ptc1 classmask: 0 nclass: 0 classes: cl1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cl2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cl3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cl4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cl5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cl6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cl7: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cl8: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 done: 1 succ .1=. .txs;'. 1 .tp;.byte 1,0; create: .l;csym .ia .p getcsym: octal csym 1 trans;1 .1 .2=. <..\0>;.even .1=. .tx;.2 1 .tp;.byte 1,0; fref: .l;fsym .ia .p getfref: octal fsym 1 trans;1 .1 .1=. 1 not: params .1 [-1\<1] alt;done 1 fail .1=. 1 .2=. .tp;.byte 2,0; .tn 1 .tp;.byte 1,0; list: params .1 [-1\<1] list1: bundle .pxs;', alt;done [-1\<1] trans;1 .2 1 salt;list1 .1=. 1 remote: params .1 create 1 parse rem1 [-1\<1] .1=. 1 .3=. <=.\0>;.even .2=. .tp;.byte 2,0; .tx;.3 .tn .tp;.byte 1,0; 1 .tn rem1: params .1 getcsym [-1\<1] 1 trans;1 .2 number: smark ignore none any digit string digit 1 scopy name: ident 1 scopy ident: smark ignore none any letter 1 string alpha .1=. 1 .3=. 0 oldtab: params .1 .l;[-1\<1] .t alt;done discard [-1\<1] .l;[-1\<1] .l;.3 .st 1 .p .1=. 2 .3=. 0 newtab: params .1 .l;[-2\<1] .t salt;..220 table [-2\<1] .l;[-1\<1] .l;.3 .st .p ..220: enter [-2\<1] i .l;[-2\<1] .l;i .f .l;[-1\<1] .ia .st 1 .p .1=. 2 tabval: params .1 .l;[-2\<1] .t find [-2\<1] i .l;i .l;[-1\<1] .l;[-2\<1] .l;i .f .s .st .p 1 octal i null: 1 trans;1 nil .1=. <1 \0>;.even xbit: 1 .tx;.1 q1: 1 .tq;1 q2: 1 .tq;2 nil: 1 generate blanks: 10 digit: 20 letter: 40 alpha: 100 litch: 200 none: 400 csym: 0 fsym: 0 easy: 0 w: 0 n: 0 dtt: 0 ndt: 0 sndt: 0 pat: 0 npa: 0 ptt: 0 npt: 0 i: 0 .globl classtab classtab: 0 207 207 207 207 207 207 207 207 217 217 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 217 207 207 207 207 207 207 207 207 207 203 207 207 207 207 207 327 327 327 327 327 327 327 327 327 327 207 205 207 207 7 207 207 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 207 7 207 207 207 207 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 347 207 207 207 207 207 .pn:1 .pxs;12 .tn:1 .txs;12