43 D(NAME) D(ICONST) D(CONST) D(ONAME) D(COMTEXT)) D(S) D(ENDTEXT) D(TEXTTEXT) D(NAMELIST) D(HOLE) D(MARK) D(ONAMELIST) D(UPSTCNT) D(LETTERSTRING) D(DOWN) D(UP) D(SCALARTYPE) D(NOTENAME) D(TYPE=A) D(TYPE=B) D(ARRAYTYPE) D(PROCTYPE) D(LINKSCAL) D(LINKARR) D(CHKLPL) D(LABTYPE) D(SWTYPE) D(STRTYPE) D(CHKLAB) D(TYPE=ARR) D(LINKSW) D(LINKOWNS) D(LINKPROC) D(LINKLAB) D(NOMORE) D(CMPND) D(UPATSEP) D(PLUS') D(OP) D(CHECKSC) D(LHSQBR) D(RHSQBR) D(SWBYNAME) D(DECLIST) D(RESTOFDECLIST) D(OPERAND) D(EXPR) D(RESTOFEXPR) D(APP) D(RESTOFAPP) D(LABAPP) D(BCONST) D(BOP) D(BTERM) D(SBEXPR) D(RESTOFSBEXPR) D(BEXPR) D(BOPERAND) D(TYPE') D(VALUE') D(FP-DEL) D(FPP) D(RESTOFFP-LIST) D(FPSEP) D(OPTCOM) D(FPSPEC) D(PARCOM) D(COLON') D(COMVAL) D(COMFP) D(COMDEL) D(CNLIST) D(RESTOFCNLIST) D(SDE) D(DE) D(RESTOFDELIST) D(RTP) D(RESTOFRTPLIST) D(RESTOFASS) D(RESTOFBLP) D(RESTOFALP) D(RESTOFFLE) D(RESTOFFORLIST) D(RESTOFBP-LIST) D(PDECLN) D(VDECLN) D(COMDECLN) D(DECLN) D(ADECLN) D(RESTOFARRAYLIST) D(BPAIR) D(CBPAIR) D(RESTOFCBP) D(OADECLN) D(RESTOFOADEC) D(COMP) D(OLABEL) D(NSTMT) D(FORSTMNT) D(STMT) D(BLKORCS) D(FSTMT) D(USTMT) D(EPNAME) D(PROCSTMT) D(ELSE') D(ELSESTMNT) D(UI) D(SS) P(DECLIST) =(NAME)(NOTENAME)(RESTOFDECLIST); P(RESTOFDECLIST)=','(NAME)(NOTENAME)*,0; P(OPERAND) =(NAME)(APP),(CONST), '('(EXPR)')'; P(EXPR) ='%IF'(BEXPR)'%THEN'(HOLE)(PLUS')(OPERAND) (MARK)(RESTOFEXPR)'%ELSE'(EXPR), (HOLE)(PLUS')(OPERAND)(MARK)(RESTOFEXPR); P(RESTOFEXPR) =(OP)(OPERAND)*,0; P(APP) =(TYPE=ARR)(LHSQBR)(HOLE)(EXPR)(MARK)(RESTOFAPP)(RHSQBR), '('(HOLE)(RTP)(MARK)(RESTOFRTPLIST)')',0; P(RESTOFAPP) =','(HOLE)(EXPR)(MARK)*,0; P(LABAPP) =(LHSQBR)(HOLE)(EXPR)(MARK)(RESTOFAPP)(RHSQBR), '('(HOLE)(RTP)(MARK)(RESTOFRTPLIST)')',0; P(BCONST) ='%TRUE','%FALSE'; P(BOP) ='%AND','%OR','%IMPL','%EQUIV'; P(BTERM) = '%NOT'(BOPERAND),(BOPERAND); P(SBEXPR) =(BTERM)(RESTOFSBEXPR); P(RESTOFSBEXPR)=(BOP)(BTERM)*,0; P(BEXPR) = '%IF'(BEXPR)'%THEN'(SBEXPR)'%ELSE'(BEXPR),(SBEXPR); P(BOPERAND) =(EXPR)(COMP)(EXPR),(NAME)(APP),(BCONST), '('(BEXPR)')'; P(TYPE') ='%INTEGER','%REAL','%BOOLEAN',0; P(VALUE') =';'(OPTCOM)'%VALUE'(ONAMELIST)(UPSTCNT),0; P(FP-DEL) ='%LABEL'(LABTYPE)(DECLIST),'%SWITCH'(SWBYNAME)(DECLIST), '%STRING'(STRTYPE)(DECLIST), (TYPE')(PDECLN); P(PDECLN) ='%ARRAY'(ARRAYTYPE)(DECLIST), '%PROCEDURE'(PROCTYPE)(DECLIST)(PARCOM), (SCALARTYPE)(DECLIST); P(FPP) ='('(NAME)(RESTOFFP-LIST)')',0; P(RESTOFFP-LIST)=(FPSEP)(NAME)*,0; P(FPSEP) = ',',')'(LETTERSTRING)':('; P(OPTCOM) ='%COMMENT'(COMTEXT)(UPSTCNT)*,0; P(FPSPEC) =';'(OPTCOM)(FP-DEL)(UPSTCNT)*,0; P(PARCOM) =';' '%COMMENT'(HOLE) '('(NAME)(RESTOFFP-LIST)')' (COMVAL)(COMFP)(MARK)(UPSTCNT)(CHECKSC),0; P(COLON') =':',0; P(COMVAL) =(COLON')'%VALUE'(ONAMELIST),0; P(COMFP) =(COLON')(COMDEL)(COMFP),0; P(COMDEL) ='%LABEL'(CNLIST),'%SWITCH'(CNLIST), '%STRING'(CNLIST),(TYPE')(COMDECLN); P(COMDECLN) ='%ARRAY'(CNLIST), '%PROCEDURE'(CNLIST), (SCALARTYPE)(CNLIST); P(CNLIST) =(NAME)(RESTOFCNLIST); P(RESTOFCNLIST) =','(NAME)*,0; P(SDE) =(NAME)(LABAPP),'('(DE)')'; P(DE) ='%IF'(BEXPR)'%THEN'(SDE)'%ELSE'(DE),(SDE); P(RESTOFDELIST)=','(HOLE)(DE)(MARK)*,0; P(RTP) =(TEXTTEXT),(NAME)(APP)(NOMORE), (EXPR)(NOMORE),(BEXPR)(NOMORE),(DE)(NOMORE); P(RESTOFRTPLIST)=(FPSEP)(HOLE)(RTP)(MARK)*,0; P(RESTOFASS) =(TYPE=B)(APP)':='(RESTOFBLP)(BEXPR), (TYPE=A)(APP)':='(RESTOFALP)(EXPR); P(RESTOFBLP) =(CHKLPL)(ONAME)(TYPE=B)(APP)':='*,0; P(RESTOFALP) =(CHKLPL)(ONAME)(TYPE=A)(APP)':='*,0; P(RESTOFFLE) = '%STEP'(EXPR)'%UNTIL'(EXPR), '%WHILE'(BEXPR),0; P(RESTOFFORLIST)=','(EXPR)(RESTOFFLE)*,0; P(RESTOFBP-LIST)=','(EXPR)':'(EXPR)*,0; P(DECLN) =(SCALARTYPE)(DECLIST), '%ARRAY'(ARRAYTYPE)(OADECLN); P(ADECLN) =(DECLIST)(BPAIR)(RESTOFARRAYLIST); P(RESTOFARRAYLIST)=','(ADECLN),0; P(BPAIR) =(CBPAIR),(LHSQBR)(EXPR)':'(EXPR)(RESTOFBP-LIST)(RHSQBR); P(CBPAIR) =(LHSQBR)(PLUS')(ICONST)':' (PLUS')(ICONST)(RESTOFCBP)(RHSQBR); P(RESTOFCBP) =','(PLUS')(ICONST)':'(PLUS')(ICONST)(RESTOFCBP),0; P(OADECLN) =(DECLIST)(CBPAIR)(RESTOFOADEC); P(RESTOFOADEC) =','(OADECLN),0; P(VDECLN) ='%PROCEDURE'(PROCTYPE)(LINKPROC)(HOLE)(NAME) (NOTENAME)(FPP)(DOWN)(VALUE')(FPSPEC)';'(OPTCOM) (UPSTCNT)(MARK)(OLABEL)(PROCSTMT), '%ARRAY'(ARRAYTYPE)(LINKARR)(ADECLN), (SCALARTYPE)(LINKSCAL)(DECLIST); P(COMP) ='=','>=','>','#','<=','<','\=', '%EQ','%GE','%GT','%NE','%LE','%LT'; P(OLABEL) =(CHKLAB)(NAME)':'(LINKLAB)(OLABEL),0; P(NSTMT) =(UI), '%FOR'(FORSTMNT), '%IF'(BEXPR)'%THEN'(OLABEL)(USTMT),(CHECKSC); P(FORSTMNT) =(HOLE)(ONAME)(APP)':='(EXPR)(RESTOFFLE)(MARK) (RESTOFFORLIST)'%DO'(OLABEL)(FSTMT); P(STMT) =(UI), '%FOR'(FORSTMNT), '%IF'(BEXPR)'%THEN'(OLABEL)(USTMT),0; P(BLKORCS) =(OPTCOM)(OLABEL)(NSTMT)(CMPND),(DOWN); P(FSTMT) ='%BEGIN'(DOWN),(STMT); P(USTMT) ='%BEGIN'(BLKORCS),'%FOR'(FORSTMNT),(UI)(ELSE'),(ELSE'); P(EPNAME) =(NAME),0; P(PROCSTMT) ='%ALGOL'(EPNAME)(UP),'%EXTERNAL'(EPNAME)(UP), '%FORTRAN'(EPNAME)(UP),'%BEGIN',(UPATSEP)(STMT); P(ELSE') ='%ELSE'(OLABEL)(ELSESTMNT),0; P(ELSESTMNT) ='%BEGIN'(BLKORCS),(STMT); P(UI) =(CHKLPL)(ONAME)(RESTOFASS), (NAME)(APP), '%GOTO'(DE); P(SS) =(NSTMT)(S), '%END'(UP)(ENDTEXT)(ELSE')(S), '%COMMENT'(COMTEXT), (TYPE')(VDECLN)(S), '%BEGIN'(BLKORCS), '%SWITCH'(SWTYPE)(NAME)(NOTENAME)(LINKSW)':='(HOLE) (DE)(MARK)(RESTOFDELIST)(S), '%OWN'(LINKOWNS)(TYPE')(DECLN)(S), (CHKLAB)(NAME)':'(LINKLAB)(SS), ';', '%CODEON', '%CODEOFF', '%PROGRAM'(NAME)(S); E