[STMNT.REC] [CNVRT compiler for "C" Statements] [Harold V. McIntosh, 10 June 1983] { { [find/make FCB] (Jj'TTY:'EQZD;(':'UQD':'ED\64-%;0%;) ('.'U<(8a;@b;)Q|D>;Z'.DAT'IJj:) '.'FJDZ(3a;@b;)Q|JZDI 32(dpGm$r0=npGpGd0&$Sm@znpGQ&$rrS0; r12wQmwnEn;n:)D;) f [blank fill by count] (Zz(d' 'I:;)JZ;) b [zero fill] (cmpw0%(f:;)w;) 0 [zero FCB & buffer] ($m33@0130@0nn&0||pLnS;) z [set default input file] (0,30$S'5C'H12wA' 'Ew4@0n0|0|pL31$S 'TTY:'31$rrS; B9aQD(3a' 'E 'DAT';Q;)|mw31@zn31$rrS31@r;) i [open for read] (@hr15K(255='NO FILE'I;L;)L;) r [open for write] (@hpGpG4+1&SrpG19k22k^^r128&S;) w [set DMA address] ($rpG^^r^^26k;) h [open] (m@f0=n@@;nLL;) O [read] (''(AL@f(0=pG@r;'TTY:'(='T');)) ('T'='';L31pG$rr12w'TTY:'Ew;w) L@&'> 'TL(@#I;:); $r(pG^^rpGmr(0=(npGpGm128&S^^26kpGr 20K0=L;LL1npGpGm129+26%&SS;)npGmr;;) pG130&-n+&dm(u13%=;10%(=)pGI(26%=; L);ndm:)L^^rn&S;LpG^^r0&S:);) R [write] (Jj'='U<(A@f'TTY:'(=)(0=pG@w;;))>'='ED ZqtD; >'='EDZ<@g;) W [write to disk] ($r(pG^^rpGpGmrpGm- 130+n&maQD>ZnSnSL;);) g [close all files] (31pGm($r0=;pG4+r(0=L;LJj26%I;J>);nLA:0&$SL>)>LL;) > [body of variable search] (pG$r(0=)yGEz@=L;pG$r(0=;LL) Z<((jJQmpGl&$S zZ<@=>;J>);nLA:0&$S>)>L;) < [insert variable] ($ryGI;) [ [compile statement] { [statement] ( [or] Z<('if ('Ez@E') 'Ez@S' else 'Ez@S; J'if ('Ez@E') 'Ez@S; J'while ('Ez@E') 'Ez@S; J'do 'Ez@S' while ('Ez@E');'Ez; J'for ('Ez@F'; 'Ez@F'; 'Ez@F') 'Ez@S; J'switch ('Ez@E') 'Ez@S; J'case 'Ez@E': 'Ez@S; J'default: 'Ez@S; J'break;'Ez; J'continue;'Ez; J'return 'Ez@F';'Ez; J'goto 'Ez@I';'Ez; J@I': 'Ez@S; J@F';'Ez; J'{'Ez([ITR] Z<@S>:J>;)[ITR] '}'Ez;>)> [or] ;) S ( [and] Z<(@E jJ><1@](A);>)> [and] ;) 1 ( [and] Z<(@S jJ><2@](A);>)> [and] ;) 2 ( [and] Z<(@S jJ><3@](A);>)> [and] ;) 3 ( [and] Z<(@F jJ><4@](A);>)> [and] ;) 4 ( [and] Z<(@F jJ><5@](A);>)> [and] ;) 5 ( [and] Z<(@F jJ><6@](A);>)> [and] ;) 6 (0@( 1@( 2@( 3@( 4@( 5@( 6@( {(0@: 1@: 2@: 3@: 4@: 5@: 6@: ;); ( [prnt WS] @;(J2573TLZqtj(A)JZD;); [if-then] @;(J {[vbl] ('@if 'Ez [and] Z<('('Ez@E') 'Ez@S' else 'Ez@S jJ><'('Ez@1') 'Ez@2' else 'Ez@3(A);>)> [and] ;) = ('@if '0@>;)}[vbl] JZDz<1@[@xZ>'/jnz beta'I0@[z'@'I2@[@wZ>'/jmp gama'I0@['/beta'I0@[':'Iz'@'I3@[@wZ>'/gama'I0@[':'I;); [if] @;(J {[vbl] ('@if ('Ez@1') 'Ez@2;) = ('@if '0@>;)}[vbl] JZDz<1@[@xZ>'/jnz beta'I0@[z'@'I2@[@wZ>'/beta'I0@[':'I;); [while] @;(J {[vbl] ('@while ('Ez@1') 'Ez@2;) = ('@while '0@>;)}[vbl] JZD'/alfa'I0@[':'Iz<1@[@xZ>'/jz break'I0@[z'@'I2@[@wZ>'/contin'I0@[':/jmp alfa'I0@['/break'I0@[':'I;); [do-while] @;(J {[vbl] ('@do 'Ez@2' while ('Ez@1');'Ez;) = ('@do '0@>;)}[vbl] JZD'/alfa'I0@[':'Iz'@'I2@[@wZ>'/contin'I0@[':'Iz<1@[@xZ>'/jnz alfa'I0@['/break'I0@[':'I;); [for] @;(J {[vbl] ('@for ('Ez@4'; 'Ez@5'; 'Ez@6') 'Ez@2;) = ('@for '0@>;)}[vbl] JZDz<4@[@xZ>'/alfa'I0@[':'Iz<5@[@yZ>'/jz break'I0@[z'@'I2@[@wZ>'/contin'I0@[':'Iz<6@[@xZ>'/jmp alfa'I0@['/break'I0@[':'I;); [switch] @;(J {[vbl] ('@switch ('Ez@1') 'Ez@2;) = ('@switch '0@>;)}[vbl] JZDz<1@[@xZ>z'@'I2@[@wZ>'/break'I0@[':'I;); [case] @;(J {[vbl] ('@case 'Ez@1': 'Ez@2;) = ('@case '0@>;)}[vbl] JZDz<1@[@xZ>'/compare alfa'I0@[z'@'I2@[@wZ>'/alfa'I0@[':'I;); [default] @;(J {[vbl] ('@default: 'Ez@2;) = ('@default: '0@>;)}[vbl] JZDz'@'I2@[@wZ>;); [break] @;(J {[vbl] ('@break;'Ez;) = ('@break;'0@>;)}[vbl] JZD'/gobreak 'I0@[;); [continue] @;(J {[vbl] ('@continue;'Ez;) = ('@continue;'0@>;)}[vbl] JZD'/gocontin 'I0@[;); [return] @;(J {[vbl] ('@return 'Ez@1';'Ez;) = ('@return '0@>;)}[vbl] JZDz<1@[@xZ>'/return'I;); [return] @;(J {[vbl] ('@return;'Ez;) = ('@return;'0@>;)}[vbl] JZD'/return'I;); [goto] @;(J {[vbl] ('@goto 'Ez [and] Z<(@I jJ><1@](A);>)> [and] ';'Ez;) = ('@goto '0@>;)}[vbl] JZD'/goto 'I1@[;); [label] @;(J {[vbl] ('@'Ez [and] Z<(@I':'Ez jJ>< {[vbl] (':'Ez;) = (':'1@>;)}[vbl] (A);>)> [and] ' 'Ez@2;) = ('@'0@>;)}[vbl] JZD'/'I1@[': 'Iz<'0@'I2@[@wZ>;); [expression] @;(J {[vbl] ('@'Ez [and] Z<(@E';'Ez jJ>< {[vbl] (';'Ez(A);) = (';'1@>;)}[vbl] (A);>)> [and] ;) = ('@'0@>;)}[vbl] JZDz<1@[@xZ>;); [compound] @;(J {[vbl] ('@{'Ez@2 {[vbl] ('}'Ez(A);) = ('}'1@>;)}[vbl] ;) = ('@{'0@>;)}[vbl] JZDz<0@['@'I2@[@wZ>z<0@['@{'I1@['}'I@wZ>;); [compound] @;(J {[vbl] ('@{}'Ez;) = ('@{}'0@>;)}[vbl] JZD;); @;(JJZD'other'I;); ;)} 0@) 1@) 2@) 3@) 4@) 5@) 6@) nn$S nn$S nn$S nn$S nn$S nn$S nn$S;)} w [token compilation of expressions] {(0@( 1@( 2@( {(0@: 1@: 2@: ;); ( @;(J0@]JZD'/compiled 'I0@[;); ;)} 0@) 1@) 2@) nn$S nn$S nn$S;)} x [1 for null program] {(0@( {(0@: ;); ( @;(J(A)JZD'/ db 1'I;); @;(J0@]JZDz<0@[@xZ>;); ;)} 0@) nn$S;)} y [main program including syntactic elements] { [alfanum] ( [and] Z<(1(a;L)z jJ><' ''~'Mz(A);>)> [and] ;) a [letter] ( [and] Z<(1(a;L)z jJ>< [or] Z<('A''Z'Mz; J'a''z'Mz; J'_'Ez;>)> [or] (A);>)> [and] ;) b [odigit] ( [and] Z<(1(a;L)z jJ><'0''7'Mz(A);>)> [and] ;) c [ddigit] ( [and] Z<(1(a;L)z jJ><'0''9'Mz(A);>)> [and] ;) d [hdigit] ( [and] Z<(1(a;L)z jJ>< [or] Z<('0''9'Mz; J'A''F'Mz; J'a''f'Mz;>)> [or] (A);>)> [and] ;) e [cconst] ( [or] Z<('\'Ez@a; J39%Ez@a39%Ez;>)> [or] ;) j [iconst] ( [or] Z<('0'Ez [or] Z<('X'Ez; J'x'Ez;>)> [or] ([ITR] Z<@e>:J>;)[ITR] ; J'0'Ez([ITR] Z<@c>:J>;)[ITR] ; J@d([ITR] Z<@d>:J>;)[ITR] ;>)> [or] ;) k [fconst] (([ITR] Z<@d>:J>;)[ITR] '.'Ez([ITR] Z<@d>:J>;)[ITR] [or] Z<( [or] Z<('E'Ez; J'e'Ez;>)> [or] [or] Z<('+'Ez; J'-'Ez; J;>)> [or] ([ITR] Z<@d>:J>;)[ITR] ; J;>)> [or] ;) l [sconst] (34%Ez([ITR] Z<@a>:J>;)[ITR] 34%Ez;) m [constant] ( [or] Z<(@l; J@k; J@j; J@m;>)> [or] ;) o [identifier](@b([ITR] Z< [or] Z<(@b; J@d;>)> [or] >:J>;)[ITR] ;) I [aoperator] ( [or] Z<('='Ez; J'+='Ez; J'-='Ez; J'*='Ez; J'/='Ez; J'%='Ez; J'>>='Ez; J'<<='Ez; J'&='Ez; J'^='Ez; J'|='Ez;>)> [or] ;) p [boperator] ( [or] Z<('*'Ez; J'/'Ez; J'%'Ez; J'+'Ez; J'-'Ez; J'>>'Ez; J'<<'Ez; J'<='Ez; J'>='Ez; J'<'Ez; J'>'Ez; J'=='Ez; J'!='Ez; J'&&'Ez; J'^'Ez; J'||'Ez; J'&'Ez; J'|'Ez;>)> [or] ;) q [uoperator] ( [or] Z<('*'Ez; J'&'Ez; J'-'Ez; J'!'Ez; J'~'Ez; J'sizeof'Ez; J'(typename)'Ez;>)> [or] ;) r [lvalue] ( [or] Z<( [and] Z<(@P jJ><(('['(Fz;Zz<)Z<@E']'Ez(A)>;J>);A:)(A);>)> [and] ; J [and] Z<(@P jJ><(('-'(Fz;Zz<)Z<'>'Ez@I(A)>;J>);A:)(A);>)> [and] ; J [and] Z<(@P jJ><(('.'(Fz;Zz<)Z<@I(A)>;J>);A:)(A);>)> [and] ; J@I; J'*'Ez@E; J'('Ez@L')'Ez;>)> [or] ;) L [pexten] ( [or] Z<('['Ez@E']'Ez; J'('Ez([ITR] Z<@E>:J>;)[ITR] ')'Ez; J'->'Ez@I; J'.'Ez@I;>)> [or] ;) N [primary] ( [or] Z<(@I; J@o; J'('Ez@E')'Ez;>)> [or] ([ITR] Z<@N>:J>;)[ITR] ;) P [eroot] ( [or] Z<(@r@A; J'++'Ez@L; J'--'Ez@L; J@L'++'Ez; J@L'--'Ez; J@P;>)> [or] ;) A [bexpr] (@A [or] Z<(@q@B; J;>)> [or] ;) B [cexpr] (@B [or] Z<('?'Ez@K':'Ez@K; J;>)> [or] ;) K [aexpr] ( [or] Z<(@L@p@D; J@K;>)> [or] ;) D [expression](@D [or] Z<(','Ez@E; J;>)> [or] ;) E ( [or] Z<(@E; J;>)> [or] ;) F (0@( {(0@: ;); ( @;(J';'EzJZD'done'I;); @;(J0@]JZDz'C'@%Z>z<'R'@%Z>;): ;)} 0@) nn$S;)} ~ ('i'@%'D'@%'R'@%@~JZqt'c'@%;) } [end]