-- file PPPass1T.Mesa rewritten by PGS, 4-Feb-81 15:37 -- file PPPass1T.Mesa -- syntax last modified by Satterthwaite, February 4, 1981 3:23 PM -- rules last modified by Satterthwaite, February 4, 1981 3:23 PM -- last edit by Russ Atkinson, 9-Jul-81 14:33:14 BEGIN -- parse tree building -- local data base (supplied by parser) -- initialization/termination -- error recovery (only) -- stack manipulation -- note that r and s may be overlaid in some parameterizations -- value manipulation -- shared processing routines -- the interpretation rules -- propagated attributes -- basic tree building 0 => -- TABLE: MesaTab TYPE: ParseTable EXPORTS: CBinary -- GOAL: goal --TERMINALS: -- id num lnum flnum string lstring char atom -- , ; : .. => ← -- = # < > <= >= ~ -- + - * / ↑ . @ ! '| -- RECORD POINTER REF LIST ARRAY SEQUENCE DESCRIPTOR -- PROCEDURE PROC PORT SIGNAL ERROR PROCESS -- PROGRAM MONITOR ZONE RELATIVE LONG -- TYPE FRAME TO ORDERED UNCOUNTED -- BASE OF PACKED RETURNS MONITORED -- OVERLAID COMPUTED MACHINE DEPENDENT DIRECTORY -- DEFINITIONS IMPORTS EXPORTS SHARES RESIDENT -- LOCKS USING PUBLIC PRIVATE READONLY -- ENTRY INTERNAL INLINE CODE -- ABS ALL AND CONS MAX MIN MOD -- NOT OR PRED LENGTH NEW START SUCC -- FORK JOIN LOOPHOLE NARROW ISTYPE SIZE -- FIRST LAST NIL NULL IF THEN ELSE -- WITH FROM FOR DECREASING IN -- THROUGH UNTIL WHILE REPEAT FINISHED -- RETURN EXIT LOOP GOTO GO -- FREE WAIT RESTART NOTIFY BROADCAST STOP -- RESUME REJECT CONTINUE RETRY TRANSFER STATE -- OPEN ENABLE ANY EXITS ) -- ) ] } END ENDLOOP ENDCASE -- ( [ { BEGIN DO SELECT --ALIASES: -- id tokenID -- num tokenNUM -- lnum tokenLNUM -- flnum tokenFLNUM -- string tokenSTR -- lstring tokenLSTR -- char tokenCHAR -- atom tokenATOM -- - tokenMINUS -- . tokenDOT -- .. tokenDOTS -- = tokenEQUAL -- => tokenARROW -- < tokenLESS -- <= tokenLE -- > tokenGREATER -- >= tokenGE -- . InitialSymbol --PRODUCTIONS: -- goal ::= . unit . -- goal ::= . unit .. 1 => -- unit ::= directory module 2 => -- directory ::= DIRECTORY includelist ; 3 => -- includeitem ::= id : FROM string using 4 => -- includeitem ::= id : TYPE using -- includeitem ::= id using 5 => -- includeitem ::= id : TYPE id using 6 => -- using ::= USING [ ] 7 => -- module ::= identlist classhead block -- module ::= identlist defhead defbody 8 => -- classhead ::= resident class arguments locks interface = public 9 => -- resident ::= RESIDENT 10 => -- resident ::= 11 => -- class ::= PROGRAM 12 => -- class ::= MONITOR 13 => -- defhead ::= definitions locks imports shares = public 14 => -- definitions ::= DEFINITIONS 15 => -- defbody ::= BEGIN open declist END -- defbody ::= { open declist } 16 => -- locks ::= LOCKS primary lambda 17 => -- lambda ::= USING ident typeexp 18 => -- moduleitem ::= id 19 => -- moduleitem ::= id : id 20 => -- declaration ::= identlist public readonly entry typeexp initialization 21 => -- declaration ::= identlist public TYPE = public typeexp default 22 => -- declaration ::= identlist public TYPE optargs 23 => -- public ::= PUBLIC 24 => -- public ::= PRIVATE -- procaccess ::= 25 => -- public ::= 26 => -- entry ::= ENTRY 27 => -- entry ::= INTERNAL 28 => -- entry ::= 29 => -- idlist' ::= id -- identlist' ::= id : 30 => -- identlist' ::= id position : 31 => -- idlist' ::= id , idlist' -- identlist' ::= id , identlist' 32 => -- identlist' ::= id position , identlist' 33 => -- position ::= ( exp optbits ) 34 => -- optbits ::= : bounds -- interval ::= [ bounds ] 35 => -- interval ::= [ bounds ) 36 => -- interval ::= ( bounds ] 37 => -- interval ::= ( bounds ) 38 => -- typeexp ::= id -- range ::= id 39 => -- typeid ::= id . id 40 => -- typeid ::= id id 41 => -- typeid ::= id typeid 42 => -- typecons ::= interval 43 => -- typecons ::= id interval -- range ::= id interval 44 => -- typecons ::= typeid interval -- range ::= typeid interval 45 => -- typecons ::= id length 46 => -- typecons ::= typeid length 47 => -- typecons ::= dependent { elementlist } 48 => -- ident ::= id position : -- element ::= id ( exp ) 49 => -- element ::= ( exp ) 50 => -- typecons ::= dependent monitored RECORD reclist 51 => -- typecons ::= ordered base pointertype 52 => -- typecons ::= REF readonly typeexp 53 => -- typecons ::= REF readonly ANY 54 => -- typecons ::= REF 55 => -- typecons ::= LIST OF readonly typeexp 56 => -- typecons ::= packed ARRAY indextype OF typeexp 57 => -- typecons ::= DESCRIPTOR FOR readonly typeexp 58 => -- typecons ::= transfermode arguments 59 => -- typecons ::= id RELATIVE typeexp 60 => -- typecons ::= typeid RELATIVE typeexp 61 => -- typecons ::= heap ZONE 62 => -- typecons ::= LONG typeexp 63 => -- typecons ::= FRAME [ id ] 64 => -- monitored ::= MONITORED 65 => -- dependent ::= MACHINE DEPENDENT 66 => -- dependent ::= 67 => -- reclist ::= [ ] -- reclist ::= NULL 68 => -- reclist ::= [ pairlist ] -- reclist ::= [ typelist ] 69 => -- reclist ::= [ pairlist , variantpair ] 70 => -- reclist ::= [ variantpart default ] 71 => -- pairitem ::= identlist public typeexp default -- variantpair ::= identlist public variantpart default 72 => -- defaultopt ::= 73 => -- defaultopt ::= NULL 74 => -- defaultopt ::= exp '| NULL 75 => -- variantpart ::= SELECT vcasehead FROM variantlist ENDCASE -- variantpart ::= SELECT vcasehead FROM variantlist , ENDCASE 76 => -- variantpart ::= packed SEQUENCE vcasehead OF typeexp 77 => -- vcasehead ::= ident public tagtype 78 => -- vcasehead ::= COMPUTED tagtype 79 => -- vcasehead ::= OVERLAID tagtype 80 => -- tagtype ::= * 81 => -- variantitem ::= idlist => reclist 82 => -- typelist ::= typecons default -- typelist ::= typeid default 83 => -- typelist ::= id 84 => -- typelist ::= id ← defaultopt 85 => -- typelist ::= typecons default , typelist -- typelist ::= typeid default , typelist 86 => -- typelist ::= id , typelist 87 => -- typelist ::= id ← defaultopt , typelist 88 => -- pointertype ::= pointerprefix 89 => -- pointertype ::= pointerprefix TO readonly typeexp 90 => -- transfermode ::= PROCEDURE -- transfermode ::= PROC 91 => -- transfermode ::= PORT 92 => -- transfermode ::= SIGNAL 93 => -- transfermode ::= ERROR 94 => -- transfermode ::= PROCESS 95 => -- transfermode ::= PROGRAM 96 => -- initialization ::= 97 => -- initvalue ::= procaccess inline block 98 => -- initvalue ::= CODE 99 => -- initvalue ::= MACHINE CODE BEGIN codelist END -- initvalue ::= MACHINE CODE { codelist } 100 => -- codelist ::= orderlist 101 => -- codelist ::= codelist ; orderlist 102 => -- statement ::= lhs 103 => -- statement ::= lhs ← exp 104 => -- statement ::= [ explist ] ← exp 105 => -- statement ::= block 106 => -- statement ::= IF exp THEN statement elsepart 107 => -- statement ::= casehead casestmtlist ENDCASE otherpart 108 => -- statement ::= forclause dotest DO scope doexit ENDLOOP 109 => -- statement ::= EXIT 110 => -- statement ::= LOOP 111 => -- statement ::= GOTO id 112 => -- statement ::= GO TO id 113 => -- statement ::= RETURN optargs 114 => -- statement ::= transfer lhs 115 => -- statement ::= free [ exp optcatch ] 116 => -- statement ::= WAIT lhs 117 => -- statement ::= ERROR 118 => -- statement ::= STOP 119 => -- statement ::= NULL 120 => -- statement ::= RESUME optargs 121 => -- statement ::= REJECT 122 => -- statement ::= CONTINUE 123 => -- statement ::= RETRY 124 => -- statement ::= lhs ← STATE 125 => -- block ::= BEGIN scope exits END -- block ::= { scope exits } 126 => -- scope ::= open enables declist statementlist 127 => -- binditem ::= exp 128 => -- binditem ::= id : exp 129 => -- exits ::= EXITS exitlist 130 => -- casestmtitem ::= caselabel => statement -- caseexpitem ::= caselabel => exp -- exititem ::= idlist => statement 131 => -- casetest ::= optrelation 132 => -- casetest ::= exp 133 => -- caselabel ::= ident typeexp -- controlid ::= ident typeexp 134 => -- forclause ::= FOR controlid ← exp , exp 135 => -- forclause ::= FOR controlid direction IN range 136 => -- forclause ::= THROUGH range 137 => -- direction ::= DECREASING 138 => -- direction ::= 139 => -- dotest ::= UNTIL exp 140 => -- doexit ::= 141 => -- doexit ::= REPEAT exitlist 142 => -- doexit ::= REPEAT exitlist FINISHED => statement -- doexit ::= REPEAT exitlist FINISHED => statement ; 143 => -- enables ::= ENABLE catchcase ; 144 => -- enables ::= ENABLE catchany ; 145 => -- enables ::= ENABLE BEGIN catchlist END ; -- enables ::= ENABLE { catchlist } ; 146 => -- catchlist ::= catchhead 147 => -- catchlist ::= catchhead catchcase 148 => -- catchcase ::= lhslist => statement 149 => -- optargs ::= [ explist ] 150 => -- transfer ::= SIGNAL 151 => -- transfer ::= ERROR 152 => -- transfer ::= RETURN WITH ERROR 153 => -- transfer ::= START 154 => -- transfer ::= RESTART 155 => -- transfer ::= JOIN 156 => -- transfer ::= NOTIFY 157 => -- transfer ::= BROADCAST 158 => -- transfer ::= TRANSFER WITH 159 => -- transfer ::= RETURN WITH -- expression processing 160 => -- keyitem ::= id : optexp 161 => -- optexp ::= NULL -- initvalue ::= NULL 162 => -- exp ::= transferop lhs 163 => -- exp ::= IF exp THEN exp ELSE exp 164 => -- exp ::= casehead caseexplist ENDCASE => exp 165 => -- exp ::= lhs ← exp 166 => -- exp ::= [ explist ] ← exp 167 => -- exp ::= ERROR 168 => -- disjunct ::= disjunct OR conjunct 169 => -- conjunct ::= conjunct AND negation 170 => -- negation ::= not relation 171 => -- relation ::= sum optrelation -- sum ::= sum addop product -- product ::= product multop factor 172 => -- optrelation ::= not relationtail 173 => -- relationtail ::= IN range 174 => -- relop ::= = 175 => -- relop ::= # 176 => -- relop ::= < 177 => -- relop ::= <= 178 => -- relop ::= > 179 => -- relop ::= >= 180 => -- addop ::= + 181 => -- addop ::= - 182 => -- multop ::= * 183 => -- multop ::= / 184 => -- multop ::= MOD 185 => -- factor ::= - primary 186 => -- primary ::= num 187 => -- primary ::= lnum 188 => -- primary ::= flnum 189 => -- primary ::= char 190 => -- primary ::= string 191 => -- primary ::= lstring 192 => -- primary ::= atom 193 => -- primary ::= NIL 194 => -- primary ::= [ explist ] 195 => -- primary ::= prefixop [ orderlist ] 196 => -- primary ::= new [ typeexp initialization optcatch ] 197 => -- primary ::= cons [ explist optcatch ] 198 => -- primary ::= listcons [ explist ] 199 => -- primary ::= typeop [ typeexp ] 200 => -- primary ::= SIZE [ typeexp ] 201 => -- primary ::= SIZE [ typeexp , exp ] 202 => -- primary ::= ISTYPE [ exp , typeexp optcatch ] 203 => -- primary ::= @ lhs 204 => -- primary ::= DESCRIPTOR [ desclist ] 205 => -- lhs ::= id -- element ::= id -- ident ::= id : -- controlid ::= id 206 => -- lhs ::= NARROW [ exp opttype optcatch ] 207 => -- lhs ::= LOOPHOLE [ exp opttype ] 208 => -- qualifier ::= [ explist optcatch ] 209 => -- qualifier ::= . id 210 => -- qualifier ::= ↑ 211 => -- optcatch ::= ! catchlist 212 => -- transferop ::= SIGNAL 213 => -- transferop ::= ERROR 214 => -- transferop ::= START 215 => -- transferop ::= JOIN 216 => -- transferop ::= NEW 217 => -- transferop ::= FORK 218 => -- prefixop ::= LONG 219 => -- prefixop ::= ABS 220 => -- prefixop ::= PRED 221 => -- prefixop ::= SUCC 222 => -- prefixop ::= MIN 223 => -- prefixop ::= MAX 224 => -- prefixop ::= BASE 225 => -- prefixop ::= LENGTH 226 => -- prefixop ::= ALL 227 => -- typeop ::= CODE 228 => -- typeop ::= FIRST 229 => -- typeop ::= LAST 230 => -- typeop ::= NIL 231 => -- desclist ::= exp , exp opttype 232 => -- directory ::= DIRECTORY ; -- fieldlist ::= [ ] -- new ::= NEW -- free ::= FREE -- cons ::= CONS -- listcons ::= LIST -- pointerprefix ::= POINTER 233 => -- declist ::= -- statementlist ::= -- casestmtlist ::= -- exitlist ::= -- catchhead ::= -- caseexplist ::= 234 => -- includelist ::= includeitem -- modulelist ::= moduleitem -- pairlist ::= pairitem -- elementlist ::= element -- variantlist ::= variantitem -- bindlist ::= binditem -- statementlist' ::= statement -- casestmtlist' ::= casestmtitem -- caselabel' ::= casetest -- exitlist' ::= exititem -- lhslist ::= lhs -- orderlist ::= optexp -- keylist ::= keyitem -- caseexplist' ::= caseexpitem 235 => -- includelist ::= includelist , includeitem -- modulelist ::= modulelist , moduleitem -- declist ::= declist declaration ; -- pairlist ::= pairlist , pairitem -- elementlist ::= elementlist , element -- variantlist ::= variantlist , variantitem -- bindlist ::= bindlist , binditem -- statementlist' ::= statementlist' ; statement -- casestmtlist' ::= casestmtlist' ; casestmtitem -- caselabel' ::= caselabel' , casetest -- exitlist' ::= exitlist' ; exititem -- catchhead ::= catchhead catchcase ; -- lhslist ::= lhslist , lhs -- orderlist ::= orderlist , optexp -- keylist ::= keylist , keyitem -- caseexplist' ::= caseexplist' , caseexpitem 236 => -- idlist ::= idlist' -- identlist ::= identlist' -- explist ::= orderlist -- explist ::= keylist -- caselabel ::= caselabel' 237 => -- imports ::= IMPORTS modulelist -- exports ::= EXPORTS modulelist -- open ::= OPEN bindlist ; -- fieldlist ::= [ pairlist ] -- fieldlist ::= [ typelist ] 238 => -- initialization ::= ← initvalue -- casehead ::= SELECT exp FROM 239 => -- readonly ::= READONLY -- reclist ::= [ variantpair ] -- ordered ::= ORDERED -- base ::= BASE -- heap ::= UNCOUNTED -- packed ::= PACKED -- initialization ::= = initvalue -- inline ::= INLINE -- casehead ::= WITH binditem SELECT optexp FROM 240 => -- packed ::= -- readonly ::= -- monitored ::= -- ordered ::= -- base ::= -- heap ::= -- inline ::= -- enables ::= -- exits ::= -- optcatch ::= 241 => -- using ::= USING [ idlist ] -- interface ::= imports exports shares -- shares ::= SHARES idlist -- typeexp ::= typeid -- typeexp ::= typecons -- length ::= [ exp ] -- default ::= ← defaultopt -- defaultopt ::= exp -- tagtype ::= typeexp -- pointerprefix ::= POINTER interval -- indextype ::= typeexp -- arguments ::= arglist returnlist -- arglist ::= fieldlist -- returnlist ::= RETURNS fieldlist -- initvalue ::= exp -- elsepart ::= ELSE statement -- otherpart ::= => statement -- dotest ::= WHILE exp -- catchany ::= ANY => statement -- catchlist ::= catchhead catchany -- catchlist ::= catchhead catchany ; -- statementlist ::= statementlist' -- statementlist ::= statementlist' ; -- casestmtlist ::= casestmtlist' -- casestmtlist ::= casestmtlist' ; -- exitlist ::= exitlist' -- exitlist ::= exitlist' ; -- caseexplist ::= caseexplist' -- caseexplist ::= caseexplist' , -- optexp ::= exp -- exp ::= disjunct -- disjunct ::=C conjunct -- conjunct ::=C negation -- negation ::=C relation -- not ::= ~ -- not ::= NOT -- relation ::= sum -- optrelation ::= relationtail -- relationtail ::= relop sum -- range ::= interval -- range ::= typeid -- bounds ::= exp .. exp -- sum ::=C product -- product ::=C factor -- factor ::=C primary -- primary ::= lhs -- desclist ::= exp -- lhs ::= ( exp ) -- lhs ::= lhs qualifier -- new ::= lhs . NEW -- free ::= lhs . FREE -- cons ::= lhs . CONS -- listcons ::= lhs . LIST -- opttype ::= , typeexp 242 => -- directory ::= -- using ::= -- locks ::= -- lambda ::= -- imports ::= -- exports ::= -- shares ::= -- optbits ::= -- default ::= -- open ::= -- arglist ::= -- returnlist ::=