-- grammar extracted from sakurapass1t.mesa by PGS, 14-Dec-81 9:23 ||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 -> 34 RECORD 35 POINTER 36 REF 37 ARRAY 38 SEQUENCE 39 DESCRIPTOR 40 PROC 41 PORT 42 SIGNAL 43 ERROR 44 PROCESS 45 DEVICE 46 PROGRAM 47 MONITOR 48 RELATIVE 49 LONG 50 TYPE 51 FRAME 52 TO 53 ORDERED 54 BASE 55 OF 56 PACKED 57 RETURNS 58 MONITORED 59 OVERLAID 60 COMPUTED 61 MACHINE 62 DEPENDENT 63 DIRECTORY 64 DEFINITIONS 65 IMPORTS 66 EXPORTS 67 SHARES 68 RESIDENT 69 LOCKS 70 USING 71 PUBLIC 72 PRIVATE 73 READONLY 74 ENTRY 75 INTERNAL 76 INLINE 77 CODE 78 ABS 79 ALL 80 AND 81 MAX 82 MIN 83 MOD 84 OR 85 PRED 86 LENGTH 87 NEW 88 START 89 SUCC 90 FORK 91 JOIN 92 LOOPHOLE 93 NARROW 94 ISTYPE 95 SIZE 96 FIRST 97 LAST 98 NIL 99 NULL 100 IF 101 THEN 102 ELSE 103 WITH 104 FROM 105 FOR 106 DECREASING 107 IN 108 THROUGH 109 UNTIL 110 WHILE 111 REPEAT 112 FINISHED 113 RETURN 114 EXIT 115 LOOP 116 GOTO 117 GO 118 FREE 119 WAIT 120 RESTART 121 NOTIFY 122 BROADCAST 123 STOP 124 RESUME 125 CONTINUE 126 RETRY 127 TRANSFER 128 STATE 129 OPEN 130 ENABLE 131 ANY 132 EXITS 133 ) 134 ] 135 } 136 ENDLOOP 137 ENDCASE 138 ( 139 [ 140 { 141 DO 142 SELECT 143 GUARDIAN 144 CONTROL 145 OUT 146 DATAFLOW 147 PAR 148 CHOICE 149 WHEN 150 ON 151 WITHIN 152 UP 153 DOWN 154 CHANGE 155 CIRCUIT 156 COMPONENTS 157 NODES 158 REPRESENTATION 159 CONNECTIONS 160 ALIAS 161 MOSSIM 162 FILE 163 eof ||TABLE2 164 goal 165 unit 166 directory 167 module 168 includelist 169 imports 170 modulelist 171 exports 172 open 173 bindlist 174 fieldlist 175 pairlist 176 typelist 177 includeitem 178 using 179 identlist 180 classhead 181 block 182 defhead 183 defbody 184 resident 185 class 186 arguments 187 locks 188 interface 189 public 190 definitions 191 shares 192 declist 193 primary 194 lambda 195 ident 196 typeexp 197 moduleitem 198 declaration 199 readonly 200 entry 201 initialization 202 default 203 optargs 204 procaccess 205 idlist' 206 identlist' 207 position 208 exp 209 optbits 210 bounds 211 interval 212 range 213 typeid 214 typecons 215 length 216 dependent 217 elementlist 218 element 219 monitored 220 reclist 221 ordered 222 base 223 pointertype 224 packed 225 indextype 226 transfermode 227 variantpair 228 variantpart 229 pairitem 230 defaultopt 231 vcasehead 232 variantlist 233 tagtype 234 variantitem 235 idlist 236 pointerprefix 237 initvalue 238 inline 239 codelist 240 orderlist 241 statement 242 lhs 243 explist 244 elsepart 245 casehead 246 casestmtlist 247 otherpart 248 forclause 249 dotest 250 scope 251 doexit 252 transfer 253 free 254 optcatch 255 exits 256 enables 257 statementlist 258 binditem 259 exitlist 260 casestmtitem 261 caselabel 262 caseexpitem 263 exititem 264 casetest 265 optrelation 266 controlid 267 direction 268 catchcase 269 catchany 270 catchlist 271 catchhead 272 nullpairlist 273 lhslist 274 keyitem 275 optexp 276 transferop 277 caseexplist 278 disjunct 279 conjunct 280 negation 281 not 282 relation 283 sum 284 addop 285 product 286 multop 287 factor 288 relationtail 289 relop 290 prefixop 291 new 292 typeop 293 desclist 294 opttype 295 qualifier 296 transferseries 297 aliaslist 298 complist 299 statementlist' 300 casestmtlist' 301 caselabel' 302 exitlist' 303 keylist 304 caseexplist' 305 transferexp 306 parlist 307 guardcomlist 308 guardcom 309 alias 310 compitem 311 arglist 312 returnlist 313 devicebody 314 event 315 updownsignal ||TABLE3 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 -> tokenRARROW / tokenDIV // tokenPAR '| tokenBAR "||" tokenNDET ||TABLE4 1 0 goal ::= . unit . 2 0 | . unit .. 3 1 unit ::= directory module 4 2 directory ::= DIRECTORY includelist ; 5 225 | DIRECTORY ; 6 234 | 7 2 imports ::= IMPORTS modulelist 8 234 | 9 2 exports ::= EXPORTS modulelist 10 234 | 11 2 open ::= OPEN bindlist ; 12 234 | 13 2 fieldlist ::= [ pairlist ] 14 2 | [ typelist ] 15 225 | [ ] 16 3 includeitem ::= id : FROM string using 17 4 | id : TYPE using 18 4 | id using 19 5 | id : TYPE id using 20 6 using ::= USING [ ] 21 233 | USING [ idlist ] 22 234 | 23 7 module ::= identlist classhead block 24 7 | identlist defhead defbody 25 8 classhead ::= resident class arguments locks interface = public 26 9 class ::= PROGRAM 27 10 | MONITOR 28 11 defhead ::= definitions locks imports shares = public 29 12 definitions ::= DEFINITIONS 30 13 defbody ::= { open declist } 31 14 locks ::= LOCKS primary lambda 32 234 | 33 15 lambda ::= USING ident typeexp 34 234 | 35 16 moduleitem ::= id 36 17 | id : id 37 18 declaration ::= identlist public readonly entry typeexp initialization 38 19 | identlist public TYPE = public typeexp default 39 20 | identlist public TYPE optargs 40 21 public ::= PUBLIC 41 22 | PRIVATE 42 23 | 43 22 procaccess ::= 44 24 entry ::= ENTRY 45 25 | INTERNAL 46 26 | 47 27 idlist' ::= id 48 29 | id , idlist' 49 27 identlist' ::= id : 50 28 | id position : 51 29 | id , identlist' 52 30 | id position , identlist' 53 31 position ::= ( exp optbits ) 54 32 optbits ::= : bounds 55 234 | 56 32 interval ::= [ bounds ] 57 33 | [ bounds ) 58 34 | ( bounds ] 59 35 | ( bounds ) 60 36 typeexp ::= id 61 233 | typeid 62 233 | typecons 63 36 range ::= id 64 41 | id interval 65 42 | typeid interval 66 233 | interval 67 233 | typeid 68 37 typeid ::= id . id 69 38 | id id 70 39 | id typeid 71 40 typecons ::= interval 72 41 | id interval 73 42 | typeid interval 74 43 | id length 75 44 | typeid length 76 45 | dependent { elementlist } 77 48 | dependent monitored RECORD reclist 78 49 | ordered base pointertype 79 50 | REF readonly typeexp 80 51 | REF readonly ANY 81 52 | REF 82 53 | packed ARRAY indextype OF typeexp 83 54 | DESCRIPTOR FOR readonly typeexp 84 55 | transfermode arguments 85 56 | id RELATIVE typeexp 86 57 | typeid RELATIVE typeexp 87 58 | LONG typeexp 88 59 | FRAME [ id ] 89 46 ident ::= id position : 90 198 | id : 91 46 element ::= id ( exp ) 92 47 | ( exp ) 93 198 | id 94 60 monitored ::= MONITORED 95 232 | 96 61 dependent ::= MACHINE DEPENDENT 97 62 | 98 63 reclist ::= [ ] 99 63 | NULL 100 64 | [ pairlist ] 101 64 | [ typelist ] 102 65 | [ pairlist , variantpair ] 103 66 | [ variantpart default ] 104 231 | [ variantpair ] 105 67 variantpair ::= identlist public variantpart default 106 67 pairitem ::= identlist public typeexp default 107 68 defaultopt ::= 108 69 | NULL 109 70 | exp '| NULL 110 233 | exp 111 71 variantpart ::= SELECT vcasehead FROM variantlist ENDCASE 112 71 | SELECT vcasehead FROM variantlist , ENDCASE 113 72 | packed SEQUENCE vcasehead OF typeexp 114 73 vcasehead ::= ident public tagtype 115 74 | COMPUTED tagtype 116 75 | OVERLAID tagtype 117 76 tagtype ::= * 118 233 | typeexp 119 77 variantitem ::= idlist => reclist 120 78 typelist ::= typecons default 121 78 | typeid default 122 79 | id 123 80 | id _ defaultopt 124 81 | typecons default , typelist 125 81 | typeid default , typelist 126 82 | id , typelist 127 83 | id _ defaultopt , typelist 128 84 pointertype ::= pointerprefix 129 85 | pointerprefix TO readonly typeexp 130 86 transfermode ::= PROC 131 87 | PORT 132 88 | SIGNAL 133 89 | ERROR 134 90 | PROCESS 135 91 | PROGRAM 136 235 | DEVICE 137 92 initialization ::= 138 230 | _ initvalue 139 231 | = initvalue 140 93 initvalue ::= procaccess inline block 141 94 | CODE 142 95 | MACHINE CODE { codelist } 143 156 | NULL 144 233 | exp 145 96 codelist ::= orderlist 146 97 | codelist ; orderlist 147 98 statement ::= lhs 148 99 | lhs _ exp 149 100 | [ explist ] _ exp 150 101 | block 151 102 | IF exp THEN statement elsepart 152 103 | casehead casestmtlist ENDCASE otherpart 153 104 | forclause dotest DO scope doexit ENDLOOP 154 105 | EXIT 155 106 | LOOP 156 107 | GOTO id 157 108 | GO TO id 158 109 | RETURN optargs 159 110 | transfer lhs 160 111 | free [ exp optcatch ] 161 112 | WAIT lhs 162 113 | ERROR 163 114 | STOP 164 115 | NULL 165 116 | RESUME optargs 166 117 | CONTINUE 167 118 | RETRY 168 119 | lhs _ STATE 169 237 | WHEN event : statement 170 239 | PAR { parlist } 171 241 | ON event -> statement WITHIN statement 172 247 | CHOICE { guardcomlist } 173 248 | CIRCUIT { COMPONENTS complist NODES nullpairlist REPRESENTATION aliaslist CONNECTIONS lhslist } 174 120 block ::= { scope exits } 175 236 | { IN nullpairlist OUT nullpairlist GUARDIAN statement devicebody } 176 121 scope ::= open enables declist statementlist 177 122 binditem ::= exp 178 123 | id : exp 179 124 exits ::= EXITS exitlist 180 232 | 181 125 casestmtitem ::= caselabel => statement 182 125 caseexpitem ::= caselabel => exp 183 125 exititem ::= idlist => statement 184 126 casetest ::= optrelation 185 127 | exp 186 128 caselabel ::= ident typeexp 187 229 | caselabel' 188 128 controlid ::= ident typeexp 189 198 | id 190 129 forclause ::= FOR controlid _ exp , exp 191 130 | FOR controlid direction IN range 192 131 | THROUGH range 193 234 | 194 132 direction ::= DECREASING 195 133 | 196 134 dotest ::= UNTIL exp 197 233 | WHILE exp 198 234 | 199 135 doexit ::= 200 136 | REPEAT exitlist 201 137 | REPEAT exitlist FINISHED => statement 202 137 | REPEAT exitlist FINISHED => statement ; 203 138 enables ::= ENABLE catchcase ; 204 139 | ENABLE catchany ; 205 140 | ENABLE { catchlist } ; 206 232 | 207 141 catchlist ::= catchhead 208 142 | catchhead catchcase 209 233 | catchhead catchany 210 233 | catchhead catchany ; 211 141 nullpairlist ::= 212 229 | pairlist 213 143 catchcase ::= lhslist => statement 214 144 optargs ::= [ explist ] 215 234 | 216 145 transfer ::= SIGNAL 217 146 | ERROR 218 147 | RETURN WITH ERROR 219 148 | START 220 149 | RESTART 221 150 | JOIN 222 151 | NOTIFY 223 152 | BROADCAST 224 153 | TRANSFER WITH 225 154 | RETURN WITH 226 155 keyitem ::= id : optexp 227 156 optexp ::= NULL 228 233 | exp 229 234 | 230 157 exp ::= transferop lhs 231 158 | IF exp THEN exp ELSE exp 232 159 | casehead caseexplist ENDCASE => exp 233 160 | lhs _ exp 234 161 | [ explist ] _ exp 235 162 | ERROR 236 233 | disjunct 237 163 disjunct ::= disjunct OR conjunct 238 C 233 | conjunct 239 164 conjunct ::= conjunct AND negation 240 C 233 | negation 241 165 negation ::= not relation 242 C 233 | relation 243 166 relation ::= sum optrelation 244 233 | sum 245 166 sum ::= sum addop product 246 C 233 | product 247 166 product ::= product multop factor 248 C 233 | factor 249 167 optrelation ::= not relationtail 250 233 | relationtail 251 168 relationtail ::= IN range 252 233 | relop sum 253 169 relop ::= = 254 170 | # 255 171 | < 256 172 | <= 257 173 | > 258 174 | >= 259 175 addop ::= + 260 176 | - 261 177 multop ::= * 262 178 | / 263 179 | MOD 264 180 factor ::= - primary 265 C 233 | primary 266 181 primary ::= num 267 182 | lnum 268 183 | flnum 269 184 | char 270 185 | string 271 186 | lstring 272 187 | atom 273 188 | NIL 274 189 | [ explist ] 275 190 | prefixop [ orderlist ] 276 191 | new [ typeexp initialization optcatch ] 277 192 | typeop [ typeexp ] 278 193 | SIZE [ typeexp ] 279 194 | SIZE [ typeexp , exp ] 280 195 | ISTYPE [ exp , typeexp optcatch ] 281 196 | @ lhs 282 197 | DESCRIPTOR [ desclist ] 283 233 | lhs 284 198 lhs ::= id 285 199 | NARROW [ exp opttype optcatch ] 286 200 | LOOPHOLE [ exp opttype ] 287 233 | ( exp ) 288 233 | lhs qualifier 289 201 qualifier ::= [ explist optcatch ] 290 202 | . id 291 203 | ^ 292 204 optcatch ::= ! catchlist 293 232 | 294 205 transferop ::= SIGNAL 295 206 | ERROR 296 207 | START 297 208 | JOIN 298 209 | NEW 299 210 | FORK 300 211 prefixop ::= LONG 301 212 | ABS 302 213 | PRED 303 214 | SUCC 304 215 | MIN 305 216 | MAX 306 217 | BASE 307 218 | LENGTH 308 219 | ALL 309 220 typeop ::= CODE 310 221 | FIRST 311 222 | LAST 312 223 | NIL 313 224 desclist ::= exp , exp opttype 314 233 | exp 315 225 pointerprefix ::= POINTER 316 233 | POINTER interval 317 225 free ::= FREE 318 233 | lhs . FREE 319 225 new ::= NEW 320 233 | lhs . NEW 321 226 declist ::= 322 228 | declist declaration ; 323 226 casestmtlist ::= 324 233 | casestmtlist' 325 233 | casestmtlist' ; 326 226 statementlist ::= 327 233 | statementlist' 328 233 | statementlist' ; 329 226 exitlist ::= 330 233 | exitlist' 331 233 | exitlist' ; 332 226 catchhead ::= 333 228 | catchhead catchcase ; 334 226 caseexplist ::= 335 233 | caseexplist' 336 233 | caseexplist' , 337 226 transferseries ::= 338 227 | transferexp 339 228 | transferseries ; transferexp 340 226 aliaslist ::= 341 227 | alias 342 228 | aliaslist , alias 343 226 complist ::= 344 227 | compitem 345 228 | complist , compitem 346 227 includelist ::= includeitem 347 228 | includelist , includeitem 348 227 modulelist ::= moduleitem 349 228 | modulelist , moduleitem 350 227 bindlist ::= binditem 351 228 | bindlist , binditem 352 227 pairlist ::= pairitem 353 228 | pairlist , pairitem 354 227 elementlist ::= element 355 228 | elementlist , element 356 227 variantlist ::= variantitem 357 228 | variantlist , variantitem 358 227 orderlist ::= optexp 359 228 | orderlist , optexp 360 227 lhslist ::= lhs 361 228 | lhslist , lhs 362 227 statementlist' ::= statement 363 228 | statementlist' ; statement 364 227 casestmtlist' ::= casestmtitem 365 228 | casestmtlist' ; casestmtitem 366 227 caselabel' ::= casetest 367 228 | caselabel' , casetest 368 227 exitlist' ::= exititem 369 228 | exitlist' ; exititem 370 227 keylist ::= keyitem 371 228 | keylist , keyitem 372 227 caseexplist' ::= caseexpitem 373 228 | caseexplist' , caseexpitem 374 227 parlist ::= statement 375 228 | parlist // statement 376 227 guardcomlist ::= guardcom 377 228 | guardcomlist "||" guardcom 378 229 identlist ::= identlist' 379 229 idlist ::= idlist' 380 229 explist ::= orderlist 381 229 | keylist 382 230 casehead ::= SELECT exp FROM 383 231 | WITH binditem SELECT optexp FROM 384 231 readonly ::= READONLY 385 232 | 386 231 ordered ::= ORDERED 387 232 | 388 231 base ::= BASE 389 232 | 390 231 packed ::= PACKED 391 232 | 392 231 inline ::= INLINE 393 232 | 394 233 arguments ::= arglist returnlist 395 233 interface ::= imports exports shares 396 233 shares ::= SHARES idlist 397 234 | 398 233 default ::= _ defaultopt 399 234 | 400 233 bounds ::= exp .. exp 401 233 length ::= [ exp ] 402 233 indextype ::= typeexp 403 234 | 404 233 elsepart ::= ELSE statement 405 234 | 406 233 otherpart ::= => statement 407 234 | 408 233 catchany ::= ANY => statement 409 233 not ::= ~ 410 233 opttype ::= , typeexp 411 234 | 412 233 arglist ::= fieldlist 413 234 | 414 233 returnlist ::= RETURNS fieldlist 415 234 | 416 238 transferexp ::= lhs _ exp 417 240 guardcom ::= WHEN event -> statement 418 242 event ::= updownsignal 419 243 | updownsignal AND exp 420 244 updownsignal ::= lhs UP 421 245 | lhs DOWN 422 246 | lhs CHANGE 423 249 resident ::= RESIDENT 424 250 | 425 251 alias ::= idlist ALIAS id 426 252 compitem ::= identlist exp 427 253 devicebody ::= CONTROL statement 428 254 | MOSSIM REPRESENTATION aliaslist FILE lhs