-- 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 ::=