first: parse(( fref = {<1 > 1 *}))
getfref line = { 2<:> 1 };
error: smark ignore(none) any(!<<>>) string(!<<;>>) scopy
numbers: number <;> numbers/done = { 2 * 1 };
labels: label labels/done = { 2 * 1 };
label: name <:> = { 1 <:> };
last: = { <.pn:1 .pxs;12> *
co1: ignore(!<<*>>) <*> ignore(none) </>/co1;
statement: [csym=0] oldtab(dtt) oldtab(pat)
( proc plst tlst <)> = (1){2 1 }
stt1: bundle ( frag = (1){ 2(nil) * 1(q1) }\stt1
| <;> ( ifelem = { 1(xbit) }
proc: smark ignore(none) <proc(>;
plst: list(pident)/null remote((octal(npa)))
pident: ident newtab(pat,npa);
tlst: <;>/null [i=0] list((name [i++])) remote((octal(i)))
frag: prule = (1){ 1(nil,q1) }
| labels noelem = (1){ 1 };
/*in sequel q2 is where to go on fail,q1 is exit bit*/
( ifeasy prule = (2){3(nil,nil)*<salt;>2*
| prule fref = (2){4({*<alt;>1},q1)*<goto;>3*
( disj = (2){2(q2,nil) * 1(nil,q1)} ifelem/done ishard
pelem: pprim = (2){1(q1)$2} iseasy
| (spdot|()) ignore(none)
( <(> ignore(blanks) list(parg) <)>
( (</> = {<alt;>} | <\>={<salt;>})
rname = (1){3(nil)*$1 2 1}
pdot: <.>/done ignore(none) ident\alias
([dtt?] | table(dtt) [ndt=0]) [ndt++];
spdot: <.> ignore(none) not(( any(letter) ))
parg: rname | remote(specparg);
| push(3,dtt,ndt,sndt) [dtt=0]
( ifelem = {1(nil,xbit) }
| = {1(nil,nil)*<1 succ>}
special: <=> (rname | remote(trule))
| <<> literal = (1){ $1 <.px> 1 }
rname: ( name tabval(pat,npa)/done
| <(> (number|tra) <)> tbody = {<gpar;> 2 * 1 } );
tra: list(tident) octal(npt);
tident: ident newtab(ptt,npt);
tbody: <{> ( <}> = { <1 generate> }
trb: telem ( <}> = { xbit 1 }
telem: <<> literal = { <.tx> 1 }
| <$> number = { <.tq;> 1 }
| name te1\done te2\done;
te1: tabval(dtt,ndt) tdot = tpt;
te2: tabval(ptt,npt) = {<.tq;>1};
tdot: (<.> number | ={<0>})
( <(> list(targ) <)> | null)
targ: name|remote(tbody);
tpt: { <.tp;.byte > 2 <,> 1 };
| remote(longlit) = { <;> 1} );
shortlit: ignore(none) smark any(litch) <>> scopy = { <s;'> 1 };
longlit: ignore(none) (<>> = { <\> <>> } | null) litb <>>
= { <<> 2 1 <\0> <>;.even> };
litb: smark string(litch) scopy <\>/done
assignment: lv assign expr = { 3 * 1 * 2 };
rv1: bundle ( infix prime = { 3 * 1 * 2 }\rv1
rva: <?> rv <:> rv fref fref
= { <.t;alt;> 2 * 4 * <salt;> 1 * 2 <:> 3 * 1 <:> };
lv suffix/done = { 2 * 1 }
| unary prime = { 1 * 2 }
| remote(number) = { <.l;> 1 };
lv: ( rname = { <.l;> 1 }
| <*> prime = { 1 * <.rv> } )
lv1: <[>/done bundle expr <]> = { 2 * 1 * <.f> }\lv1;
assign: <=> ignore(none) ( infix = { 1 * <.u> }
infix: smark ignore(none)
( <+> not((<+> not((<+>)) )) = {<.a>}
prefix: smark ignore(none)
suffix: smark ignore(none)
ccla: (<<<>) [classmask = 1<<nclass++] [classmask?]/cherr
ccl3: <>>\ccl4 ccle\ccl3;
ccl4: (<>> | cclx fail) (not((<>>)) | ccle);
ccle: char(n) [*(2*n+&classes) =| classmask];
ccl5: [*(&classes+n) =^ classmask] testn\ccl5;
ccl6: [*(&classes+n) =& ~classmask] testn\ccl6;
cherr: diag(( ={<too many char classes>} ));
putcharcl: zeron [classes=0]
parse(( = { * <.globl classtab> * <classtab:> * } ))
ptc1: [w = *(&classes+n)] parse((octal(w) = {1*}))
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;
getcsym: octal(csym) = {<.> 1};
getfref: octal(fsym) = { <..> 1 };
not: params(1) $1/done fail;
list1: bundle <,>/done $1 = { 2 * 1 }\list1;
remote: params(1) create parse(rem1,$1);
rem1: params(1) getcsym $1 = { 2 <=.> * 1 * };
number: smark ignore(none) any(digit) string(digit) scopy;
ident: smark ignore(none) any(letter) string(alpha);
oldtab: params(1) [$1?]/done discard($1) [$1=0];
newtab: params(2) ([$2?] | table($2) [$1=0])
enter($2,i) [$2[i] = $1++];
tabval: params(2) [$2?] find($2,i) [i=$1-$2[i]] octal(i);
letter: <<abcdefghijklmnopqrstuvwxyz>>
<<ABCDEFGHIJKLMNOPQRSTUVWXYZ>>;
<<abcdefghijklmnopqrstuvwxyz>>
<<ABCDEFGHIJKLMNOPQRSTUVWXYZ>>;
dtt: 0; /*delivered translation table*/
ndt: 0; /*numb of delivered translations*/
sndt: 0; /*saved ndt at beginning of disjunctive term*/
pat: 0; /*parsing rule parameter table*/
npa: 0; /*number of parsing rule params*/
ptt: 0; /*table of params of translation*/
npt: 0; /*number of params of translation*/