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