-- grammar extracted from MPPass1T.mesa by NPGS, March 22, 1993 4:48:50 pm PST ||CHAIN ||LISTS ||TABLE1 1 id 2 num 3 lnum 4 flnum 5 string 6 lstring 7 char 8 atom 9 , 10 ; 11 : 12 .. 13 => 14 _ 15 = 16 # 17 < 18 > 19 <= 20 >= 21 ~ 22 ~~ 23 + 24 - 25 * 26 ** 27 / 28 ^ 29 . 30 @ 31 ! 32 '| 33 RECORD 34 POINTER 35 REF 36 VAR 37 LIST 38 ARRAY 39 SEQUENCE 40 DESCRIPTOR 41 PROCEDURE 42 PROC 43 PORT 44 SIGNAL 45 ERROR 46 PROCESS 47 PROGRAM 48 MONITOR 49 DEFINITIONS 50 ZONE 51 RELATIVE 52 LONG 53 TYPE 54 FRAME 55 TO 56 ORDERED 57 UNCOUNTED 58 PAINTED 59 BASE 60 OF 61 RETURNS 62 SAFE 63 UNSAFE 64 PACKED 65 MSBIT 66 LSBIT 67 NATIVE 68 WORD8 69 WORD16 70 WORD32 71 WORD64 72 MONITORED 73 OVERLAID 74 COMPUTED 75 MACHINE 76 DEPENDENT 77 DIRECTORY 78 IMPORTS 79 EXPORTS 80 SHARES 81 LOCKS 82 USING 83 PUBLIC 84 PRIVATE 85 CEDAR 86 CHECKED 87 TRUSTED 88 UNCHECKED 89 ENTRY 90 INTERNAL 91 INLINE 92 READONLY 93 CODE 94 ABS 95 ALL 96 AND 97 APPLY 98 CONS 99 MAX 100 MIN 101 MOD 102 NOT 103 OR 104 ORD 105 PRED 106 LENGTH 107 NEW 108 START 109 SUCC 110 VAL 111 FORK 112 JOIN 113 LOOPHOLE 114 NARROW 115 ISTYPE 116 BITS 117 BYTES 118 SIZE 119 UNITS 120 WORDS 121 FIRST 122 LAST 123 NIL 124 TRASH 125 NULL 126 IF 127 THEN 128 ELSE 129 WITH 130 FROM 131 FOR 132 DECREASING 133 IN 134 THROUGH 135 UNTIL 136 WHILE 137 REPEAT 138 FINISHED 139 RETURN 140 EXIT 141 LOOP 142 GOTO 143 GO 144 FREE 145 WAIT 146 RESTART 147 NOTIFY 148 BROADCAST 149 STOP 150 RESUME 151 REJECT 152 CONTINUE 153 RETRY 154 OPEN 155 ENABLE 156 ANY 157 EXITS 158 ) 159 ] 160 } 161 END 162 ENDLOOP 163 ENDCASE 164 ( 165 [ 166 { 167 BEGIN 168 DO 169 SELECT 170 eof ||TABLE2 171 goal 172 module 173 directory 174 identlist 175 cedar 176 proghead 177 trusted 178 checked 179 block 180 defhead 181 defbody 182 includeitem 183 using 184 resident 185 safe 186 class 187 arguments 188 locks 189 interface 190 bindop 191 public 192 definitions 193 imports 194 shares 195 open 196 declist 197 primary 198 lambda 199 ident 200 typeexp 201 moduleitem 202 declaration 203 entry 204 readonly 205 initialization 206 default 207 optsize 208 procaccess 209 idlist' 210 identlist' 211 position 212 exp 213 optbits 214 bounds 215 interval 216 range 217 typeid' 218 typeappl 219 typeid 220 length 221 typecons 222 dependent 223 elementlist 224 element 225 monitored 226 reclist 227 ordered 228 base 229 pointertype 230 variantpart 231 indextype 232 transfermode 233 arglist 234 returnlist 235 heap 236 pairlist 237 typelist 238 variantpair 239 vcasehead 240 variantlist 241 tagtype 242 pairitem 243 variantitem 244 idlist 245 defaultopt 246 pointerprefix 247 initvalue 248 inline 249 codelist 250 orderlist 251 statement 252 balstmt 253 casehead 254 casestmtlist 255 basicstmt 256 lhs 257 explist 258 forclause 259 dotest 260 scope 261 doexit 262 optargs 263 transfer 264 free 265 optcatch 266 exits 267 enables 268 statementlist 269 binditem 270 exitlist 271 casestmtitem 272 caselabel 273 caseexpitem 274 exititem 275 casetest 276 optrelation 277 controlid 278 direction 279 catchcase 280 catchany 281 catchlist 282 catchhead 283 lhslist 284 keyitem 285 optexp 286 trash 287 caseexplist 288 disjunct 289 conjunct 290 negation 291 relation 292 sum 293 addop 294 product 295 multop 296 factor 297 relationtail 298 relop 299 prefixop 300 new 301 cons 302 listcons 303 typeop 304 transferop 305 qualifier 306 desclist 307 opttype 308 exports 309 fieldlist 310 includelist 311 modulelist 312 elementlist' 313 bindlist 314 statementlist' 315 casestmtlist' 316 caselabel' 317 exitlist' 318 keylist 319 caseexplist' ||TABLE3 id tokenID num tokenNUM lnum tokenLNUM flnum tokenFLNUM string tokenSTR lstring tokenLSTR char tokenCHAR atom tokenATOM - tokenMINUS . tokenDOT .. tokenDOTS ** tokenPOWER = tokenEQUAL => tokenARROW < tokenLESS <= tokenLE > tokenGREATER >= tokenGE # tokenNE ~ tokenTILDE ~~ tokenBIND . initialSymbol ||TABLE4 1 0 goal ::= . module . 2 0 | . module .. 3 1 module ::= directory identlist cedar proghead trusted checked block 4 1 | directory identlist cedar defhead defbody 5 2 includeitem ::= id : FROM string using 6 3 | id : TYPE using 7 3 | id using 8 3 | id : TYPE id using 9 4 cedar ::= CEDAR 10 4 | 11 5 proghead ::= resident safe class arguments locks interface bindop public 12 6 resident ::= 13 7 defhead ::= definitions locks imports shares bindop public 14 8 definitions ::= DEFINITIONS 15 9 defbody ::= BEGIN open declist END 16 9 | BEGIN open declist ; END 17 9 | { open declist } 18 9 | { open declist ; } 19 10 locks ::= LOCKS primary lambda 20 237 | 21 11 lambda ::= USING ident typeexp 22 237 | 23 12 moduleitem ::= id 24 12 | id : id 25 13 declaration ::= identlist public entry readonly typeexp initialization 26 14 | identlist public TYPE bindop public typeexp default 27 15 | identlist public TYPE optsize 28 16 public ::= PUBLIC 29 17 | PRIVATE 30 18 | 31 17 procaccess ::= 32 19 entry ::= ENTRY 33 20 | INTERNAL 34 21 | 35 22 idlist' ::= id 36 22 | id , idlist' 37 22 identlist' ::= id : 38 22 | id , identlist' 39 23 | id position : 40 24 | id position , identlist' 41 25 position ::= ( exp optbits ) 42 26 optbits ::= : bounds 43 237 | 44 26 interval ::= [ bounds ] 45 27 | [ bounds ) 46 28 | ( bounds ] 47 29 | ( bounds ) 48 30 typeexp ::= id 49 237 | typeid 50 237 | typecons 51 30 range ::= id 52 36 | id interval 53 37 | typeid interval 54 237 | interval 55 237 | typeid 56 30 typeid' ::= id . id 57 31 | typeid' . id 58 31 typeappl ::= typeappl . id 59 34 | id length 60 35 | typeid length 61 35 | typeappl length 62 32 typeid ::= id id 63 33 | id typeid 64 237 | typeid' 65 36 typecons ::= interval 66 36 | id interval 67 37 | typeid interval 68 38 | dependent { elementlist } 69 41 | dependent monitored RECORD reclist 70 42 | ordered base pointertype 71 43 | VAR typeexp 72 44 | REF readonly typeexp 73 45 | REF readonly ANY 74 45 | REF 75 46 | LIST OF readonly typeexp 76 47 | PACKED typecons 77 48 | MSBIT typecons 78 49 | LSBIT typecons 79 50 | NATIVE typecons 80 51 | WORD8 typecons 81 52 | WORD16 typecons 82 53 | WORD8 83 54 | WORD16 84 55 | WORD32 85 56 | WORD64 86 57 | WORD32 typecons 87 58 | WORD64 typecons 88 59 | ARRAY indextype OF typeexp 89 60 | DESCRIPTOR FOR readonly typeexp 90 61 | safe transfermode arguments 91 64 | id RELATIVE typeexp 92 65 | typeid RELATIVE typeexp 93 66 | heap ZONE 94 67 | LONG typeexp 95 68 | FRAME [ id ] 96 69 | id PAINTED typeexp 97 70 | typeid PAINTED typeexp 98 237 | typeappl 99 39 ident ::= id position : 100 198 | id : 101 39 element ::= id ( exp ) 102 40 | ( exp ) 103 198 | id 104 47 variantpart ::= PACKED variantpart 105 76 | SELECT vcasehead FROM variantlist ENDCASE 106 76 | SELECT vcasehead FROM variantlist , ENDCASE 107 77 | SEQUENCE vcasehead OF typeexp 108 62 safe ::= 109 235 | UNSAFE 110 236 | SAFE 111 63 arglist ::= ANY 112 237 | fieldlist 113 237 | 114 63 returnlist ::= RETURNS ANY 115 237 | RETURNS fieldlist 116 237 | 117 71 monitored ::= MONITORED 118 236 | 119 72 dependent ::= 120 72 | MACHINE DEPENDENT 121 73 reclist ::= [ ] 122 73 | NULL 123 73 | [ pairlist ] 124 73 | [ typelist ] 125 74 | [ pairlist , variantpair ] 126 75 | [ variantpart default ] 127 236 | [ variantpair ] 128 78 variantpair ::= identlist public variantpart default 129 78 vcasehead ::= ident public tagtype 130 79 | COMPUTED tagtype 131 80 | OVERLAID tagtype 132 78 pairitem ::= identlist public typeexp default 133 81 tagtype ::= * 134 237 | typeexp 135 82 variantitem ::= idlist => reclist 136 83 typelist ::= id 137 83 | typecons default 138 83 | typeid default 139 83 | id _ defaultopt 140 84 | typecons default , typelist 141 84 | typeid default , typelist 142 85 | id , typelist 143 85 | id _ defaultopt , typelist 144 86 pointertype ::= pointerprefix 145 87 | pointerprefix TO readonly typeexp 146 88 transfermode ::= PROCEDURE 147 88 | PROC 148 89 | PORT 149 90 | SIGNAL 150 91 | ERROR 151 92 | PROCESS 152 93 | PROGRAM 153 94 initialization ::= 154 235 | _ initvalue 155 236 | bindop initvalue 156 95 initvalue ::= procaccess trusted checked inline entry block 157 96 | CODE 158 97 | procaccess trusted checked MACHINE CODE BEGIN codelist END 159 97 | procaccess trusted checked MACHINE CODE { codelist } 160 155 | trash 161 237 | exp 162 98 trusted ::= 163 99 codelist ::= orderlist 164 99 | codelist ; orderlist 165 100 statement ::= IF exp THEN statement 166 101 | IF exp THEN balstmt ELSE statement 167 102 | casehead casestmtlist ENDCASE => statement 168 237 | basicstmt 169 101 balstmt ::= IF exp THEN balstmt ELSE balstmt 170 102 | casehead casestmtlist ENDCASE => balstmt 171 237 | basicstmt 172 103 basicstmt ::= lhs 173 104 | lhs _ exp 174 105 | [ explist ] _ exp 175 106 | trusted checked block 176 107 | casehead casestmtlist ENDCASE 177 108 | forclause dotest DO scope doexit ENDLOOP 178 109 | EXIT 179 110 | LOOP 180 111 | GOTO id 181 111 | GO TO id 182 112 | RETURN optargs 183 113 | transfer lhs 184 114 | free [ exp optcatch ] 185 115 | WAIT lhs 186 116 | ERROR 187 117 | STOP 188 118 | NULL 189 119 | RESUME optargs 190 120 | REJECT 191 121 | CONTINUE 192 122 | RETRY 193 123 block ::= BEGIN scope exits END 194 123 | { scope exits } 195 124 scope ::= open enables statementlist 196 125 | open enables declist ; statementlist 197 126 binditem ::= exp 198 126 | id ~~ exp 199 126 | id : exp 200 127 exits ::= EXITS exitlist 201 236 | 202 128 casestmtitem ::= caselabel => statement 203 128 caseexpitem ::= caselabel => exp 204 128 exititem ::= idlist => statement 205 129 casetest ::= optrelation 206 129 | ~ optrelation 207 130 | exp 208 131 caselabel ::= ident typeexp 209 234 | caselabel' 210 131 controlid ::= ident typeexp 211 198 | id 212 132 forclause ::= FOR controlid _ exp , exp 213 133 | FOR controlid direction IN range 214 134 | THROUGH range 215 237 | 216 135 direction ::= 217 135 | DECREASING 218 136 dotest ::= UNTIL exp 219 237 | WHILE exp 220 237 | 221 137 doexit ::= 222 137 | REPEAT exitlist 223 138 | REPEAT exitlist FINISHED => statement 224 138 | REPEAT exitlist FINISHED => statement ; 225 139 enables ::= ENABLE catchcase ; 226 140 | ENABLE catchany ; 227 141 | ENABLE BEGIN catchlist END ; 228 141 | ENABLE { catchlist } ; 229 236 | 230 142 catchlist ::= catchhead catchcase 231 231 | catchhead 232 237 | catchhead catchany 233 237 | catchhead catchany ; 234 143 catchcase ::= lhslist => statement 235 144 optargs ::= [ explist ] 236 145 | 237 236 | lhs 238 146 transfer ::= SIGNAL 239 147 | ERROR 240 148 | RETURN WITH ERROR 241 149 | START 242 150 | RESTART 243 151 | JOIN 244 152 | NOTIFY 245 153 | BROADCAST 246 154 keyitem ::= id ~ optexp 247 154 | id : optexp 248 155 defaultopt ::= trash 249 155 | exp '| trash 250 232 | 251 237 | exp 252 155 optexp ::= trash 253 237 | exp 254 237 | 255 156 exp ::= IF exp THEN exp ELSE exp 256 157 | casehead caseexplist ENDCASE => exp 257 158 | lhs _ exp 258 159 | [ explist ] _ exp 259 160 | ERROR 260 188 | transferop lhs 261 237 | disjunct 262 161 disjunct ::= disjunct OR conjunct 263 C 237 | conjunct 264 162 conjunct ::= conjunct AND negation 265 C 237 | negation 266 163 negation ::= ~ relation 267 163 | NOT relation 268 C 237 | relation 269 164 relation ::= sum optrelation 270 237 | sum 271 164 sum ::= sum addop product 272 C 237 | product 273 164 product ::= product multop factor 274 C 237 | factor 275 165 optrelation ::= NOT relationtail 276 237 | relationtail 277 166 relationtail ::= IN range 278 237 | relop sum 279 167 relop ::= = 280 168 | # 281 169 | < 282 170 | <= 283 171 | > 284 172 | >= 285 173 addop ::= + 286 174 | - 287 175 multop ::= * 288 176 | / 289 177 | MOD 290 178 factor ::= primary ** factor 291 179 | addop primary 292 C 237 | primary 293 180 primary ::= [ explist ] 294 181 | prefixop [ orderlist ] 295 182 | VAL [ orderlist ] 296 183 | ALL [ orderlist ] 297 184 | new [ typeexp initialization optcatch ] 298 185 | cons [ explist optcatch ] 299 186 | listcons [ explist ] 300 187 | NIL 301 188 | typeop [ typeexp ] 302 190 | BITS [ typeexp ] 303 190 | BITS [ typeexp , exp ] 304 191 | BYTES [ typeexp ] 305 191 | BYTES [ typeexp , exp ] 306 192 | UNITS [ typeexp ] 307 192 | UNITS [ typeexp , exp ] 308 193 | SIZE [ typeexp ] 309 193 | SIZE [ typeexp , exp ] 310 194 | WORDS [ typeexp ] 311 194 | WORDS [ typeexp , exp ] 312 195 | ISTYPE [ exp , typeexp ] 313 196 | @ lhs 314 197 | DESCRIPTOR [ desclist ] 315 237 | lhs 316 189 qualifier ::= . prefixop 317 189 | . typeop 318 190 | . BITS 319 191 | . BYTES 320 192 | . UNITS 321 193 | . SIZE 322 194 | . WORDS 323 207 | [ explist optcatch ] 324 208 | . id 325 209 | ^ 326 198 lhs ::= id 327 199 | num 328 199 | string 329 199 | lnum 330 200 | flnum 331 201 | char 332 202 | lstring 333 203 | atom 334 204 | NARROW [ exp opttype optcatch ] 335 205 | LOOPHOLE [ exp opttype ] 336 206 | APPLY [ exp , exp optcatch ] 337 237 | ( exp ) 338 237 | lhs qualifier 339 210 optcatch ::= ! catchlist 340 236 | 341 211 transferop ::= SIGNAL 342 212 | ERROR 343 213 | START 344 214 | JOIN 345 215 | NEW 346 216 | FORK 347 217 prefixop ::= LONG 348 218 | ABS 349 219 | PRED 350 220 | SUCC 351 221 | ORD 352 222 | MIN 353 223 | MAX 354 224 | BASE 355 225 | LENGTH 356 226 typeop ::= CODE 357 227 | FIRST 358 228 | LAST 359 229 | NIL 360 230 desclist ::= exp , exp opttype 361 237 | exp 362 231 directory ::= DIRECTORY ; 363 234 | DIRECTORY includelist ; 364 237 | 365 231 imports ::= IMPORTS 366 234 | IMPORTS modulelist 367 237 | 368 231 pointerprefix ::= POINTER 369 237 | POINTER interval 370 231 free ::= FREE 371 237 | lhs . FREE 372 231 new ::= NEW 373 237 | lhs . NEW 374 231 cons ::= CONS 375 237 | lhs . CONS 376 231 listcons ::= LIST 377 237 | lhs . LIST 378 231 exports ::= EXPORTS 379 234 | EXPORTS modulelist 380 237 | 381 231 fieldlist ::= [ ] 382 234 | [ pairlist ] 383 234 | [ typelist ] 384 232 using ::= USING [ ] 385 237 | USING [ idlist ] 386 237 | 387 233 declist ::= declaration 388 233 | declist ; declaration 389 233 elementlist ::= 390 237 | elementlist' 391 233 pairlist ::= pairitem 392 233 | pairlist , pairitem 393 233 variantlist ::= variantitem 394 233 | variantlist , variantitem 395 233 orderlist ::= optexp 396 233 | orderlist , optexp 397 233 casestmtlist ::= 398 237 | casestmtlist' 399 237 | casestmtlist' ; 400 233 statementlist ::= 401 237 | statementlist' 402 237 | statementlist' ; 403 233 exitlist ::= 404 237 | exitlist' 405 237 | exitlist' ; 406 233 catchhead ::= 407 233 | catchhead catchcase ; 408 233 lhslist ::= lhs 409 233 | lhslist , lhs 410 233 caseexplist ::= 411 237 | caseexplist' 412 237 | caseexplist' , 413 233 includelist ::= includeitem 414 233 | includelist , includeitem 415 233 modulelist ::= moduleitem 416 233 | modulelist , moduleitem 417 233 elementlist' ::= element 418 233 | elementlist' , element 419 233 bindlist ::= binditem 420 233 | bindlist , binditem 421 233 statementlist' ::= statement 422 233 | statementlist' ; statement 423 233 casestmtlist' ::= casestmtitem 424 233 | casestmtlist' ; casestmtitem 425 233 caselabel' ::= casetest 426 233 | caselabel' , casetest 427 233 exitlist' ::= exititem 428 233 | exitlist' ; exititem 429 233 keylist ::= keyitem 430 233 | keylist , keyitem 431 233 caseexplist' ::= caseexpitem 432 233 | caseexplist' , caseexpitem 433 234 identlist ::= identlist' 434 234 open ::= OPEN bindlist ; 435 237 | 436 234 idlist ::= idlist' 437 234 explist ::= orderlist 438 234 | keylist 439 235 class ::= PROGRAM 440 236 | MONITOR 441 235 casehead ::= SELECT exp FROM 442 236 | WITH binditem SELECT optexp FROM 443 236 readonly ::= READONLY 444 236 | 445 236 ordered ::= ORDERED 446 236 | 447 236 base ::= BASE 448 236 | 449 236 heap ::= UNCOUNTED 450 236 | 451 236 inline ::= INLINE 452 236 | 453 237 arguments ::= arglist returnlist 454 237 interface ::= imports exports shares 455 237 bindop ::= ~ 456 237 | = 457 237 shares ::= SHARES idlist 458 237 | 459 237 default ::= _ defaultopt 460 237 | 461 237 optsize ::= [ exp ] 462 237 | 463 237 bounds ::= exp .. exp 464 237 length ::= [ exp ] 465 237 indextype ::= typeexp 466 237 | 467 237 catchany ::= ANY => statement 468 237 trash ::= TRASH 469 237 | NULL 470 237 opttype ::= , typeexp 471 237 | 472 238 checked ::= 473 239 | CHECKED 474 240 | TRUSTED 475 241 | UNCHECKED