43
D(NAME)
D(ICONST)
D(CONST)
D(DUMMYSTART)
D(N)
D(S)
D(TEXT)
D(BIGHOLE)
D(N255)
D(HOLE)
D(MARK)
D(READLINE?)
D(TEXTTEXT)
D(DUMMYAPP)
D(DOWN)
D(UP)
D(LISTON)
D(LISTOFF)
D(COLON)
D(NOTECONST)
D(TRACE)
D(SETNEM)
D(UCNOPS)
D(UCUB)
D(UCSB)
D(OP)
D(CHUI)
D(+')
D(NOTECYCLE)
D(,')
D(CHTYPE)
D(COMP1)
D(ASSOP)
D(NOTESTART)
D(NOTEFINISH)
D(NOTEREPEAT)
D(COMP2)
D(INCLUDE)
D(UCW)
D(UCUBUB)
D(UCUBW)
D(UCJUMP)
D(UCWRONG)
D(OPERAND)
D(COPERAND)
D(APP)
D(%IU)
D(%WU)
D(BTYPE)
D(FULLTYPE)
D(TYPE)
D(NLIST')
D(ALIAS')
D(ADECLN)
D(RESTOFARLIST)
D(RESTOFFPLIST)
D(RESTOFUI)
D(%SPEC')
D(VSPEC')
D(RESTOFELIST)
D(RESTOFSWLIST)
D(RESTOFBPLIST)
D(RESTOFEXPR)
D(RESTOFCEXPR)
D(RESTOFCOND)
D(RESTOFANDC)
D(RESTOFORC)
D(RESTOFSC)
D(RT)
D(FM)
D(DECLN)
D(%FORMAT')
D(AUI)
D(RESTOFIU)
D(OPEXPR)
D(ENDLIST)
D(%EVENT')
D(%NAME')
D(%QNAME')
D(FPP)
D(FPDEL)
D(SC)
D(RESTOFSS1)
D(RESTOFREPEAT)
D(ELSE')
D(UCI)
D(RESTOFUCI)
D(AT')
D(OPTINC)
D(ENAME')
D(BPAIR)
D(CONST')
D(%SEX)
D(RESTOFRFDEC)
D(ALTRFDEC)
D(RFDEC)
D(RFELMNT)
D(RFSTMNT)
D(RFREF)
D(CYCPARM)
D(CONSTLIST)
D(ROCL)
D(REPFACT)
D(RESTOFAPP)
D(EXPR)
D(CEXPR)
D(STAROREXPR)
D(XOWN)
D(OWNDEC)
D(RESTOFOWNDEC)
D(UI)
D(SS)

P(OPERAND) = 
           (NAME) (APP) (ENAME') ,
           (CONST) ,
           '(' (EXPR) ')' ;
   
P(COPERAND) = 
           (NAME) (DUMMYAPP) ,
           (CONST) ,
           '(' (CEXPR) ')' ;
   
P(CEXPR) = 
           (HOLE) (+') (COPERAND) (MARK) (RESTOFCEXPR) ;
   

P(STAROREXPR) = 
           (HOLE) (+') (COPERAND) (MARK) (RESTOFCEXPR) ,
           '*' ;
   
P(EXPR) = 
           (HOLE) (+') (OPERAND) (MARK) (RESTOFEXPR) ;
   
P(RESTOFEXPR) = 
           (OP) (OPERAND) *,
           0;
   
P(RESTOFCEXPR) = 
           (OP) (COPERAND) *,
           0;
   
P(APP) = 
           '(' (EXPR) (RESTOFAPP) ')' ,
           0;
   
P(RESTOFAPP) = 
           ',' (EXPR) *,
           0;
   
P(%IU) = 
           '%IF' ,
           '%UNLESS' ;
   
P(%WU) = 
           '%WHILE' (HOLE) (SC) (RESTOFCOND) (MARK) ,
           '%UNTIL' (HOLE) (SC) (RESTOFCOND) (MARK) ,
           '%FOR' (HOLE) (NAME) '=' (EXPR) ',' (EXPR) ',' (EXPR) (MARK) ;
   
P(ALIAS') = 
           '%ALIAS' (TEXTTEXT) ,
           0;
   
P(NLIST') = 
           ',' (NAME) *,
           0;

P(FULLTYPE) = 
           '%INTEGER' ,
           0;
   
P(BTYPE) = 
           '%INTEGER' ,
           '%REAL' ,
           '%LONG' '%REAL' ;
   
P(TYPE) = 
           '%INTEGER' ,
           '%REAL' ,
           '%LONG' (BTYPE) ,
           '%BYTE' (FULLTYPE) ,
           '%STRING' (REPFACT) ,
           '%HALF' (FULLTYPE) ,
           '%SHORT' (FULLTYPE) ,
           '%RECORD' '(' (RFREF) ')' ;
   
P(RT) = 
           '%ROUTINE' ,
           (CHTYPE) (TYPE) (FM) ;
   
P(FM) = 
           '%FN' ,
           '%MAP' ,
           '%FUNCTION' ;
   
P(FPDEL) = 
           (TYPE) (%QNAME') (NAME) (NLIST') ,
           (RT) (%NAME') (NAME) (NLIST') (FPP) ,
           '%NAME' (NAME) (NLIST') ;
   
P(%NAME') = 
           '%NAME' ,
           0;
   
P(%QNAME') = 
           '%ARRAYNAME' ,
           '%NAME' ,
           0;
   
P(FPP) = 
           '(' (HOLE) (FPDEL) (MARK) (RESTOFFPLIST) ')' ,
           0;
   
P(RESTOFFPLIST) = 
           (,') (HOLE) (FPDEL) (MARK) *,
           0;
   
P(ENDLIST) = 
           '%OFPROGRAM' (UP) ,
           '%OFFILE' ,
           '%OFLIST' (LISTOFF) ,
           (UP) ;
   
P(%FORMAT') = 
           '%FORMAT' ,
           0;
   
P(SC) = 
           (EXPR) (COMP1) (EXPR) (RESTOFSC) ,
           '(' (SC) (RESTOFCOND) ')' ,
           '%NOT' (SC) ,
           (EXPR) ;
   
P(RESTOFSC) = 
           (COMP2) (EXPR) ,
           0;
   
P(RESTOFCOND) = 
           '%AND' (SC) (RESTOFANDC) ,
           '%OR' (SC) (RESTOFORC) ,
           0;
   
P(RESTOFANDC) = 
           '%AND' (SC) *,
           0;
   
P(RESTOFORC) = 
           '%OR' (SC) *,
           0;
   
P(RESTOFUI) = 
           (ASSOP) (EXPR) ,
           ':' ,
           0;
   
P(%SPEC') = 
           '%SPEC' (HOLE) ,
           (DOWN) (HOLE) ;
   
P(VSPEC') = 
           '%SPEC' ,
           ;
   
P(RESTOFBPLIST) = 
           ',' (EXPR) ':' (EXPR) (RESTOFBPLIST) ,
           0;
   
P(DECLN) = 
           (%QNAME') (NAME) (NLIST') ,
           '%ARRAY' (%FORMAT') (ADECLN) ;
   
P(ADECLN) = 
           (NAME) (NLIST') (BPAIR) (RESTOFARLIST) ;
   
P(RESTOFARLIST) = 
           ',' (ADECLN) ,
           0;
   
P(OWNDEC) = 
           (%QNAME') (VSPEC') (HOLE) (NAME) (ALIAS') (CONST') (MARK) (RESTOFOWNDEC) (S) ,
           '%ARRAY' (%FORMAT') (VSPEC') (NAME) (ALIAS') (BPAIR) (CONSTLIST) ;
   
P(RESTOFOWNDEC) = 
           ',' (HOLE) (NAME) (ALIAS') (CONST') (MARK) (RESTOFOWNDEC) ,
           0;
   
P(XOWN) = 
           '%OWN' ,
           '%EXTERNAL' ,
           '%EXTRINSIC' ,
           '%CONSTANT' ,
           '%CONST' ;
   
P(CONSTLIST) = 
           '=' (READLINE?) (+') (OPERAND) (RESTOFEXPR) (REPFACT) (ROCL) ,
           0;
   
P(ROCL) = 
           ',' (READLINE?) (+') (OPERAND) (RESTOFEXPR) (REPFACT) *,
           0;
   
P(REPFACT) = 
           '(' (STAROREXPR) ')' ,
           0;
   
P(RESTOFELIST) = 
           ',' (CEXPR) *,
           0;
   
P(%EVENT') = 
           '%EVENT' ,
           0;
   
P(OPEXPR) = 
           ',' (EXPR) ,
           0;
   
P(RESTOFSWLIST) = 
           ',' (NAME) (NLIST') '(' (EXPR) ':' (EXPR) ')' *,
           0;
   
P(RESTOFREPEAT) = 
           '%UNTIL' (SC) (RESTOFCOND) ,
           0;
   
P(RESTOFSS1) = 
           (COLON) ,
           (S) ,
           (%IU) (SC) (RESTOFCOND) (S) ,
           (%WU) (S) ;
   
P(RESTOFIU) = 
           '%START' (NOTESTART) ,
           '%THENSTART' (NOTESTART) ,
           '%THEN' (HOLE) (UI) (MARK) (ELSE') ;
   
P(AUI) = 
           '%AND' (UI) ,
           0;
   
P(ELSE') = 
           '%ELSESTART' (NOTESTART) ,
           '%ELSE' (%IU) (HOLE) (SC) (RESTOFCOND) (MARK) (RESTOFIU) ,
           '%ELSE' (UI) ,
           0;
   
P(ENAME') = 
           '_' (NAME) (APP) (ENAME') ,
           0;
   
P(BPAIR) = 
           '(' (EXPR) ':' (EXPR) (RESTOFBPLIST) ')' ;
   
P(CONST') = 
           '=' (+') (OPERAND) (RESTOFEXPR) ,
           0;
   
P(%SEX) = 
           '%SYSTEM' ,
           '%EXTERNAL' ,
           '%DYNAMIC' ,
           0;
   
P(CYCPARM) = 
           (NAME) '=' (EXPR) ',' (EXPR) ',' (EXPR) ,
           0;
   
P(RESTOFRFDEC) = 
           ',' (RFDEC) *,
           0;

P(RFSTMNT) = 
           '%SPEC' (NAME) ,
           (NAME) '(' (RFDEC) (RESTOFRFDEC) (ALTRFDEC) ')' ;
   
P(RFREF) = 
           (NAME) ,
           (RFDEC) (RESTOFRFDEC) (ALTRFDEC) ;
   
P(RFDEC) = 
           (TYPE) (RFELMNT) ,
           '(' (RFDEC) (RESTOFRFDEC) (ALTRFDEC) ')' ;
   
P(RFELMNT) = 
           (%QNAME') (NAME) (NLIST') ,
           '%ARRAY' (ADECLN) ;
   
P(ALTRFDEC) = 
           '%OR' (RFDEC) (RESTOFRFDEC) *,
           0;
   
P(UCI) = 
           '*' (AT') (NAME) (OPTINC) (S) ,
           'PUT_' (ICONST) (S) ,
           (SETNEM) (RESTOFUCI) (S) ,
           'CNOP_' (N255) ',' (N255) (S) ,
           (UCWRONG) ;
   
P(OPTINC) = 
           '+' (N) ,
           '-' (N) ,
           0;
   
P(AT') = 
           '@' ,
           '=' ,
           0;
   
P(RESTOFUCI) = 
           (UCNOPS) ,
           (UCUB) (CEXPR) ,
           (UCSB) (CEXPR) ,
           (UCW) (CEXPR) ,
           (UCUBUB) (CEXPR) ',' (CEXPR) ,
           (UCUBW) (CEXPR) ',' (CEXPR) ;
   
P(UI) = 
           (HOLE) (NAME) (APP) (ENAME') (MARK) (RESTOFUI) (AUI) ,
           '->' (NAME) (APP) ,
           '%RETURN' ,
           '%RESULT' (ASSOP) (EXPR) ,
           '%MONITOR' (AUI) ,
           '%STOP' ,
           '%SIGNAL' (%EVENT') (CEXPR) (OPEXPR) ,
           '%EXIT' ,
           '%CONTINUE' ;
   
P(SS) = 
           (CHUI) (HOLE) (UI) (MARK) (RESTOFSS1) ,
           (TEXT) ,
           (%IU) (HOLE) (SC) (RESTOFCOND) (MARK) (RESTOFIU) (S) ,
           '%FINISH' (NOTEFINISH) (ELSE') (S) ,
           '%CYCLE' (NOTECYCLE) (CYCPARM) (S) ,
           '%REPEAT' (NOTEREPEAT) (RESTOFREPEAT) (S) ,
           (%WU) '%CYCLE' (NOTECYCLE) (S) ,
           (CHTYPE) (HOLE) (TYPE) (MARK) (DECLN) (S) ,
           '%END' (ENDLIST) (S) ,
           '%RECORD' '%FORMAT' (RFSTMNT) (S) ,
           (HOLE) (%SEX) (RT) (MARK) (%SPEC') (NAME) (ALIAS') (FPP) (S) ,
           (XOWN) (TYPE) (OWNDEC) ,
           '%INCLUDE' (CONST) (INCLUDE) ,
           '%BEGIN' (DOWN) (HOLE) (S) ,
           '%ON' (TRACE) (%EVENT') (CEXPR) (RESTOFELIST) '%START' (NOTESTART) (S) ,
           '%SWITCH' (NAME) (NLIST') '(' (EXPR) ':' (EXPR) ')' (RESTOFSWLIST) (S) ,
           '%LIST' (S) (LISTON) ,
           '%ELSE' (NOTEFINISH) (DUMMYSTART) (NOTESTART) (S) ,
           '*' (UCI) ,
           '%TRUSTEDPROGRAM' (S) ,
           '%MAINEP' (NAME) (S) ,
           '%CONTROL' (CONST) (S) ,
           (NAME) '(*):' ,
           (S) ;
   
E
