]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/m2/mc-boot/Gmcp2.cc
c5f32c1395e5605e682f1d6f51b6000c8bb9b56d
[thirdparty/gcc.git] / gcc / m2 / mc-boot / Gmcp2.cc
1 /* do not edit automatically generated by mc from mcp2. */
2 /* output from mc-2.bnf, automatically generated do not edit.
3
4 Copyright (C) 2015-2024 Free Software Foundation, Inc.
5 Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
6
7 This file is part of GNU Modula-2.
8
9 GNU Modula-2 is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GNU Modula-2 is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GNU Modula-2; see the file COPYING. If not,
21 see <https://www.gnu.org/licenses/>. */
22
23 #include "config.h"
24 #include "system.h"
25 #include <stdbool.h>
26 # if !defined (PROC_D)
27 # define PROC_D
28 typedef void (*PROC_t) (void);
29 typedef struct { PROC_t proc; } PROC;
30 # endif
31
32 # if !defined (TRUE)
33 # define TRUE (1==1)
34 # endif
35
36 # if !defined (FALSE)
37 # define FALSE (1==0)
38 # endif
39
40 #if defined(__cplusplus)
41 # undef NULL
42 # define NULL 0
43 #endif
44 #define _mcp2_H
45 #define _mcp2_C
46
47 # include "GDynamicStrings.h"
48 # include "GmcError.h"
49 # include "GnameKey.h"
50 # include "GmcPrintf.h"
51 # include "GmcDebug.h"
52 # include "GmcReserved.h"
53 # include "GmcLexBuf.h"
54 # include "Gdecl.h"
55
56 # define Pass1 false
57 # define Debugging false
58 typedef unsigned int mcp2_stop0;
59
60 typedef unsigned int mcp2_SetOfStop0;
61
62 typedef unsigned int mcp2_stop1;
63
64 typedef unsigned int mcp2_SetOfStop1;
65
66 typedef unsigned int mcp2_stop2;
67
68 typedef unsigned int mcp2_SetOfStop2;
69
70 static bool WasNoError;
71 static nameKey_Name curident;
72 static decl_node typeDes;
73 static decl_node typeExp;
74 static decl_node curproc;
75 static decl_node curmodule;
76
77 /*
78 CompilationUnit - returns TRUE if the input was correct enough to parse
79 in future passes.
80 */
81
82 extern "C" bool mcp2_CompilationUnit (void);
83 static void ErrorString (DynamicStrings_String s);
84 static void ErrorArray (const char *a_, unsigned int _a_high);
85
86 /*
87 checkEndName - if module does not have, name, then issue an error containing, desc.
88 */
89
90 static void checkEndName (decl_node module, nameKey_Name name, const char *desc_, unsigned int _desc_high);
91
92 /*
93 DescribeStop - issues a message explaining what tokens were expected
94 */
95
96 static DynamicStrings_String DescribeStop (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
97
98 /*
99 DescribeError - issues a message explaining what tokens were expected
100 */
101
102 static void DescribeError (void);
103
104 /*
105 SyntaxError - after a syntax error we skip all tokens up until we reach
106 a stop symbol.
107 */
108
109 static void SyntaxError (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
110
111 /*
112 SyntaxCheck -
113 */
114
115 static void SyntaxCheck (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
116
117 /*
118 WarnMissingToken - generates a warning message about a missing token, t.
119 */
120
121 static void WarnMissingToken (mcReserved_toktype t);
122
123 /*
124 MissingToken - generates a warning message about a missing token, t.
125 */
126
127 static void MissingToken (mcReserved_toktype t);
128
129 /*
130 CheckAndInsert -
131 */
132
133 static bool CheckAndInsert (mcReserved_toktype t, mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
134
135 /*
136 InStopSet
137 */
138
139 static bool InStopSet (mcReserved_toktype t, mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
140
141 /*
142 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
143 If it is not then it will insert a token providing the token
144 is one of ; ] ) } . OF END ,
145
146 if the stopset contains <identtok> then we do not insert a token
147 */
148
149 static void PeepToken (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
150
151 /*
152 Expect -
153 */
154
155 static void Expect (mcReserved_toktype t, mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
156
157 /*
158 Ident - error checking varient of Ident
159 */
160
161 static void Ident (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
162
163 /*
164 string -
165 */
166
167 static void string (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
168
169 /*
170 Integer -
171 */
172
173 static void Integer (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
174
175 /*
176 Real -
177 */
178
179 static void Real (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
180
181 /*
182 registerImport - looks up module, ident, and adds it to the
183 current module import list.
184 */
185
186 static void registerImport (nameKey_Name ident, bool scoped);
187
188 /*
189 FileUnit := DefinitionModule |
190 ImplementationOrProgramModule
191
192 first symbols:implementationtok, moduletok, definitiontok
193
194 cannot reachend
195 */
196
197 static void FileUnit (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
198
199 /*
200 ProgramModule := 'MODULE' Ident
201 % curmodule := lookupModule (curident) %
202
203 % enterScope (curmodule) %
204 [ Priority ] ';' { Import } Block
205 Ident
206 % checkEndName (curmodule, curident, 'program module') %
207
208 % leaveScope %
209
210 % setEnumsComplete (curmodule) %
211 '.'
212
213 first symbols:moduletok
214
215 cannot reachend
216 */
217
218 static void ProgramModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
219
220 /*
221 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
222 Ident
223 % curmodule := lookupImp (curident) %
224
225 % enterScope (lookupDef (curident)) %
226
227 % enterScope (curmodule) %
228 [ Priority ] ';' { Import }
229 Block Ident
230 % checkEndName (curmodule, curident, 'implementation module') %
231
232 % leaveScope ; leaveScope %
233
234 % setEnumsComplete (curmodule) %
235 '.'
236
237 first symbols:implementationtok
238
239 cannot reachend
240 */
241
242 static void ImplementationModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
243
244 /*
245 ImplementationOrProgramModule := ImplementationModule |
246 ProgramModule
247
248 first symbols:moduletok, implementationtok
249
250 cannot reachend
251 */
252
253 static void ImplementationOrProgramModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
254
255 /*
256 Number := Integer | Real
257
258 first symbols:realtok, integertok
259
260 cannot reachend
261 */
262
263 static void Number (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
264
265 /*
266 Qualident := Ident { '.' Ident }
267
268 first symbols:identtok
269
270 cannot reachend
271 */
272
273 static void Qualident (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
274
275 /*
276 ConstantDeclaration := Ident '=' ConstExpression
277
278 first symbols:identtok
279
280 cannot reachend
281 */
282
283 static void ConstantDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
284
285 /*
286 ConstExpression := SimpleConstExpr [ Relation SimpleConstExpr ]
287
288 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
289
290 cannot reachend
291 */
292
293 static void ConstExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
294
295 /*
296 Relation := '=' | '#' | '<>' | '<' | '<=' |
297 '>' | '>=' | 'IN'
298
299 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
300
301 cannot reachend
302 */
303
304 static void Relation (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
305
306 /*
307 SimpleConstExpr := UnaryOrConstTerm { AddOperator
308 ConstTerm }
309
310 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
311
312 cannot reachend
313 */
314
315 static void SimpleConstExpr (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
316
317 /*
318 UnaryOrConstTerm := '+' ConstTerm |
319 '-' ConstTerm |
320 ConstTerm
321
322 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
323
324 cannot reachend
325 */
326
327 static void UnaryOrConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
328
329 /*
330 AddOperator := '+' | '-' | 'OR'
331
332 first symbols:ortok, minustok, plustok
333
334 cannot reachend
335 */
336
337 static void AddOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
338
339 /*
340 ConstTerm := ConstFactor { MulOperator ConstFactor }
341
342 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
343
344 cannot reachend
345 */
346
347 static void ConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
348
349 /*
350 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
351 'REM' | 'AND' | '&'
352
353 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
354
355 cannot reachend
356 */
357
358 static void MulOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
359
360 /*
361 ConstFactor := Number | ConstString |
362 ConstSetOrQualidentOrFunction |
363 '(' ConstExpression ')' |
364 'NOT' ConstFactor |
365 ConstAttribute
366
367 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
368
369 cannot reachend
370 */
371
372 static void ConstFactor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
373
374 /*
375 ConstString := string
376
377 first symbols:stringtok
378
379 cannot reachend
380 */
381
382 static void ConstString (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
383
384 /*
385 ComponentElement := ConstExpression [ '..' ConstExpression ]
386
387 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
388
389 cannot reachend
390 */
391
392 static void ComponentElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
393
394 /*
395 ComponentValue := ComponentElement [ 'BY' ConstExpression ]
396
397 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
398
399 cannot reachend
400 */
401
402 static void ComponentValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
403
404 /*
405 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
406
407 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
408
409 cannot reachend
410 */
411
412 static void ArraySetRecordValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
413
414 /*
415 Constructor := '{' [ ArraySetRecordValue ] '}'
416
417 first symbols:lcbratok
418
419 cannot reachend
420 */
421
422 static void Constructor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
423
424 /*
425 ConstSetOrQualidentOrFunction := Qualident [ Constructor |
426 ConstActualParameters ] |
427 Constructor
428
429 first symbols:lcbratok, identtok
430
431 cannot reachend
432 */
433
434 static void ConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
435
436 /*
437 ConstActualParameters := ActualParameters
438
439 first symbols:lparatok
440
441 cannot reachend
442 */
443
444 static void ConstActualParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
445
446 /*
447 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
448 '(' '(' ConstAttributeExpression
449 ')' ')'
450
451 first symbols:attributetok
452
453 cannot reachend
454 */
455
456 static void ConstAttribute (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
457
458 /*
459 ConstAttributeExpression := Ident | '<' Qualident
460 ',' Ident '>'
461
462 first symbols:lesstok, identtok
463
464 cannot reachend
465 */
466
467 static void ConstAttributeExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
468
469 /*
470 ByteAlignment := ''
471
472 first symbols:ldirectivetok
473
474 cannot reachend
475 */
476
477 static void ByteAlignment (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
478
479 /*
480 OptAlignmentExpression := [ AlignmentExpression ]
481
482 first symbols:lparatok
483
484 reachend
485 */
486
487 static void OptAlignmentExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
488
489 /*
490 AlignmentExpression := '(' ConstExpression ')'
491
492 first symbols:lparatok
493
494 cannot reachend
495 */
496
497 static void AlignmentExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
498
499 /*
500 Alignment := [ ByteAlignment ]
501
502 first symbols:ldirectivetok
503
504 reachend
505 */
506
507 static void Alignment (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
508
509 /*
510 TypeDeclaration := Ident
511 % typeDes := lookupSym (curident) %
512 '=' Type Alignment
513
514 first symbols:identtok
515
516 cannot reachend
517 */
518
519 static void TypeDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
520
521 /*
522 Type := ( DefSimpleType | ArrayType |
523 RecordType | SetType | PointerType |
524 ProcedureType )
525
526 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
527
528 cannot reachend
529 */
530
531 static void Type (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
532
533 /*
534 SimpleType := Qualident [ SubrangeType ] |
535 Enumeration | SubrangeType
536
537 first symbols:lsbratok, lparatok, identtok
538
539 cannot reachend
540 */
541
542 static void SimpleType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
543
544 /*
545 EnumIdentList :=
546 % VAR n, f: node ; %
547
548 % n := makeEnum () %
549 Ident
550 % f := makeEnumField (n, curident) %
551 { ',' Ident
552 % f := makeEnumField (n, curident) %
553 }
554
555 first symbols:identtok
556
557 cannot reachend
558 */
559
560 static void EnumIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
561
562 /*
563 Enumeration := '(' ( EnumIdentList ) ')'
564
565 first symbols:lparatok
566
567 cannot reachend
568 */
569
570 static void Enumeration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
571
572 /*
573 IdentList := Ident { ',' Ident }
574
575 first symbols:identtok
576
577 cannot reachend
578 */
579
580 static void IdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
581
582 /*
583 SubrangeType := '[' ConstExpression '..' ConstExpression
584 ']'
585
586 first symbols:lsbratok
587
588 cannot reachend
589 */
590
591 static void SubrangeType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
592
593 /*
594 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
595 'OF' Type
596
597 first symbols:arraytok
598
599 cannot reachend
600 */
601
602 static void ArrayType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
603
604 /*
605 RecordType := 'RECORD' [ DefaultRecordAttributes ]
606 FieldListSequence 'END'
607
608 first symbols:recordtok
609
610 cannot reachend
611 */
612
613 static void RecordType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
614
615 /*
616 DefaultRecordAttributes := ''
617
618 first symbols:ldirectivetok
619
620 cannot reachend
621 */
622
623 static void DefaultRecordAttributes (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
624
625 /*
626 RecordFieldPragma := [ '' ]
627
628 first symbols:ldirectivetok
629
630 reachend
631 */
632
633 static void RecordFieldPragma (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
634
635 /*
636 FieldPragmaExpression := Ident PragmaConstExpression
637
638 first symbols:identtok
639
640 cannot reachend
641 */
642
643 static void FieldPragmaExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
644
645 /*
646 PragmaConstExpression := [ '(' ConstExpression ')' ]
647
648 first symbols:lparatok
649
650 reachend
651 */
652
653 static void PragmaConstExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
654
655 /*
656 AttributeExpression := Ident '(' ConstExpression
657 ')'
658
659 first symbols:identtok
660
661 cannot reachend
662 */
663
664 static void AttributeExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
665
666 /*
667 FieldListSequence := FieldListStatement { ';' FieldListStatement }
668
669 first symbols:casetok, identtok, semicolontok
670
671 reachend
672 */
673
674 static void FieldListSequence (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
675
676 /*
677 FieldListStatement := [ FieldList ]
678
679 first symbols:identtok, casetok
680
681 reachend
682 */
683
684 static void FieldListStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
685
686 /*
687 FieldList := IdentList ':' Type RecordFieldPragma |
688 'CASE' CaseTag 'OF' Varient { '|' Varient }
689 [ 'ELSE' FieldListSequence ] 'END'
690
691 first symbols:casetok, identtok
692
693 cannot reachend
694 */
695
696 static void FieldList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
697
698 /*
699 TagIdent := [ Ident ]
700
701 first symbols:identtok
702
703 reachend
704 */
705
706 static void TagIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
707
708 /*
709 CaseTag := TagIdent [ ':' Qualident ]
710
711 first symbols:colontok, identtok
712
713 reachend
714 */
715
716 static void CaseTag (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
717
718 /*
719 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
720
721 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
722
723 reachend
724 */
725
726 static void Varient (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
727
728 /*
729 VarientCaseLabelList := VarientCaseLabels { ','
730 VarientCaseLabels }
731
732 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
733
734 cannot reachend
735 */
736
737 static void VarientCaseLabelList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
738
739 /*
740 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
741
742 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
743
744 cannot reachend
745 */
746
747 static void VarientCaseLabels (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
748
749 /*
750 SilentConstExpression := SilentSimpleConstExpr [
751 SilentRelation SilentSimpleConstExpr ]
752
753 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
754
755 cannot reachend
756 */
757
758 static void SilentConstExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
759
760 /*
761 SilentRelation := '=' | '#' | '<>' | '<' |
762 '<=' | '>' | '>=' | 'IN'
763
764 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
765
766 cannot reachend
767 */
768
769 static void SilentRelation (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
770
771 /*
772 SilentSimpleConstExpr := SilentUnaryOrConstTerm
773 { SilentAddOperator SilentConstTerm }
774
775 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
776
777 cannot reachend
778 */
779
780 static void SilentSimpleConstExpr (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
781
782 /*
783 SilentUnaryOrConstTerm := '+' SilentConstTerm |
784 '-' SilentConstTerm |
785 SilentConstTerm
786
787 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
788
789 cannot reachend
790 */
791
792 static void SilentUnaryOrConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
793
794 /*
795 SilentAddOperator := '+' | '-' | 'OR'
796
797 first symbols:ortok, minustok, plustok
798
799 cannot reachend
800 */
801
802 static void SilentAddOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
803
804 /*
805 SilentConstTerm := SilentConstFactor { SilentMulOperator
806 SilentConstFactor }
807
808 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
809
810 cannot reachend
811 */
812
813 static void SilentConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
814
815 /*
816 SilentMulOperator := '*' | '/' | 'DIV' |
817 'MOD' | 'REM' | 'AND' |
818 '&'
819
820 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
821
822 cannot reachend
823 */
824
825 static void SilentMulOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
826
827 /*
828 SilentConstFactor := Number | SilentConstString |
829 SilentConstSetOrQualidentOrFunction |
830 '(' SilentConstExpression ')' |
831 'NOT' SilentConstFactor |
832 SilentConstAttribute
833
834 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok
835
836 cannot reachend
837 */
838
839 static void SilentConstFactor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
840
841 /*
842 SilentConstString := string
843
844 first symbols:stringtok
845
846 cannot reachend
847 */
848
849 static void SilentConstString (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
850
851 /*
852 SilentConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
853 '(' '(' SilentConstAttributeExpression
854 ')' ')'
855
856 first symbols:attributetok
857
858 cannot reachend
859 */
860
861 static void SilentConstAttribute (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
862
863 /*
864 SilentConstAttributeExpression := Ident |
865 '<' Ident ','
866 SilentConstString
867 '>'
868
869 first symbols:lesstok, identtok
870
871 cannot reachend
872 */
873
874 static void SilentConstAttributeExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
875
876 /*
877 SilentComponentElement := SilentConstExpression
878 [ '..' SilentConstExpression ]
879
880 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
881
882 cannot reachend
883 */
884
885 static void SilentComponentElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
886
887 /*
888 SilentComponentValue := SilentComponentElement [
889 'BY' SilentConstExpression ]
890
891 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
892
893 cannot reachend
894 */
895
896 static void SilentComponentValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
897
898 /*
899 SilentArraySetRecordValue := SilentComponentValue
900 { ',' SilentComponentValue }
901
902 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
903
904 cannot reachend
905 */
906
907 static void SilentArraySetRecordValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
908
909 /*
910 SilentConstructor := '{' [ SilentArraySetRecordValue ]
911 '}'
912
913 first symbols:lcbratok
914
915 cannot reachend
916 */
917
918 static void SilentConstructor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
919
920 /*
921 SilentConstSetOrQualidentOrFunction := SilentConstructor |
922 Qualident
923 [ SilentConstructor |
924 SilentActualParameters ]
925
926 first symbols:identtok, lcbratok
927
928 cannot reachend
929 */
930
931 static void SilentConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
932
933 /*
934 SilentElement := SilentConstExpression [ '..' SilentConstExpression ]
935
936 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
937
938 cannot reachend
939 */
940
941 static void SilentElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
942
943 /*
944 SilentActualParameters := '(' [ SilentExpList ]
945 ')'
946
947 first symbols:lparatok
948
949 cannot reachend
950 */
951
952 static void SilentActualParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
953
954 /*
955 SilentExpList := SilentConstExpression { ',' SilentConstExpression }
956
957 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
958
959 cannot reachend
960 */
961
962 static void SilentExpList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
963
964 /*
965 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
966
967 first symbols:oftok, packedsettok, settok
968
969 cannot reachend
970 */
971
972 static void SetType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
973
974 /*
975 PointerType := 'POINTER' 'TO' Type
976
977 first symbols:pointertok
978
979 cannot reachend
980 */
981
982 static void PointerType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
983
984 /*
985 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
986
987 first symbols:proceduretok
988
989 cannot reachend
990 */
991
992 static void ProcedureType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
993
994 /*
995 FormalTypeList := '(' ( ')' FormalReturn |
996 ProcedureParameters ')'
997 FormalReturn )
998
999 first symbols:lparatok
1000
1001 cannot reachend
1002 */
1003
1004 static void FormalTypeList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1005
1006 /*
1007 FormalReturn := [ ':' OptReturnType ]
1008
1009 first symbols:colontok
1010
1011 reachend
1012 */
1013
1014 static void FormalReturn (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1015
1016 /*
1017 OptReturnType := '[' Qualident ']' |
1018 Qualident
1019
1020 first symbols:identtok, lsbratok
1021
1022 cannot reachend
1023 */
1024
1025 static void OptReturnType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1026
1027 /*
1028 ProcedureParameters := ProcedureParameter { ','
1029 ProcedureParameter }
1030
1031 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
1032
1033 cannot reachend
1034 */
1035
1036 static void ProcedureParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1037
1038 /*
1039 ProcedureParameter := '...' | 'VAR' FormalType |
1040 FormalType
1041
1042 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
1043
1044 cannot reachend
1045 */
1046
1047 static void ProcedureParameter (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1048
1049 /*
1050 VarIdent := Ident [ '[' ConstExpression ']' ]
1051
1052 first symbols:identtok
1053
1054 cannot reachend
1055 */
1056
1057 static void VarIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1058
1059 /*
1060 VarIdentList := VarIdent { ',' VarIdent }
1061
1062 first symbols:identtok
1063
1064 cannot reachend
1065 */
1066
1067 static void VarIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1068
1069 /*
1070 VariableDeclaration := VarIdentList ':' Type Alignment
1071
1072 first symbols:identtok
1073
1074 cannot reachend
1075 */
1076
1077 static void VariableDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1078
1079 /*
1080 DefVarIdent := Ident [ '[' ConstExpression ']' ]
1081
1082 first symbols:identtok
1083
1084 cannot reachend
1085 */
1086
1087 static void DefVarIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1088
1089 /*
1090 DefVarIdentList := DefVarIdent { ',' DefVarIdent }
1091
1092 first symbols:identtok
1093
1094 cannot reachend
1095 */
1096
1097 static void DefVarIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1098
1099 /*
1100 DefVariableDeclaration :=
1101 % typeDes := NIL %
1102 DefVarIdentList ':' Type
1103 Alignment
1104
1105 first symbols:identtok
1106
1107 cannot reachend
1108 */
1109
1110 static void DefVariableDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1111
1112 /*
1113 Designator := Qualident { SubDesignator }
1114
1115 first symbols:identtok
1116
1117 cannot reachend
1118 */
1119
1120 static void Designator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1121
1122 /*
1123 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
1124 '^'
1125
1126 first symbols:uparrowtok, lsbratok, periodtok
1127
1128 cannot reachend
1129 */
1130
1131 static void SubDesignator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1132
1133 /*
1134 ArrayExpList := Expression { ',' Expression }
1135
1136 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1137
1138 cannot reachend
1139 */
1140
1141 static void ArrayExpList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1142
1143 /*
1144 ExpList := Expression { ',' Expression }
1145
1146 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1147
1148 cannot reachend
1149 */
1150
1151 static void ExpList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1152
1153 /*
1154 Expression := SimpleExpression [ Relation SimpleExpression ]
1155
1156 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1157
1158 cannot reachend
1159 */
1160
1161 static void Expression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1162
1163 /*
1164 SimpleExpression := UnaryOrTerm { AddOperator Term }
1165
1166 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1167
1168 cannot reachend
1169 */
1170
1171 static void SimpleExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1172
1173 /*
1174 UnaryOrTerm := '+' Term | '-' Term |
1175 Term
1176
1177 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1178
1179 cannot reachend
1180 */
1181
1182 static void UnaryOrTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1183
1184 /*
1185 Term := Factor { MulOperator Factor }
1186
1187 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
1188
1189 cannot reachend
1190 */
1191
1192 static void Term (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1193
1194 /*
1195 Factor := Number | string | SetOrDesignatorOrFunction |
1196 '(' Expression ')' |
1197 'NOT' ( Factor | ConstAttribute )
1198
1199 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1200
1201 cannot reachend
1202 */
1203
1204 static void Factor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1205
1206 /*
1207 SetOrDesignatorOrFunction := Qualident [ Constructor |
1208 SimpleDes
1209 [ ActualParameters ] ] |
1210 Constructor
1211
1212 first symbols:lcbratok, identtok
1213
1214 cannot reachend
1215 */
1216
1217 static void SetOrDesignatorOrFunction (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1218
1219 /*
1220 SimpleDes := { SubDesignator }
1221
1222 first symbols:periodtok, lsbratok, uparrowtok
1223
1224 reachend
1225 */
1226
1227 static void SimpleDes (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1228
1229 /*
1230 ActualParameters := '(' [ ExpList ] ')'
1231
1232 first symbols:lparatok
1233
1234 cannot reachend
1235 */
1236
1237 static void ActualParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1238
1239 /*
1240 ExitStatement := 'EXIT'
1241
1242 first symbols:exittok
1243
1244 cannot reachend
1245 */
1246
1247 static void ExitStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1248
1249 /*
1250 ReturnStatement := 'RETURN' [ Expression ]
1251
1252 first symbols:returntok
1253
1254 cannot reachend
1255 */
1256
1257 static void ReturnStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1258
1259 /*
1260 Statement := [ AssignmentOrProcedureCall |
1261 IfStatement | CaseStatement |
1262 WhileStatement |
1263 RepeatStatement |
1264 LoopStatement | ForStatement |
1265 WithStatement | AsmStatement |
1266 ExitStatement | ReturnStatement |
1267 RetryStatement ]
1268
1269 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
1270
1271 reachend
1272 */
1273
1274 static void Statement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1275
1276 /*
1277 RetryStatement := 'RETRY'
1278
1279 first symbols:retrytok
1280
1281 cannot reachend
1282 */
1283
1284 static void RetryStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1285
1286 /*
1287 AssignmentOrProcedureCall := Designator ( ':=' Expression |
1288 ActualParameters |
1289
1290 % epsilon %
1291 )
1292
1293 first symbols:identtok
1294
1295 cannot reachend
1296 */
1297
1298 static void AssignmentOrProcedureCall (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1299
1300 /*
1301 StatementSequence := Statement { ';' Statement }
1302
1303 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1304
1305 reachend
1306 */
1307
1308 static void StatementSequence (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1309
1310 /*
1311 IfStatement := 'IF' Expression 'THEN' StatementSequence
1312 { 'ELSIF' Expression 'THEN' StatementSequence }
1313 [ 'ELSE' StatementSequence ] 'END'
1314
1315 first symbols:iftok
1316
1317 cannot reachend
1318 */
1319
1320 static void IfStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1321
1322 /*
1323 CaseStatement := 'CASE' Expression 'OF' Case { '|'
1324 Case }
1325 CaseEndStatement
1326
1327 first symbols:casetok
1328
1329 cannot reachend
1330 */
1331
1332 static void CaseStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1333
1334 /*
1335 CaseEndStatement := 'END' | 'ELSE' StatementSequence
1336 'END'
1337
1338 first symbols:elsetok, endtok
1339
1340 cannot reachend
1341 */
1342
1343 static void CaseEndStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1344
1345 /*
1346 Case := [ CaseLabelList ':' StatementSequence ]
1347
1348 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1349
1350 reachend
1351 */
1352
1353 static void Case (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1354
1355 /*
1356 CaseLabelList := CaseLabels { ',' CaseLabels }
1357
1358 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1359
1360 cannot reachend
1361 */
1362
1363 static void CaseLabelList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1364
1365 /*
1366 CaseLabels := ConstExpression [ '..' ConstExpression ]
1367
1368 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1369
1370 cannot reachend
1371 */
1372
1373 static void CaseLabels (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1374
1375 /*
1376 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
1377 'END'
1378
1379 first symbols:whiletok
1380
1381 cannot reachend
1382 */
1383
1384 static void WhileStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1385
1386 /*
1387 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
1388 Expression
1389
1390 first symbols:repeattok
1391
1392 cannot reachend
1393 */
1394
1395 static void RepeatStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1396
1397 /*
1398 ForStatement := 'FOR' Ident ':=' Expression 'TO'
1399 Expression [ 'BY' ConstExpression ]
1400 'DO' StatementSequence 'END'
1401
1402 first symbols:fortok
1403
1404 cannot reachend
1405 */
1406
1407 static void ForStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1408
1409 /*
1410 LoopStatement := 'LOOP' StatementSequence 'END'
1411
1412 first symbols:looptok
1413
1414 cannot reachend
1415 */
1416
1417 static void LoopStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1418
1419 /*
1420 WithStatement := 'WITH' Designator 'DO' StatementSequence
1421 'END'
1422
1423 first symbols:withtok
1424
1425 cannot reachend
1426 */
1427
1428 static void WithStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1429
1430 /*
1431 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
1432 Ident
1433
1434 first symbols:proceduretok
1435
1436 cannot reachend
1437 */
1438
1439 static void ProcedureDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1440
1441 /*
1442 ProcedureIdent := Ident
1443 % curproc := lookupSym (curident) %
1444
1445
1446 first symbols:identtok
1447
1448 cannot reachend
1449 */
1450
1451 static void ProcedureIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1452
1453 /*
1454 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
1455 '(' '(' Ident ')' ')' |
1456 '__INLINE__' ]
1457
1458 first symbols:inlinetok, attributetok
1459
1460 reachend
1461 */
1462
1463 static void DefineBuiltinProcedure (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1464
1465 /*
1466 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
1467 ( ProcedureIdent
1468 % enterScope (curproc) %
1469 [ FormalParameters ] AttributeNoReturn )
1470
1471 first symbols:proceduretok
1472
1473 cannot reachend
1474 */
1475
1476 static void ProcedureHeading (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1477
1478 /*
1479 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
1480
1481 first symbols:inlinetok, builtintok
1482
1483 reachend
1484 */
1485
1486 static void Builtin (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1487
1488 /*
1489 DefProcedureHeading := 'PROCEDURE' Builtin ( ProcedureIdent
1490 [ DefFormalParameters ]
1491 AttributeNoReturn )
1492
1493 first symbols:proceduretok
1494
1495 cannot reachend
1496 */
1497
1498 static void DefProcedureHeading (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1499
1500 /*
1501 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
1502 'END'
1503 % leaveScope %
1504
1505
1506 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
1507
1508 cannot reachend
1509 */
1510
1511 static void ProcedureBlock (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1512
1513 /*
1514 Block := { Declaration } InitialBlock FinalBlock
1515 'END'
1516
1517 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
1518
1519 cannot reachend
1520 */
1521
1522 static void Block (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1523
1524 /*
1525 InitialBlock := [ 'BEGIN' InitialBlockBody ]
1526
1527 first symbols:begintok
1528
1529 reachend
1530 */
1531
1532 static void InitialBlock (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1533
1534 /*
1535 FinalBlock := [ 'FINALLY' FinalBlockBody ]
1536
1537 first symbols:finallytok
1538
1539 reachend
1540 */
1541
1542 static void FinalBlock (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1543
1544 /*
1545 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1546
1547 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1548
1549 reachend
1550 */
1551
1552 static void InitialBlockBody (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1553
1554 /*
1555 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1556
1557 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1558
1559 reachend
1560 */
1561
1562 static void FinalBlockBody (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1563
1564 /*
1565 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1566
1567 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1568
1569 reachend
1570 */
1571
1572 static void ProcedureBlockBody (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1573
1574 /*
1575 NormalPart := StatementSequence
1576
1577 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1578
1579 reachend
1580 */
1581
1582 static void NormalPart (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1583
1584 /*
1585 ExceptionalPart := StatementSequence
1586
1587 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1588
1589 reachend
1590 */
1591
1592 static void ExceptionalPart (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1593
1594 /*
1595 Declaration := 'CONST' { ConstantDeclaration ';' } |
1596 'TYPE' { TypeDeclaration ';' } |
1597 'VAR' { VariableDeclaration ';' } |
1598 ProcedureDeclaration ';' |
1599 ModuleDeclaration ';'
1600
1601 first symbols:moduletok, proceduretok, vartok, typetok, consttok
1602
1603 cannot reachend
1604 */
1605
1606 static void Declaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1607
1608 /*
1609 DefFormalParameters := '(' [ DefMultiFPSection ]
1610 ')' FormalReturn
1611
1612 first symbols:lparatok
1613
1614 cannot reachend
1615 */
1616
1617 static void DefFormalParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1618
1619 /*
1620 DefMultiFPSection := DefExtendedFP |
1621 FPSection [ ';' DefMultiFPSection ]
1622
1623 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1624
1625 cannot reachend
1626 */
1627
1628 static void DefMultiFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1629
1630 /*
1631 FormalParameters := '(' [ MultiFPSection ] ')'
1632 FormalReturn
1633
1634 first symbols:lparatok
1635
1636 cannot reachend
1637 */
1638
1639 static void FormalParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1640
1641 /*
1642 AttributeNoReturn := [ '' ]
1643
1644 first symbols:ldirectivetok
1645
1646 reachend
1647 */
1648
1649 static void AttributeNoReturn (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1650
1651 /*
1652 AttributeUnused := [ '' ]
1653
1654 first symbols:ldirectivetok
1655
1656 reachend
1657 */
1658
1659 static void AttributeUnused (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1660
1661 /*
1662 MultiFPSection := ExtendedFP | FPSection [ ';'
1663 MultiFPSection ]
1664
1665 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1666
1667 cannot reachend
1668 */
1669
1670 static void MultiFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1671
1672 /*
1673 FPSection := NonVarFPSection |
1674 VarFPSection
1675
1676 first symbols:vartok, identtok
1677
1678 cannot reachend
1679 */
1680
1681 static void FPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1682
1683 /*
1684 DefExtendedFP := DefOptArg | '...'
1685
1686 first symbols:lsbratok, periodperiodperiodtok
1687
1688 cannot reachend
1689 */
1690
1691 static void DefExtendedFP (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1692
1693 /*
1694 ExtendedFP := OptArg | '...'
1695
1696 first symbols:lsbratok, periodperiodperiodtok
1697
1698 cannot reachend
1699 */
1700
1701 static void ExtendedFP (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1702
1703 /*
1704 VarFPSection := 'VAR' IdentList ':' FormalType [
1705 AttributeUnused ]
1706
1707 first symbols:vartok
1708
1709 cannot reachend
1710 */
1711
1712 static void VarFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1713
1714 /*
1715 NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
1716
1717 first symbols:identtok
1718
1719 cannot reachend
1720 */
1721
1722 static void NonVarFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1723
1724 /*
1725 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
1726 ']'
1727
1728 first symbols:lsbratok
1729
1730 cannot reachend
1731 */
1732
1733 static void OptArg (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1734
1735 /*
1736 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
1737 ']'
1738
1739 first symbols:lsbratok
1740
1741 cannot reachend
1742 */
1743
1744 static void DefOptArg (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1745
1746 /*
1747 FormalType := { 'ARRAY' 'OF' } Qualident
1748
1749 first symbols:identtok, arraytok
1750
1751 cannot reachend
1752 */
1753
1754 static void FormalType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1755
1756 /*
1757 ModuleDeclaration := 'MODULE' Ident [ Priority ]
1758 ';' { Import } [ Export ]
1759 Block Ident
1760
1761 first symbols:moduletok
1762
1763 cannot reachend
1764 */
1765
1766 static void ModuleDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1767
1768 /*
1769 Priority := '[' ConstExpression ']'
1770
1771 first symbols:lsbratok
1772
1773 cannot reachend
1774 */
1775
1776 static void Priority (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1777
1778 /*
1779 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
1780 'UNQUALIFIED' IdentList |
1781 IdentList ) ';'
1782
1783 first symbols:exporttok
1784
1785 cannot reachend
1786 */
1787
1788 static void Export (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1789
1790 /*
1791 FromImport := 'FROM' Ident 'IMPORT' IdentList ';'
1792
1793 first symbols:fromtok
1794
1795 cannot reachend
1796 */
1797
1798 static void FromImport (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1799
1800 /*
1801 ImportModuleList := Ident { ',' Ident }
1802
1803 first symbols:identtok
1804
1805 cannot reachend
1806 */
1807
1808 static void ImportModuleList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1809
1810 /*
1811 WithoutFromImport := 'IMPORT' ImportModuleList ';'
1812
1813 first symbols:importtok
1814
1815 cannot reachend
1816 */
1817
1818 static void WithoutFromImport (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1819
1820 /*
1821 Import := FromImport | WithoutFromImport
1822
1823 first symbols:importtok, fromtok
1824
1825 cannot reachend
1826 */
1827
1828 static void Import (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1829
1830 /*
1831 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
1832 string ]
1833 Ident ';'
1834 % curmodule := lookupDef (curident) %
1835
1836 % enterScope (curmodule) %
1837 { Import } [ Export ] { Definition }
1838 'END' Ident '.'
1839 % checkEndName (curmodule, curident, 'definition module') %
1840
1841 % leaveScope %
1842
1843 % setEnumsComplete (curmodule) %
1844
1845
1846 first symbols:definitiontok
1847
1848 cannot reachend
1849 */
1850
1851 static void DefinitionModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1852
1853 /*
1854 DefQualident := Ident
1855 % typeExp := lookupSym (curident) %
1856 [ '.'
1857 % IF NOT isDef (typeExp)
1858 THEN
1859 ErrorArray ('the first component of this qualident must be a definition module')
1860 END %
1861 Ident
1862 % typeExp := lookupInScope (typeExp, curident) ;
1863 IF typeExp=NIL
1864 THEN
1865 ErrorArray ('identifier not found in definition module')
1866 END %
1867 ]
1868
1869 first symbols:identtok
1870
1871 cannot reachend
1872 */
1873
1874 static void DefQualident (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1875
1876 /*
1877 DefOptSubrange := [ SubrangeType |
1878
1879 % putType (typeDes, typeExp) %
1880 ]
1881
1882 first symbols:lsbratok
1883
1884 reachend
1885 */
1886
1887 static void DefOptSubrange (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1888
1889 /*
1890 DefTypeEquiv := DefQualident DefOptSubrange
1891
1892 first symbols:identtok
1893
1894 cannot reachend
1895 */
1896
1897 static void DefTypeEquiv (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1898
1899 /*
1900 DefEnumIdentList :=
1901 % VAR n, f: node ; %
1902
1903 % n := makeEnum () %
1904 Ident
1905 % f := makeEnumField (n, curident) %
1906 { ',' Ident
1907 % f := makeEnumField (n, curident) %
1908 }
1909 % IF typeDes # NIL THEN putType (typeDes, n) END %
1910
1911
1912 first symbols:identtok
1913
1914 cannot reachend
1915 */
1916
1917 static void DefEnumIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1918
1919 /*
1920 DefEnumeration := '(' DefEnumIdentList ')'
1921
1922 first symbols:lparatok
1923
1924 cannot reachend
1925 */
1926
1927 static void DefEnumeration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1928
1929 /*
1930 DefSimpleType := DefTypeEquiv | DefEnumeration |
1931 SubrangeType
1932
1933 first symbols:lsbratok, lparatok, identtok
1934
1935 cannot reachend
1936 */
1937
1938 static void DefSimpleType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1939
1940 /*
1941 DefType := DefSimpleType | ArrayType |
1942 RecordType | SetType | PointerType |
1943 ProcedureType
1944
1945 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
1946
1947 cannot reachend
1948 */
1949
1950 static void DefType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1951
1952 /*
1953 DefTypeDeclaration := { Ident
1954 % typeDes := lookupSym (curident) %
1955 ( ';' | '=' DefType Alignment
1956 ';' ) }
1957
1958 first symbols:identtok
1959
1960 reachend
1961 */
1962
1963 static void DefTypeDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1964
1965 /*
1966 DefConstantDeclaration := Ident '=' ConstExpression
1967
1968 first symbols:identtok
1969
1970 cannot reachend
1971 */
1972
1973 static void DefConstantDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1974
1975 /*
1976 Definition := 'CONST' { DefConstantDeclaration ';' } |
1977 'TYPE' { DefTypeDeclaration } |
1978 'VAR' { DefVariableDeclaration ';' } |
1979 DefProcedureHeading ';'
1980
1981 first symbols:proceduretok, vartok, typetok, consttok
1982
1983 cannot reachend
1984 */
1985
1986 static void Definition (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1987
1988 /*
1989 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
1990 ')'
1991
1992 first symbols:asmtok
1993
1994 cannot reachend
1995 */
1996
1997 static void AsmStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
1998
1999 /*
2000 AsmOperands := string [ AsmOperandSpec ]
2001
2002 first symbols:stringtok
2003
2004 cannot reachend
2005 */
2006
2007 static void AsmOperands (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
2008
2009 /*
2010 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
2011 ':' TrashList ] ] ]
2012
2013 first symbols:colontok
2014
2015 reachend
2016 */
2017
2018 static void AsmOperandSpec (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
2019
2020 /*
2021 AsmList := [ AsmElement ] { ',' AsmElement }
2022
2023 first symbols:lsbratok, stringtok, commatok
2024
2025 reachend
2026 */
2027
2028 static void AsmList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
2029
2030 /*
2031 NamedOperand := '[' Ident ']'
2032
2033 first symbols:lsbratok
2034
2035 cannot reachend
2036 */
2037
2038 static void NamedOperand (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
2039
2040 /*
2041 AsmOperandName := [ NamedOperand ]
2042
2043 first symbols:lsbratok
2044
2045 reachend
2046 */
2047
2048 static void AsmOperandName (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
2049
2050 /*
2051 AsmElement := AsmOperandName string '(' Expression
2052 ')'
2053
2054 first symbols:stringtok, lsbratok
2055
2056 cannot reachend
2057 */
2058
2059 static void AsmElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
2060
2061 /*
2062 TrashList := [ string ] { ',' string }
2063
2064 first symbols:commatok, stringtok
2065
2066 reachend
2067 */
2068
2069 static void TrashList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2);
2070
2071 static void ErrorString (DynamicStrings_String s)
2072 {
2073 mcError_errorStringAt (s, mcLexBuf_getTokenNo ());
2074 WasNoError = false;
2075 }
2076
2077 static void ErrorArray (const char *a_, unsigned int _a_high)
2078 {
2079 char a[_a_high+1];
2080
2081 /* make a local copy of each unbounded array. */
2082 memcpy (a, a_, _a_high+1);
2083
2084 ErrorString (DynamicStrings_InitString ((const char *) a, _a_high));
2085 }
2086
2087
2088 /*
2089 checkEndName - if module does not have, name, then issue an error containing, desc.
2090 */
2091
2092 static void checkEndName (decl_node module, nameKey_Name name, const char *desc_, unsigned int _desc_high)
2093 {
2094 DynamicStrings_String s;
2095 char desc[_desc_high+1];
2096
2097 /* make a local copy of each unbounded array. */
2098 memcpy (desc, desc_, _desc_high+1);
2099
2100 if ((decl_getSymName (module)) != name)
2101 {
2102 s = DynamicStrings_InitString ((const char *) "inconsistent module name found with this ", 41);
2103 s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) desc, _desc_high)));
2104 ErrorString (s);
2105 }
2106 }
2107
2108
2109 /*
2110 DescribeStop - issues a message explaining what tokens were expected
2111 */
2112
2113 static DynamicStrings_String DescribeStop (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
2114 {
2115 unsigned int n;
2116 DynamicStrings_String str;
2117 DynamicStrings_String message;
2118
2119 n = 0;
2120 message = DynamicStrings_InitString ((const char *) "", 0);
2121 if ((((1 << (mcReserved_stringtok-mcReserved_recordtok)) & (stopset2)) != 0))
2122 {
2123 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "string", 6)));
2124 n += 1;
2125 }
2126 if ((((1 << (mcReserved_realtok-mcReserved_recordtok)) & (stopset2)) != 0))
2127 {
2128 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "real number", 11)));
2129 n += 1;
2130 }
2131 if ((((1 << (mcReserved_identtok-mcReserved_recordtok)) & (stopset2)) != 0))
2132 {
2133 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "identifier", 10)));
2134 n += 1;
2135 }
2136 if ((((1 << (mcReserved_integertok-mcReserved_recordtok)) & (stopset2)) != 0))
2137 {
2138 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "integer number", 14)));
2139 n += 1;
2140 }
2141 if ((((1 << (mcReserved_inlinetok-mcReserved_recordtok)) & (stopset2)) != 0))
2142 {
2143 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__INLINE__", 10)));
2144 n += 1;
2145 }
2146 if ((((1 << (mcReserved_builtintok-mcReserved_recordtok)) & (stopset2)) != 0))
2147 {
2148 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__BUILTIN__", 11)));
2149 n += 1;
2150 }
2151 if ((((1 << (mcReserved_attributetok-mcReserved_recordtok)) & (stopset2)) != 0))
2152 {
2153 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__ATTRIBUTE__", 13)));
2154 n += 1;
2155 }
2156 if ((((1 << (mcReserved_filetok-mcReserved_recordtok)) & (stopset2)) != 0))
2157 {
2158 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__FILE__", 8)));
2159 n += 1;
2160 }
2161 if ((((1 << (mcReserved_linetok-mcReserved_recordtok)) & (stopset2)) != 0))
2162 {
2163 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__LINE__", 8)));
2164 n += 1;
2165 }
2166 if ((((1 << (mcReserved_datetok-mcReserved_recordtok)) & (stopset2)) != 0))
2167 {
2168 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__DATE__", 8)));
2169 n += 1;
2170 }
2171 if ((((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) & (stopset2)) != 0))
2172 {
2173 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "...", 3)));
2174 n += 1;
2175 }
2176 if ((((1 << (mcReserved_volatiletok-mcReserved_recordtok)) & (stopset2)) != 0))
2177 {
2178 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VOLATILE", 8)));
2179 n += 1;
2180 }
2181 if ((((1 << (mcReserved_asmtok-mcReserved_recordtok)) & (stopset2)) != 0))
2182 {
2183 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ASM", 3)));
2184 n += 1;
2185 }
2186 if ((((1 << (mcReserved_withtok-mcReserved_recordtok)) & (stopset2)) != 0))
2187 {
2188 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WITH", 4)));
2189 n += 1;
2190 }
2191 if ((((1 << (mcReserved_whiletok-mcReserved_recordtok)) & (stopset2)) != 0))
2192 {
2193 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WHILE", 5)));
2194 n += 1;
2195 }
2196 if ((((1 << (mcReserved_vartok-mcReserved_recordtok)) & (stopset2)) != 0))
2197 {
2198 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VAR", 3)));
2199 n += 1;
2200 }
2201 if ((((1 << (mcReserved_untiltok-mcReserved_recordtok)) & (stopset2)) != 0))
2202 {
2203 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNTIL", 5)));
2204 n += 1;
2205 }
2206 if ((((1 << (mcReserved_typetok-mcReserved_recordtok)) & (stopset2)) != 0))
2207 {
2208 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TYPE", 4)));
2209 n += 1;
2210 }
2211 if ((((1 << (mcReserved_totok-mcReserved_recordtok)) & (stopset2)) != 0))
2212 {
2213 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TO", 2)));
2214 n += 1;
2215 }
2216 if ((((1 << (mcReserved_thentok-mcReserved_recordtok)) & (stopset2)) != 0))
2217 {
2218 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "THEN", 4)));
2219 n += 1;
2220 }
2221 if ((((1 << (mcReserved_settok-mcReserved_recordtok)) & (stopset2)) != 0))
2222 {
2223 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "SET", 3)));
2224 n += 1;
2225 }
2226 if ((((1 << (mcReserved_returntok-mcReserved_recordtok)) & (stopset2)) != 0))
2227 {
2228 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETURN", 6)));
2229 n += 1;
2230 }
2231 if ((((1 << (mcReserved_retrytok-mcReserved_recordtok)) & (stopset2)) != 0))
2232 {
2233 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETRY", 5)));
2234 n += 1;
2235 }
2236 if ((((1 << (mcReserved_repeattok-mcReserved_recordtok)) & (stopset2)) != 0))
2237 {
2238 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REPEAT", 6)));
2239 n += 1;
2240 }
2241 if ((((1 << (mcReserved_remtok-mcReserved_recordtok)) & (stopset2)) != 0))
2242 {
2243 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REM", 3)));
2244 n += 1;
2245 }
2246 if ((((1 << (mcReserved_recordtok-mcReserved_recordtok)) & (stopset2)) != 0))
2247 {
2248 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RECORD", 6)));
2249 n += 1;
2250 }
2251 if ((((1 << (mcReserved_unqualifiedtok-mcReserved_arraytok)) & (stopset1)) != 0))
2252 {
2253 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNQUALIFIED", 11)));
2254 n += 1;
2255 }
2256 if ((((1 << (mcReserved_qualifiedtok-mcReserved_arraytok)) & (stopset1)) != 0))
2257 {
2258 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "QUALIFIED", 9)));
2259 n += 1;
2260 }
2261 if ((((1 << (mcReserved_proceduretok-mcReserved_arraytok)) & (stopset1)) != 0))
2262 {
2263 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PROCEDURE", 9)));
2264 n += 1;
2265 }
2266 if ((((1 << (mcReserved_pointertok-mcReserved_arraytok)) & (stopset1)) != 0))
2267 {
2268 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "POINTER", 7)));
2269 n += 1;
2270 }
2271 if ((((1 << (mcReserved_packedsettok-mcReserved_arraytok)) & (stopset1)) != 0))
2272 {
2273 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PACKEDSET", 9)));
2274 n += 1;
2275 }
2276 if ((((1 << (mcReserved_ortok-mcReserved_arraytok)) & (stopset1)) != 0))
2277 {
2278 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OR", 2)));
2279 n += 1;
2280 }
2281 if ((((1 << (mcReserved_oftok-mcReserved_arraytok)) & (stopset1)) != 0))
2282 {
2283 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OF", 2)));
2284 n += 1;
2285 }
2286 if ((((1 << (mcReserved_nottok-mcReserved_arraytok)) & (stopset1)) != 0))
2287 {
2288 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "NOT", 3)));
2289 n += 1;
2290 }
2291 if ((((1 << (mcReserved_moduletok-mcReserved_arraytok)) & (stopset1)) != 0))
2292 {
2293 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MODULE", 6)));
2294 n += 1;
2295 }
2296 if ((((1 << (mcReserved_modtok-mcReserved_arraytok)) & (stopset1)) != 0))
2297 {
2298 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MOD", 3)));
2299 n += 1;
2300 }
2301 if ((((1 << (mcReserved_looptok-mcReserved_arraytok)) & (stopset1)) != 0))
2302 {
2303 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "LOOP", 4)));
2304 n += 1;
2305 }
2306 if ((((1 << (mcReserved_intok-mcReserved_arraytok)) & (stopset1)) != 0))
2307 {
2308 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IN", 2)));
2309 n += 1;
2310 }
2311 if ((((1 << (mcReserved_importtok-mcReserved_arraytok)) & (stopset1)) != 0))
2312 {
2313 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPORT", 6)));
2314 n += 1;
2315 }
2316 if ((((1 << (mcReserved_implementationtok-mcReserved_arraytok)) & (stopset1)) != 0))
2317 {
2318 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPLEMENTATION", 14)));
2319 n += 1;
2320 }
2321 if ((((1 << (mcReserved_iftok-mcReserved_arraytok)) & (stopset1)) != 0))
2322 {
2323 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IF", 2)));
2324 n += 1;
2325 }
2326 if ((((1 << (mcReserved_fromtok-mcReserved_arraytok)) & (stopset1)) != 0))
2327 {
2328 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FROM", 4)));
2329 n += 1;
2330 }
2331 if ((((1 << (mcReserved_fortok-mcReserved_arraytok)) & (stopset1)) != 0))
2332 {
2333 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FOR", 3)));
2334 n += 1;
2335 }
2336 if ((((1 << (mcReserved_finallytok-mcReserved_arraytok)) & (stopset1)) != 0))
2337 {
2338 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FINALLY", 7)));
2339 n += 1;
2340 }
2341 if ((((1 << (mcReserved_exporttok-mcReserved_arraytok)) & (stopset1)) != 0))
2342 {
2343 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXPORT", 6)));
2344 n += 1;
2345 }
2346 if ((((1 << (mcReserved_exittok-mcReserved_arraytok)) & (stopset1)) != 0))
2347 {
2348 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXIT", 4)));
2349 n += 1;
2350 }
2351 if ((((1 << (mcReserved_excepttok-mcReserved_arraytok)) & (stopset1)) != 0))
2352 {
2353 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXCEPT", 6)));
2354 n += 1;
2355 }
2356 if ((((1 << (mcReserved_endtok-mcReserved_arraytok)) & (stopset1)) != 0))
2357 {
2358 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "END", 3)));
2359 n += 1;
2360 }
2361 if ((((1 << (mcReserved_elsiftok-mcReserved_arraytok)) & (stopset1)) != 0))
2362 {
2363 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSIF", 5)));
2364 n += 1;
2365 }
2366 if ((((1 << (mcReserved_elsetok-mcReserved_arraytok)) & (stopset1)) != 0))
2367 {
2368 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSE", 4)));
2369 n += 1;
2370 }
2371 if ((((1 << (mcReserved_dotok-mcReserved_arraytok)) & (stopset1)) != 0))
2372 {
2373 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DO", 2)));
2374 n += 1;
2375 }
2376 if ((((1 << (mcReserved_divtok-mcReserved_arraytok)) & (stopset1)) != 0))
2377 {
2378 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DIV", 3)));
2379 n += 1;
2380 }
2381 if ((((1 << (mcReserved_definitiontok-mcReserved_arraytok)) & (stopset1)) != 0))
2382 {
2383 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DEFINITION", 10)));
2384 n += 1;
2385 }
2386 if ((((1 << (mcReserved_consttok-mcReserved_arraytok)) & (stopset1)) != 0))
2387 {
2388 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CONST", 5)));
2389 n += 1;
2390 }
2391 if ((((1 << (mcReserved_casetok-mcReserved_arraytok)) & (stopset1)) != 0))
2392 {
2393 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CASE", 4)));
2394 n += 1;
2395 }
2396 if ((((1 << (mcReserved_bytok-mcReserved_arraytok)) & (stopset1)) != 0))
2397 {
2398 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BY", 2)));
2399 n += 1;
2400 }
2401 if ((((1 << (mcReserved_begintok-mcReserved_arraytok)) & (stopset1)) != 0))
2402 {
2403 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BEGIN", 5)));
2404 n += 1;
2405 }
2406 if ((((1 << (mcReserved_arraytok-mcReserved_arraytok)) & (stopset1)) != 0))
2407 {
2408 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ARRAY", 5)));
2409 n += 1;
2410 }
2411 if ((((1 << (mcReserved_andtok-mcReserved_eoftok)) & (stopset0)) != 0))
2412 {
2413 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "AND", 3)));
2414 n += 1;
2415 }
2416 if ((((1 << (mcReserved_colontok-mcReserved_eoftok)) & (stopset0)) != 0))
2417 {
2418 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":", 1)));
2419 n += 1;
2420 }
2421 if ((((1 << (mcReserved_periodperiodtok-mcReserved_eoftok)) & (stopset0)) != 0))
2422 {
2423 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "..", 2)));
2424 n += 1;
2425 }
2426 if ((((1 << (mcReserved_rdirectivetok-mcReserved_eoftok)) & (stopset0)) != 0))
2427 {
2428 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*>", 2)));
2429 n += 1;
2430 }
2431 if ((((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) & (stopset0)) != 0))
2432 {
2433 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<*", 2)));
2434 n += 1;
2435 }
2436 if ((((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) & (stopset0)) != 0))
2437 {
2438 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">=", 2)));
2439 n += 1;
2440 }
2441 if ((((1 << (mcReserved_lessequaltok-mcReserved_eoftok)) & (stopset0)) != 0))
2442 {
2443 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<=", 2)));
2444 n += 1;
2445 }
2446 if ((((1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) & (stopset0)) != 0))
2447 {
2448 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<>", 2)));
2449 n += 1;
2450 }
2451 if ((((1 << (mcReserved_hashtok-mcReserved_eoftok)) & (stopset0)) != 0))
2452 {
2453 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "#", 1)));
2454 n += 1;
2455 }
2456 if ((((1 << (mcReserved_equaltok-mcReserved_eoftok)) & (stopset0)) != 0))
2457 {
2458 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "=", 1)));
2459 n += 1;
2460 }
2461 if ((((1 << (mcReserved_uparrowtok-mcReserved_eoftok)) & (stopset0)) != 0))
2462 {
2463 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "^", 1)));
2464 n += 1;
2465 }
2466 if ((((1 << (mcReserved_semicolontok-mcReserved_eoftok)) & (stopset0)) != 0))
2467 {
2468 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ";", 1)));
2469 n += 1;
2470 }
2471 if ((((1 << (mcReserved_commatok-mcReserved_eoftok)) & (stopset0)) != 0))
2472 {
2473 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ",", 1)));
2474 n += 1;
2475 }
2476 if ((((1 << (mcReserved_periodtok-mcReserved_eoftok)) & (stopset0)) != 0))
2477 {
2478 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1)));
2479 n += 1;
2480 }
2481 if ((((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) & (stopset0)) != 0))
2482 {
2483 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "&", 1)));
2484 n += 1;
2485 }
2486 if ((((1 << (mcReserved_dividetok-mcReserved_eoftok)) & (stopset0)) != 0))
2487 {
2488 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "/", 1)));
2489 n += 1;
2490 }
2491 if ((((1 << (mcReserved_timestok-mcReserved_eoftok)) & (stopset0)) != 0))
2492 {
2493 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*", 1)));
2494 n += 1;
2495 }
2496 if ((((1 << (mcReserved_minustok-mcReserved_eoftok)) & (stopset0)) != 0))
2497 {
2498 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-", 1)));
2499 n += 1;
2500 }
2501 if ((((1 << (mcReserved_plustok-mcReserved_eoftok)) & (stopset0)) != 0))
2502 {
2503 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "+", 1)));
2504 n += 1;
2505 }
2506 if ((((1 << (mcReserved_doublequotestok-mcReserved_eoftok)) & (stopset0)) != 0))
2507 {
2508 message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '`'), '"'), '\''), ',');
2509 n += 1;
2510 }
2511 if ((((1 << (mcReserved_singlequotetok-mcReserved_eoftok)) & (stopset0)) != 0))
2512 {
2513 message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '"'), '\''), '"'), ',');
2514 n += 1;
2515 }
2516 if ((((1 << (mcReserved_greatertok-mcReserved_eoftok)) & (stopset0)) != 0))
2517 {
2518 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">", 1)));
2519 n += 1;
2520 }
2521 if ((((1 << (mcReserved_lesstok-mcReserved_eoftok)) & (stopset0)) != 0))
2522 {
2523 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<", 1)));
2524 n += 1;
2525 }
2526 if ((((1 << (mcReserved_rparatok-mcReserved_eoftok)) & (stopset0)) != 0))
2527 {
2528 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ")", 1)));
2529 n += 1;
2530 }
2531 if ((((1 << (mcReserved_lparatok-mcReserved_eoftok)) & (stopset0)) != 0))
2532 {
2533 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "(", 1)));
2534 n += 1;
2535 }
2536 if ((((1 << (mcReserved_rcbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2537 {
2538 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "}", 1)));
2539 n += 1;
2540 }
2541 if ((((1 << (mcReserved_lcbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2542 {
2543 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{", 1)));
2544 n += 1;
2545 }
2546 if ((((1 << (mcReserved_rsbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2547 {
2548 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "]", 1)));
2549 n += 1;
2550 }
2551 if ((((1 << (mcReserved_lsbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2552 {
2553 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "[", 1)));
2554 n += 1;
2555 }
2556 if ((((1 << (mcReserved_bartok-mcReserved_eoftok)) & (stopset0)) != 0))
2557 {
2558 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "|", 1)));
2559 n += 1;
2560 }
2561 if ((((1 << (mcReserved_becomestok-mcReserved_eoftok)) & (stopset0)) != 0))
2562 {
2563 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":=", 2)));
2564 n += 1;
2565 }
2566 if ((((1 << (mcReserved_eoftok-mcReserved_eoftok)) & (stopset0)) != 0))
2567 {} /* empty. */
2568 /* eoftok has no token name (needed to generate error messages) */
2569 if (n == 0)
2570 {
2571 str = DynamicStrings_InitString ((const char *) " syntax error", 13);
2572 message = DynamicStrings_KillString (message);
2573 }
2574 else if (n == 1)
2575 {
2576 /* avoid dangling else. */
2577 str = DynamicStrings_ConCat (message, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
2578 }
2579 else
2580 {
2581 /* avoid dangling else. */
2582 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message);
2583 message = DynamicStrings_KillString (message);
2584 }
2585 return str;
2586 /* static analysis guarentees a RETURN statement will be used before here. */
2587 __builtin_unreachable ();
2588 }
2589
2590
2591 /*
2592 DescribeError - issues a message explaining what tokens were expected
2593 */
2594
2595 static void DescribeError (void)
2596 {
2597 DynamicStrings_String str;
2598
2599 str = DynamicStrings_InitString ((const char *) "", 0);
2600 switch (mcLexBuf_currenttoken)
2601 {
2602 case mcReserved_stringtok:
2603 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found string", 26), DynamicStrings_Mark (str));
2604 break;
2605
2606 case mcReserved_realtok:
2607 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found real number", 31), DynamicStrings_Mark (str));
2608 break;
2609
2610 case mcReserved_identtok:
2611 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found identifier", 30), DynamicStrings_Mark (str));
2612 break;
2613
2614 case mcReserved_integertok:
2615 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found integer number", 34), DynamicStrings_Mark (str));
2616 break;
2617
2618 case mcReserved_inlinetok:
2619 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __INLINE__", 30), DynamicStrings_Mark (str));
2620 break;
2621
2622 case mcReserved_builtintok:
2623 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __BUILTIN__", 31), DynamicStrings_Mark (str));
2624 break;
2625
2626 case mcReserved_attributetok:
2627 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __ATTRIBUTE__", 33), DynamicStrings_Mark (str));
2628 break;
2629
2630 case mcReserved_filetok:
2631 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __FILE__", 28), DynamicStrings_Mark (str));
2632 break;
2633
2634 case mcReserved_linetok:
2635 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __LINE__", 28), DynamicStrings_Mark (str));
2636 break;
2637
2638 case mcReserved_datetok:
2639 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __DATE__", 28), DynamicStrings_Mark (str));
2640 break;
2641
2642 case mcReserved_periodperiodperiodtok:
2643 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ...", 23), DynamicStrings_Mark (str));
2644 break;
2645
2646 case mcReserved_volatiletok:
2647 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VOLATILE", 28), DynamicStrings_Mark (str));
2648 break;
2649
2650 case mcReserved_asmtok:
2651 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ASM", 23), DynamicStrings_Mark (str));
2652 break;
2653
2654 case mcReserved_withtok:
2655 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WITH", 24), DynamicStrings_Mark (str));
2656 break;
2657
2658 case mcReserved_whiletok:
2659 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WHILE", 25), DynamicStrings_Mark (str));
2660 break;
2661
2662 case mcReserved_vartok:
2663 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VAR", 23), DynamicStrings_Mark (str));
2664 break;
2665
2666 case mcReserved_untiltok:
2667 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNTIL", 25), DynamicStrings_Mark (str));
2668 break;
2669
2670 case mcReserved_typetok:
2671 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TYPE", 24), DynamicStrings_Mark (str));
2672 break;
2673
2674 case mcReserved_totok:
2675 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TO", 22), DynamicStrings_Mark (str));
2676 break;
2677
2678 case mcReserved_thentok:
2679 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found THEN", 24), DynamicStrings_Mark (str));
2680 break;
2681
2682 case mcReserved_settok:
2683 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found SET", 23), DynamicStrings_Mark (str));
2684 break;
2685
2686 case mcReserved_returntok:
2687 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETURN", 26), DynamicStrings_Mark (str));
2688 break;
2689
2690 case mcReserved_retrytok:
2691 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETRY", 25), DynamicStrings_Mark (str));
2692 break;
2693
2694 case mcReserved_repeattok:
2695 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REPEAT", 26), DynamicStrings_Mark (str));
2696 break;
2697
2698 case mcReserved_remtok:
2699 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REM", 23), DynamicStrings_Mark (str));
2700 break;
2701
2702 case mcReserved_recordtok:
2703 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RECORD", 26), DynamicStrings_Mark (str));
2704 break;
2705
2706 case mcReserved_unqualifiedtok:
2707 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNQUALIFIED", 31), DynamicStrings_Mark (str));
2708 break;
2709
2710 case mcReserved_qualifiedtok:
2711 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found QUALIFIED", 29), DynamicStrings_Mark (str));
2712 break;
2713
2714 case mcReserved_proceduretok:
2715 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PROCEDURE", 29), DynamicStrings_Mark (str));
2716 break;
2717
2718 case mcReserved_pointertok:
2719 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found POINTER", 27), DynamicStrings_Mark (str));
2720 break;
2721
2722 case mcReserved_packedsettok:
2723 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PACKEDSET", 29), DynamicStrings_Mark (str));
2724 break;
2725
2726 case mcReserved_ortok:
2727 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OR", 22), DynamicStrings_Mark (str));
2728 break;
2729
2730 case mcReserved_oftok:
2731 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OF", 22), DynamicStrings_Mark (str));
2732 break;
2733
2734 case mcReserved_nottok:
2735 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found NOT", 23), DynamicStrings_Mark (str));
2736 break;
2737
2738 case mcReserved_moduletok:
2739 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MODULE", 26), DynamicStrings_Mark (str));
2740 break;
2741
2742 case mcReserved_modtok:
2743 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MOD", 23), DynamicStrings_Mark (str));
2744 break;
2745
2746 case mcReserved_looptok:
2747 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found LOOP", 24), DynamicStrings_Mark (str));
2748 break;
2749
2750 case mcReserved_intok:
2751 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IN", 22), DynamicStrings_Mark (str));
2752 break;
2753
2754 case mcReserved_importtok:
2755 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPORT", 26), DynamicStrings_Mark (str));
2756 break;
2757
2758 case mcReserved_implementationtok:
2759 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPLEMENTATION", 34), DynamicStrings_Mark (str));
2760 break;
2761
2762 case mcReserved_iftok:
2763 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IF", 22), DynamicStrings_Mark (str));
2764 break;
2765
2766 case mcReserved_fromtok:
2767 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FROM", 24), DynamicStrings_Mark (str));
2768 break;
2769
2770 case mcReserved_fortok:
2771 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FOR", 23), DynamicStrings_Mark (str));
2772 break;
2773
2774 case mcReserved_finallytok:
2775 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FINALLY", 27), DynamicStrings_Mark (str));
2776 break;
2777
2778 case mcReserved_exporttok:
2779 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXPORT", 26), DynamicStrings_Mark (str));
2780 break;
2781
2782 case mcReserved_exittok:
2783 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXIT", 24), DynamicStrings_Mark (str));
2784 break;
2785
2786 case mcReserved_excepttok:
2787 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXCEPT", 26), DynamicStrings_Mark (str));
2788 break;
2789
2790 case mcReserved_endtok:
2791 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found END", 23), DynamicStrings_Mark (str));
2792 break;
2793
2794 case mcReserved_elsiftok:
2795 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSIF", 25), DynamicStrings_Mark (str));
2796 break;
2797
2798 case mcReserved_elsetok:
2799 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSE", 24), DynamicStrings_Mark (str));
2800 break;
2801
2802 case mcReserved_dotok:
2803 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DO", 22), DynamicStrings_Mark (str));
2804 break;
2805
2806 case mcReserved_divtok:
2807 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DIV", 23), DynamicStrings_Mark (str));
2808 break;
2809
2810 case mcReserved_definitiontok:
2811 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DEFINITION", 30), DynamicStrings_Mark (str));
2812 break;
2813
2814 case mcReserved_consttok:
2815 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CONST", 25), DynamicStrings_Mark (str));
2816 break;
2817
2818 case mcReserved_casetok:
2819 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CASE", 24), DynamicStrings_Mark (str));
2820 break;
2821
2822 case mcReserved_bytok:
2823 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BY", 22), DynamicStrings_Mark (str));
2824 break;
2825
2826 case mcReserved_begintok:
2827 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BEGIN", 25), DynamicStrings_Mark (str));
2828 break;
2829
2830 case mcReserved_arraytok:
2831 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ARRAY", 25), DynamicStrings_Mark (str));
2832 break;
2833
2834 case mcReserved_andtok:
2835 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found AND", 23), DynamicStrings_Mark (str));
2836 break;
2837
2838 case mcReserved_colontok:
2839 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :", 21), DynamicStrings_Mark (str));
2840 break;
2841
2842 case mcReserved_periodperiodtok:
2843 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ..", 22), DynamicStrings_Mark (str));
2844 break;
2845
2846 case mcReserved_rdirectivetok:
2847 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *>", 22), DynamicStrings_Mark (str));
2848 break;
2849
2850 case mcReserved_ldirectivetok:
2851 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <*", 22), DynamicStrings_Mark (str));
2852 break;
2853
2854 case mcReserved_greaterequaltok:
2855 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >=", 22), DynamicStrings_Mark (str));
2856 break;
2857
2858 case mcReserved_lessequaltok:
2859 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <=", 22), DynamicStrings_Mark (str));
2860 break;
2861
2862 case mcReserved_lessgreatertok:
2863 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <>", 22), DynamicStrings_Mark (str));
2864 break;
2865
2866 case mcReserved_hashtok:
2867 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found #", 21), DynamicStrings_Mark (str));
2868 break;
2869
2870 case mcReserved_equaltok:
2871 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found =", 21), DynamicStrings_Mark (str));
2872 break;
2873
2874 case mcReserved_uparrowtok:
2875 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ^", 21), DynamicStrings_Mark (str));
2876 break;
2877
2878 case mcReserved_semicolontok:
2879 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ;", 21), DynamicStrings_Mark (str));
2880 break;
2881
2882 case mcReserved_commatok:
2883 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ,", 21), DynamicStrings_Mark (str));
2884 break;
2885
2886 case mcReserved_periodtok:
2887 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found .", 21), DynamicStrings_Mark (str));
2888 break;
2889
2890 case mcReserved_ambersandtok:
2891 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found &", 21), DynamicStrings_Mark (str));
2892 break;
2893
2894 case mcReserved_dividetok:
2895 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found /", 21), DynamicStrings_Mark (str));
2896 break;
2897
2898 case mcReserved_timestok:
2899 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *", 21), DynamicStrings_Mark (str));
2900 break;
2901
2902 case mcReserved_minustok:
2903 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found -", 21), DynamicStrings_Mark (str));
2904 break;
2905
2906 case mcReserved_plustok:
2907 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found +", 21), DynamicStrings_Mark (str));
2908 break;
2909
2910 case mcReserved_doublequotestok:
2911 str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str));
2912 break;
2913
2914 case mcReserved_singlequotetok:
2915 str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str));
2916 break;
2917
2918 case mcReserved_greatertok:
2919 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >", 21), DynamicStrings_Mark (str));
2920 break;
2921
2922 case mcReserved_lesstok:
2923 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <", 21), DynamicStrings_Mark (str));
2924 break;
2925
2926 case mcReserved_rparatok:
2927 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found )", 21), DynamicStrings_Mark (str));
2928 break;
2929
2930 case mcReserved_lparatok:
2931 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found (", 21), DynamicStrings_Mark (str));
2932 break;
2933
2934 case mcReserved_rcbratok:
2935 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found }", 21), DynamicStrings_Mark (str));
2936 break;
2937
2938 case mcReserved_lcbratok:
2939 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {", 21), DynamicStrings_Mark (str));
2940 break;
2941
2942 case mcReserved_rsbratok:
2943 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ]", 21), DynamicStrings_Mark (str));
2944 break;
2945
2946 case mcReserved_lsbratok:
2947 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found [", 21), DynamicStrings_Mark (str));
2948 break;
2949
2950 case mcReserved_bartok:
2951 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found |", 21), DynamicStrings_Mark (str));
2952 break;
2953
2954 case mcReserved_becomestok:
2955 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :=", 22), DynamicStrings_Mark (str));
2956 break;
2957
2958 case mcReserved_eoftok:
2959 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ", 20), DynamicStrings_Mark (str));
2960 break;
2961
2962
2963 default:
2964 break;
2965 }
2966 ErrorString (str);
2967 }
2968
2969
2970 /*
2971 SyntaxError - after a syntax error we skip all tokens up until we reach
2972 a stop symbol.
2973 */
2974
2975 static void SyntaxError (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
2976 {
2977 DescribeError ();
2978 if (Debugging)
2979 {
2980 mcPrintf_printf0 ((const char *) "\\nskipping token *** ", 21);
2981 }
2982 /*
2983 yes the ORD(currenttoken) looks ugly, but it is *much* safer than
2984 using currenttoken<sometok as a change to the ordering of the
2985 token declarations below would cause this to break. Using ORD() we are
2986 immune from such changes
2987 */
2988 while (! (((( ((unsigned int) (mcLexBuf_currenttoken)) < 32) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (mcLexBuf_currenttoken)) >= 32) && ( ((unsigned int) (mcLexBuf_currenttoken)) < 64)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (mcLexBuf_currenttoken)) >= 64) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & (stopset2)) != 0)))))
2989 {
2990 mcLexBuf_getToken ();
2991 }
2992 if (Debugging)
2993 {
2994 mcPrintf_printf0 ((const char *) " ***\\n", 6);
2995 }
2996 }
2997
2998
2999 /*
3000 SyntaxCheck -
3001 */
3002
3003 static void SyntaxCheck (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3004 {
3005 /* and again (see above re: ORD)
3006 */
3007 if (! (((( ((unsigned int) (mcLexBuf_currenttoken)) < 32) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (mcLexBuf_currenttoken)) >= 32) && ( ((unsigned int) (mcLexBuf_currenttoken)) < 64)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (mcLexBuf_currenttoken)) >= 64) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & (stopset2)) != 0)))))
3008 {
3009 SyntaxError (stopset0, stopset1, stopset2);
3010 }
3011 }
3012
3013
3014 /*
3015 WarnMissingToken - generates a warning message about a missing token, t.
3016 */
3017
3018 static void WarnMissingToken (mcReserved_toktype t)
3019 {
3020 mcp2_SetOfStop0 s0;
3021 mcp2_SetOfStop1 s1;
3022 mcp2_SetOfStop2 s2;
3023 DynamicStrings_String str;
3024
3025 s0 = (mcp2_SetOfStop0) 0;
3026 s1 = (mcp2_SetOfStop1) 0;
3027 s2 = (mcp2_SetOfStop2) 0;
3028 if ( ((unsigned int) (t)) < 32)
3029 {
3030 s0 = (mcp2_SetOfStop0) ((1 << (t-mcReserved_eoftok)));
3031 }
3032 else if ( ((unsigned int) (t)) < 64)
3033 {
3034 /* avoid dangling else. */
3035 s1 = (mcp2_SetOfStop1) ((1 << (t-mcReserved_arraytok)));
3036 }
3037 else
3038 {
3039 /* avoid dangling else. */
3040 s2 = (mcp2_SetOfStop2) ((1 << (t-mcReserved_recordtok)));
3041 }
3042 str = DescribeStop (s0, s1, s2);
3043 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error,", 13), DynamicStrings_Mark (str));
3044 mcError_errorStringAt (str, mcLexBuf_getTokenNo ());
3045 }
3046
3047
3048 /*
3049 MissingToken - generates a warning message about a missing token, t.
3050 */
3051
3052 static void MissingToken (mcReserved_toktype t)
3053 {
3054 WarnMissingToken (t);
3055 if ((((t != mcReserved_identtok) && (t != mcReserved_integertok)) && (t != mcReserved_realtok)) && (t != mcReserved_stringtok))
3056 {
3057 if (Debugging)
3058 {
3059 mcPrintf_printf0 ((const char *) "inserting token\\n", 17);
3060 }
3061 mcLexBuf_insertToken (t);
3062 }
3063 }
3064
3065
3066 /*
3067 CheckAndInsert -
3068 */
3069
3070 static bool CheckAndInsert (mcReserved_toktype t, mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3071 {
3072 if (((( ((unsigned int) (t)) < 32) && ((((1 << (t-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (t)) >= 32) && ( ((unsigned int) (t)) < 64)) && ((((1 << (t-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (t)) >= 64) && ((((1 << (t-mcReserved_recordtok)) & (stopset2)) != 0))))
3073 {
3074 WarnMissingToken (t);
3075 mcLexBuf_insertTokenAndRewind (t);
3076 return true;
3077 }
3078 else
3079 {
3080 return false;
3081 }
3082 /* static analysis guarentees a RETURN statement will be used before here. */
3083 __builtin_unreachable ();
3084 }
3085
3086
3087 /*
3088 InStopSet
3089 */
3090
3091 static bool InStopSet (mcReserved_toktype t, mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3092 {
3093 if (((( ((unsigned int) (t)) < 32) && ((((1 << (t-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (t)) >= 32) && ( ((unsigned int) (t)) < 64)) && ((((1 << (t-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (t)) >= 64) && ((((1 << (t-mcReserved_recordtok)) & (stopset2)) != 0))))
3094 {
3095 return true;
3096 }
3097 else
3098 {
3099 return false;
3100 }
3101 /* static analysis guarentees a RETURN statement will be used before here. */
3102 __builtin_unreachable ();
3103 }
3104
3105
3106 /*
3107 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
3108 If it is not then it will insert a token providing the token
3109 is one of ; ] ) } . OF END ,
3110
3111 if the stopset contains <identtok> then we do not insert a token
3112 */
3113
3114 static void PeepToken (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3115 {
3116 /* and again (see above re: ORD)
3117 */
3118 if ((! (((( ((unsigned int) (mcLexBuf_currenttoken)) < 32) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (mcLexBuf_currenttoken)) >= 32) && ( ((unsigned int) (mcLexBuf_currenttoken)) < 64)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (mcLexBuf_currenttoken)) >= 64) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & (stopset2)) != 0))))) && (! (InStopSet (mcReserved_identtok, stopset0, stopset1, stopset2))))
3119 {
3120 /* SyntaxCheck would fail since currentoken is not part of the stopset
3121 we check to see whether any of currenttoken might be a commonly omitted token */
3122 if ((((((((CheckAndInsert (mcReserved_semicolontok, stopset0, stopset1, stopset2)) || (CheckAndInsert (mcReserved_rsbratok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_rparatok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_rcbratok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_periodtok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_oftok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_endtok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_commatok, stopset0, stopset1, stopset2)))
3123 {} /* empty. */
3124 }
3125 }
3126
3127
3128 /*
3129 Expect -
3130 */
3131
3132 static void Expect (mcReserved_toktype t, mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3133 {
3134 if (mcLexBuf_currenttoken == t)
3135 {
3136 /* avoid dangling else. */
3137 mcLexBuf_getToken ();
3138 if (Pass1)
3139 {
3140 PeepToken (stopset0, stopset1, stopset2);
3141 }
3142 }
3143 else
3144 {
3145 MissingToken (t);
3146 }
3147 SyntaxCheck (stopset0, stopset1, stopset2);
3148 }
3149
3150
3151 /*
3152 Ident - error checking varient of Ident
3153 */
3154
3155 static void Ident (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3156 {
3157 curident = nameKey_makekey (mcLexBuf_currentstring);
3158 Expect (mcReserved_identtok, stopset0, stopset1, stopset2);
3159 }
3160
3161
3162 /*
3163 string -
3164 */
3165
3166 static void string (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3167 {
3168 /*
3169 PushTF(makekey(currentstring), stringtok) ;
3170 BuildString
3171 */
3172 Expect (mcReserved_stringtok, stopset0, stopset1, stopset2);
3173 }
3174
3175
3176 /*
3177 Integer -
3178 */
3179
3180 static void Integer (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3181 {
3182 /*
3183 PushTF(makekey(currentstring), integertok) ;
3184 BuildNumber
3185 */
3186 Expect (mcReserved_integertok, stopset0, stopset1, stopset2);
3187 }
3188
3189
3190 /*
3191 Real -
3192 */
3193
3194 static void Real (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3195 {
3196 /*
3197 PushTF(makekey(currentstring), realtok) ;
3198 BuildNumber
3199 */
3200 Expect (mcReserved_realtok, stopset0, stopset1, stopset2);
3201 }
3202
3203
3204 /*
3205 registerImport - looks up module, ident, and adds it to the
3206 current module import list.
3207 */
3208
3209 static void registerImport (nameKey_Name ident, bool scoped)
3210 {
3211 decl_node n;
3212
3213 n = decl_lookupDef (ident);
3214 decl_addImportedModule (decl_getCurrentModule (), n, scoped);
3215 }
3216
3217
3218 /*
3219 FileUnit := DefinitionModule |
3220 ImplementationOrProgramModule
3221
3222 first symbols:implementationtok, moduletok, definitiontok
3223
3224 cannot reachend
3225 */
3226
3227 static void FileUnit (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3228 {
3229 if (mcLexBuf_currenttoken == mcReserved_definitiontok)
3230 {
3231 DefinitionModule (stopset0, stopset1, stopset2);
3232 }
3233 else if (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_implementationtok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))))) != 0)))
3234 {
3235 /* avoid dangling else. */
3236 ImplementationOrProgramModule (stopset0, stopset1, stopset2);
3237 }
3238 else
3239 {
3240 /* avoid dangling else. */
3241 ErrorArray ((const char *) "expecting one of: IMPLEMENTATION MODULE DEFINITION", 50);
3242 }
3243 }
3244
3245
3246 /*
3247 ProgramModule := 'MODULE' Ident
3248 % curmodule := lookupModule (curident) %
3249
3250 % enterScope (curmodule) %
3251 [ Priority ] ';' { Import } Block
3252 Ident
3253 % checkEndName (curmodule, curident, 'program module') %
3254
3255 % leaveScope %
3256
3257 % setEnumsComplete (curmodule) %
3258 '.'
3259
3260 first symbols:moduletok
3261
3262 cannot reachend
3263 */
3264
3265 static void ProgramModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3266 {
3267 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3268 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
3269 curmodule = decl_lookupModule (curident);
3270 decl_enterScope (curmodule);
3271 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
3272 {
3273 Priority (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
3274 }
3275 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
3276 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
3277 {
3278 Import (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
3279 }
3280 /* while */
3281 Block (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3282 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3283 checkEndName (curmodule, curident, (const char *) "program module", 14);
3284 decl_leaveScope ();
3285 decl_setEnumsComplete (curmodule);
3286 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
3287 }
3288
3289
3290 /*
3291 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
3292 Ident
3293 % curmodule := lookupImp (curident) %
3294
3295 % enterScope (lookupDef (curident)) %
3296
3297 % enterScope (curmodule) %
3298 [ Priority ] ';' { Import }
3299 Block Ident
3300 % checkEndName (curmodule, curident, 'implementation module') %
3301
3302 % leaveScope ; leaveScope %
3303
3304 % setEnumsComplete (curmodule) %
3305 '.'
3306
3307 first symbols:implementationtok
3308
3309 cannot reachend
3310 */
3311
3312 static void ImplementationModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3313 {
3314 Expect (mcReserved_implementationtok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2);
3315 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3316 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
3317 curmodule = decl_lookupImp (curident);
3318 decl_enterScope (decl_lookupDef (curident));
3319 decl_enterScope (curmodule);
3320 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
3321 {
3322 Priority (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
3323 }
3324 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
3325 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
3326 {
3327 Import (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
3328 }
3329 /* while */
3330 Block (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3331 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3332 checkEndName (curmodule, curident, (const char *) "implementation module", 21);
3333 decl_leaveScope ();
3334 decl_leaveScope ();
3335 decl_setEnumsComplete (curmodule);
3336 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
3337 }
3338
3339
3340 /*
3341 ImplementationOrProgramModule := ImplementationModule |
3342 ProgramModule
3343
3344 first symbols:moduletok, implementationtok
3345
3346 cannot reachend
3347 */
3348
3349 static void ImplementationOrProgramModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3350 {
3351 if (mcLexBuf_currenttoken == mcReserved_implementationtok)
3352 {
3353 ImplementationModule (stopset0, stopset1, stopset2);
3354 }
3355 else if (mcLexBuf_currenttoken == mcReserved_moduletok)
3356 {
3357 /* avoid dangling else. */
3358 ProgramModule (stopset0, stopset1, stopset2);
3359 }
3360 else
3361 {
3362 /* avoid dangling else. */
3363 ErrorArray ((const char *) "expecting one of: MODULE IMPLEMENTATION", 39);
3364 }
3365 }
3366
3367
3368 /*
3369 Number := Integer | Real
3370
3371 first symbols:realtok, integertok
3372
3373 cannot reachend
3374 */
3375
3376 static void Number (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3377 {
3378 if (mcLexBuf_currenttoken == mcReserved_integertok)
3379 {
3380 Integer (stopset0, stopset1, stopset2);
3381 }
3382 else if (mcLexBuf_currenttoken == mcReserved_realtok)
3383 {
3384 /* avoid dangling else. */
3385 Real (stopset0, stopset1, stopset2);
3386 }
3387 else
3388 {
3389 /* avoid dangling else. */
3390 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
3391 }
3392 }
3393
3394
3395 /*
3396 Qualident := Ident { '.' Ident }
3397
3398 first symbols:identtok
3399
3400 cannot reachend
3401 */
3402
3403 static void Qualident (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3404 {
3405 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3406 while (mcLexBuf_currenttoken == mcReserved_periodtok)
3407 {
3408 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3409 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3410 }
3411 /* while */
3412 }
3413
3414
3415 /*
3416 ConstantDeclaration := Ident '=' ConstExpression
3417
3418 first symbols:identtok
3419
3420 cannot reachend
3421 */
3422
3423 static void ConstantDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3424 {
3425 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
3426 Expect (mcReserved_equaltok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3427 ConstExpression (stopset0, stopset1, stopset2);
3428 }
3429
3430
3431 /*
3432 ConstExpression := SimpleConstExpr [ Relation SimpleConstExpr ]
3433
3434 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3435
3436 cannot reachend
3437 */
3438
3439 static void ConstExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3440 {
3441 SimpleConstExpr (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
3442 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_greaterequaltok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_intok))
3443 {
3444 Relation (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3445 SimpleConstExpr (stopset0, stopset1, stopset2);
3446 }
3447 }
3448
3449
3450 /*
3451 Relation := '=' | '#' | '<>' | '<' | '<=' |
3452 '>' | '>=' | 'IN'
3453
3454 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
3455
3456 cannot reachend
3457 */
3458
3459 static void Relation (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3460 {
3461 if (mcLexBuf_currenttoken == mcReserved_equaltok)
3462 {
3463 Expect (mcReserved_equaltok, stopset0, stopset1, stopset2);
3464 }
3465 else if (mcLexBuf_currenttoken == mcReserved_hashtok)
3466 {
3467 /* avoid dangling else. */
3468 Expect (mcReserved_hashtok, stopset0, stopset1, stopset2);
3469 }
3470 else if (mcLexBuf_currenttoken == mcReserved_lessgreatertok)
3471 {
3472 /* avoid dangling else. */
3473 Expect (mcReserved_lessgreatertok, stopset0, stopset1, stopset2);
3474 }
3475 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
3476 {
3477 /* avoid dangling else. */
3478 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2);
3479 }
3480 else if (mcLexBuf_currenttoken == mcReserved_lessequaltok)
3481 {
3482 /* avoid dangling else. */
3483 Expect (mcReserved_lessequaltok, stopset0, stopset1, stopset2);
3484 }
3485 else if (mcLexBuf_currenttoken == mcReserved_greatertok)
3486 {
3487 /* avoid dangling else. */
3488 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
3489 }
3490 else if (mcLexBuf_currenttoken == mcReserved_greaterequaltok)
3491 {
3492 /* avoid dangling else. */
3493 Expect (mcReserved_greaterequaltok, stopset0, stopset1, stopset2);
3494 }
3495 else if (mcLexBuf_currenttoken == mcReserved_intok)
3496 {
3497 /* avoid dangling else. */
3498 Expect (mcReserved_intok, stopset0, stopset1, stopset2);
3499 }
3500 else
3501 {
3502 /* avoid dangling else. */
3503 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
3504 }
3505 }
3506
3507
3508 /*
3509 SimpleConstExpr := UnaryOrConstTerm { AddOperator
3510 ConstTerm }
3511
3512 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3513
3514 cannot reachend
3515 */
3516
3517 static void SimpleConstExpr (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3518 {
3519 UnaryOrConstTerm (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
3520 while (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_ortok))
3521 {
3522 AddOperator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3523 ConstTerm (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
3524 }
3525 /* while */
3526 }
3527
3528
3529 /*
3530 UnaryOrConstTerm := '+' ConstTerm |
3531 '-' ConstTerm |
3532 ConstTerm
3533
3534 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3535
3536 cannot reachend
3537 */
3538
3539 static void UnaryOrConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3540 {
3541 if (mcLexBuf_currenttoken == mcReserved_plustok)
3542 {
3543 Expect (mcReserved_plustok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3544 ConstTerm (stopset0, stopset1, stopset2);
3545 }
3546 else if (mcLexBuf_currenttoken == mcReserved_minustok)
3547 {
3548 /* avoid dangling else. */
3549 Expect (mcReserved_minustok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3550 ConstTerm (stopset0, stopset1, stopset2);
3551 }
3552 else if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
3553 {
3554 /* avoid dangling else. */
3555 ConstTerm (stopset0, stopset1, stopset2);
3556 }
3557 else
3558 {
3559 /* avoid dangling else. */
3560 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ identifier { string - +", 88);
3561 }
3562 }
3563
3564
3565 /*
3566 AddOperator := '+' | '-' | 'OR'
3567
3568 first symbols:ortok, minustok, plustok
3569
3570 cannot reachend
3571 */
3572
3573 static void AddOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3574 {
3575 if (mcLexBuf_currenttoken == mcReserved_plustok)
3576 {
3577 Expect (mcReserved_plustok, stopset0, stopset1, stopset2);
3578 }
3579 else if (mcLexBuf_currenttoken == mcReserved_minustok)
3580 {
3581 /* avoid dangling else. */
3582 Expect (mcReserved_minustok, stopset0, stopset1, stopset2);
3583 }
3584 else if (mcLexBuf_currenttoken == mcReserved_ortok)
3585 {
3586 /* avoid dangling else. */
3587 Expect (mcReserved_ortok, stopset0, stopset1, stopset2);
3588 }
3589 else
3590 {
3591 /* avoid dangling else. */
3592 ErrorArray ((const char *) "expecting one of: OR - +", 24);
3593 }
3594 }
3595
3596
3597 /*
3598 ConstTerm := ConstFactor { MulOperator ConstFactor }
3599
3600 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
3601
3602 cannot reachend
3603 */
3604
3605 static void ConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3606 {
3607 ConstFactor (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_timestok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_modtok-mcReserved_arraytok)) | (1 << (mcReserved_divtok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
3608 while ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))))) != 0))) || (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))))) != 0)))) || (mcLexBuf_currenttoken == mcReserved_remtok))
3609 {
3610 MulOperator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3611 ConstFactor (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
3612 }
3613 /* while */
3614 }
3615
3616
3617 /*
3618 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
3619 'REM' | 'AND' | '&'
3620
3621 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
3622
3623 cannot reachend
3624 */
3625
3626 static void MulOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3627 {
3628 if (mcLexBuf_currenttoken == mcReserved_timestok)
3629 {
3630 Expect (mcReserved_timestok, stopset0, stopset1, stopset2);
3631 }
3632 else if (mcLexBuf_currenttoken == mcReserved_dividetok)
3633 {
3634 /* avoid dangling else. */
3635 Expect (mcReserved_dividetok, stopset0, stopset1, stopset2);
3636 }
3637 else if (mcLexBuf_currenttoken == mcReserved_divtok)
3638 {
3639 /* avoid dangling else. */
3640 Expect (mcReserved_divtok, stopset0, stopset1, stopset2);
3641 }
3642 else if (mcLexBuf_currenttoken == mcReserved_modtok)
3643 {
3644 /* avoid dangling else. */
3645 Expect (mcReserved_modtok, stopset0, stopset1, stopset2);
3646 }
3647 else if (mcLexBuf_currenttoken == mcReserved_remtok)
3648 {
3649 /* avoid dangling else. */
3650 Expect (mcReserved_remtok, stopset0, stopset1, stopset2);
3651 }
3652 else if (mcLexBuf_currenttoken == mcReserved_andtok)
3653 {
3654 /* avoid dangling else. */
3655 Expect (mcReserved_andtok, stopset0, stopset1, stopset2);
3656 }
3657 else if (mcLexBuf_currenttoken == mcReserved_ambersandtok)
3658 {
3659 /* avoid dangling else. */
3660 Expect (mcReserved_ambersandtok, stopset0, stopset1, stopset2);
3661 }
3662 else
3663 {
3664 /* avoid dangling else. */
3665 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
3666 }
3667 }
3668
3669
3670 /*
3671 ConstFactor := Number | ConstString |
3672 ConstSetOrQualidentOrFunction |
3673 '(' ConstExpression ')' |
3674 'NOT' ConstFactor |
3675 ConstAttribute
3676
3677 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
3678
3679 cannot reachend
3680 */
3681
3682 static void ConstFactor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3683 {
3684 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok))))) != 0)))
3685 {
3686 Number (stopset0, stopset1, stopset2);
3687 }
3688 else if (mcLexBuf_currenttoken == mcReserved_stringtok)
3689 {
3690 /* avoid dangling else. */
3691 ConstString (stopset0, stopset1, stopset2);
3692 }
3693 else if ((mcLexBuf_currenttoken == mcReserved_lcbratok) || (mcLexBuf_currenttoken == mcReserved_identtok))
3694 {
3695 /* avoid dangling else. */
3696 ConstSetOrQualidentOrFunction (stopset0, stopset1, stopset2);
3697 }
3698 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
3699 {
3700 /* avoid dangling else. */
3701 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3702 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
3703 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
3704 }
3705 else if (mcLexBuf_currenttoken == mcReserved_nottok)
3706 {
3707 /* avoid dangling else. */
3708 Expect (mcReserved_nottok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3709 ConstFactor (stopset0, stopset1, stopset2);
3710 }
3711 else if (mcLexBuf_currenttoken == mcReserved_attributetok)
3712 {
3713 /* avoid dangling else. */
3714 ConstAttribute (stopset0, stopset1, stopset2);
3715 }
3716 else
3717 {
3718 /* avoid dangling else. */
3719 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( identifier { string integer number real number", 84);
3720 }
3721 }
3722
3723
3724 /*
3725 ConstString := string
3726
3727 first symbols:stringtok
3728
3729 cannot reachend
3730 */
3731
3732 static void ConstString (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3733 {
3734 string (stopset0, stopset1, stopset2);
3735 }
3736
3737
3738 /*
3739 ComponentElement := ConstExpression [ '..' ConstExpression ]
3740
3741 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3742
3743 cannot reachend
3744 */
3745
3746 static void ComponentElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3747 {
3748 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
3749 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
3750 {
3751 Expect (mcReserved_periodperiodtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3752 ConstExpression (stopset0, stopset1, stopset2);
3753 }
3754 }
3755
3756
3757 /*
3758 ComponentValue := ComponentElement [ 'BY' ConstExpression ]
3759
3760 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3761
3762 cannot reachend
3763 */
3764
3765 static void ComponentValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3766 {
3767 ComponentElement (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok))), stopset2);
3768 if (mcLexBuf_currenttoken == mcReserved_bytok)
3769 {
3770 Expect (mcReserved_bytok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3771 ConstExpression (stopset0, stopset1, stopset2);
3772 }
3773 }
3774
3775
3776 /*
3777 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
3778
3779 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3780
3781 cannot reachend
3782 */
3783
3784 static void ArraySetRecordValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3785 {
3786 ComponentValue (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
3787 while (mcLexBuf_currenttoken == mcReserved_commatok)
3788 {
3789 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3790 ComponentValue (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
3791 }
3792 /* while */
3793 }
3794
3795
3796 /*
3797 Constructor := '{' [ ArraySetRecordValue ] '}'
3798
3799 first symbols:lcbratok
3800
3801 cannot reachend
3802 */
3803
3804 static void Constructor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3805 {
3806 Expect (mcReserved_lcbratok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3807 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
3808 {
3809 ArraySetRecordValue (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok))), stopset1, stopset2);
3810 }
3811 Expect (mcReserved_rcbratok, stopset0, stopset1, stopset2);
3812 }
3813
3814
3815 /*
3816 ConstSetOrQualidentOrFunction := Qualident [ Constructor |
3817 ConstActualParameters ] |
3818 Constructor
3819
3820 first symbols:lcbratok, identtok
3821
3822 cannot reachend
3823 */
3824
3825 static void ConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3826 {
3827 if (mcLexBuf_currenttoken == mcReserved_identtok)
3828 {
3829 /* avoid dangling else. */
3830 Qualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lcbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
3831 if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0)))
3832 {
3833 /* avoid gcc warning by using compound statement even if not strictly necessary. */
3834 /* seen optional [ | ] expression */
3835 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
3836 {
3837 Constructor (stopset0, stopset1, stopset2);
3838 }
3839 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
3840 {
3841 /* avoid dangling else. */
3842 ConstActualParameters (stopset0, stopset1, stopset2);
3843 }
3844 else
3845 {
3846 /* avoid dangling else. */
3847 ErrorArray ((const char *) "expecting one of: ( {", 21);
3848 }
3849 }
3850 /* end of optional [ | ] expression */
3851 }
3852 else if (mcLexBuf_currenttoken == mcReserved_lcbratok)
3853 {
3854 /* avoid dangling else. */
3855 Constructor (stopset0, stopset1, stopset2);
3856 }
3857 else
3858 {
3859 /* avoid dangling else. */
3860 ErrorArray ((const char *) "expecting one of: { identifier", 30);
3861 }
3862 }
3863
3864
3865 /*
3866 ConstActualParameters := ActualParameters
3867
3868 first symbols:lparatok
3869
3870 cannot reachend
3871 */
3872
3873 static void ConstActualParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3874 {
3875 ActualParameters (stopset0, stopset1, stopset2);
3876 }
3877
3878
3879 /*
3880 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
3881 '(' '(' ConstAttributeExpression
3882 ')' ')'
3883
3884 first symbols:attributetok
3885
3886 cannot reachend
3887 */
3888
3889 static void ConstAttribute (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3890 {
3891 Expect (mcReserved_attributetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_builtintok-mcReserved_recordtok))));
3892 Expect (mcReserved_builtintok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
3893 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
3894 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lesstok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3895 ConstAttributeExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
3896 Expect (mcReserved_rparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
3897 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
3898 }
3899
3900
3901 /*
3902 ConstAttributeExpression := Ident | '<' Qualident
3903 ',' Ident '>'
3904
3905 first symbols:lesstok, identtok
3906
3907 cannot reachend
3908 */
3909
3910 static void ConstAttributeExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3911 {
3912 if (mcLexBuf_currenttoken == mcReserved_identtok)
3913 {
3914 Ident (stopset0, stopset1, stopset2);
3915 }
3916 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
3917 {
3918 /* avoid dangling else. */
3919 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3920 Qualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
3921 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3922 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_greatertok-mcReserved_eoftok))), stopset1, stopset2);
3923 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
3924 }
3925 else
3926 {
3927 /* avoid dangling else. */
3928 ErrorArray ((const char *) "expecting one of: < identifier", 30);
3929 }
3930 }
3931
3932
3933 /*
3934 ByteAlignment := ''
3935
3936 first symbols:ldirectivetok
3937
3938 cannot reachend
3939 */
3940
3941 static void ByteAlignment (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3942 {
3943 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3944 AttributeExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
3945 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
3946 }
3947
3948
3949 /*
3950 OptAlignmentExpression := [ AlignmentExpression ]
3951
3952 first symbols:lparatok
3953
3954 reachend
3955 */
3956
3957 static void OptAlignmentExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3958 {
3959 if (mcLexBuf_currenttoken == mcReserved_lparatok)
3960 {
3961 AlignmentExpression (stopset0, stopset1, stopset2);
3962 }
3963 }
3964
3965
3966 /*
3967 AlignmentExpression := '(' ConstExpression ')'
3968
3969 first symbols:lparatok
3970
3971 cannot reachend
3972 */
3973
3974 static void AlignmentExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3975 {
3976 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3977 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
3978 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
3979 }
3980
3981
3982 /*
3983 Alignment := [ ByteAlignment ]
3984
3985 first symbols:ldirectivetok
3986
3987 reachend
3988 */
3989
3990 static void Alignment (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
3991 {
3992 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
3993 {
3994 ByteAlignment (stopset0, stopset1, stopset2);
3995 }
3996 }
3997
3998
3999 /*
4000 TypeDeclaration := Ident
4001 % typeDes := lookupSym (curident) %
4002 '=' Type Alignment
4003
4004 first symbols:identtok
4005
4006 cannot reachend
4007 */
4008
4009 static void TypeDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4010 {
4011 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
4012 typeDes = decl_lookupSym (curident);
4013 Expect (mcReserved_equaltok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
4014 Type (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4015 Alignment (stopset0, stopset1, stopset2);
4016 }
4017
4018
4019 /*
4020 Type := ( DefSimpleType | ArrayType |
4021 RecordType | SetType | PointerType |
4022 ProcedureType )
4023
4024 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
4025
4026 cannot reachend
4027 */
4028
4029 static void Type (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4030 {
4031 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_identtok))
4032 {
4033 DefSimpleType (stopset0, stopset1, stopset2);
4034 }
4035 else if (mcLexBuf_currenttoken == mcReserved_arraytok)
4036 {
4037 /* avoid dangling else. */
4038 ArrayType (stopset0, stopset1, stopset2);
4039 }
4040 else if (mcLexBuf_currenttoken == mcReserved_recordtok)
4041 {
4042 /* avoid dangling else. */
4043 RecordType (stopset0, stopset1, stopset2);
4044 }
4045 else if ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_settok))
4046 {
4047 /* avoid dangling else. */
4048 SetType (stopset0, stopset1, stopset2);
4049 }
4050 else if (mcLexBuf_currenttoken == mcReserved_pointertok)
4051 {
4052 /* avoid dangling else. */
4053 PointerType (stopset0, stopset1, stopset2);
4054 }
4055 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
4056 {
4057 /* avoid dangling else. */
4058 ProcedureType (stopset0, stopset1, stopset2);
4059 }
4060 else
4061 {
4062 /* avoid dangling else. */
4063 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
4064 }
4065 }
4066
4067
4068 /*
4069 SimpleType := Qualident [ SubrangeType ] |
4070 Enumeration | SubrangeType
4071
4072 first symbols:lsbratok, lparatok, identtok
4073
4074 cannot reachend
4075 */
4076
4077 static void SimpleType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4078 {
4079 if (mcLexBuf_currenttoken == mcReserved_identtok)
4080 {
4081 /* avoid dangling else. */
4082 Qualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
4083 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
4084 {
4085 SubrangeType (stopset0, stopset1, stopset2);
4086 }
4087 }
4088 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
4089 {
4090 /* avoid dangling else. */
4091 Enumeration (stopset0, stopset1, stopset2);
4092 }
4093 else if (mcLexBuf_currenttoken == mcReserved_lsbratok)
4094 {
4095 /* avoid dangling else. */
4096 SubrangeType (stopset0, stopset1, stopset2);
4097 }
4098 else
4099 {
4100 /* avoid dangling else. */
4101 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
4102 }
4103 }
4104
4105
4106 /*
4107 EnumIdentList :=
4108 % VAR n, f: node ; %
4109
4110 % n := makeEnum () %
4111 Ident
4112 % f := makeEnumField (n, curident) %
4113 { ',' Ident
4114 % f := makeEnumField (n, curident) %
4115 }
4116
4117 first symbols:identtok
4118
4119 cannot reachend
4120 */
4121
4122 static void EnumIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4123 {
4124 decl_node n;
4125 decl_node f;
4126
4127 n = decl_makeEnum ();
4128 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4129 f = decl_makeEnumField (n, curident);
4130 while (mcLexBuf_currenttoken == mcReserved_commatok)
4131 {
4132 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4133 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4134 f = decl_makeEnumField (n, curident);
4135 }
4136 /* while */
4137 }
4138
4139
4140 /*
4141 Enumeration := '(' ( EnumIdentList ) ')'
4142
4143 first symbols:lparatok
4144
4145 cannot reachend
4146 */
4147
4148 static void Enumeration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4149 {
4150 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4151 EnumIdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4152 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4153 }
4154
4155
4156 /*
4157 IdentList := Ident { ',' Ident }
4158
4159 first symbols:identtok
4160
4161 cannot reachend
4162 */
4163
4164 static void IdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4165 {
4166 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4167 while (mcLexBuf_currenttoken == mcReserved_commatok)
4168 {
4169 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4170 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4171 }
4172 /* while */
4173 }
4174
4175
4176 /*
4177 SubrangeType := '[' ConstExpression '..' ConstExpression
4178 ']'
4179
4180 first symbols:lsbratok
4181
4182 cannot reachend
4183 */
4184
4185 static void SubrangeType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4186 {
4187 Expect (mcReserved_lsbratok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4188 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
4189 Expect (mcReserved_periodperiodtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4190 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
4191 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
4192 }
4193
4194
4195 /*
4196 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
4197 'OF' Type
4198
4199 first symbols:arraytok
4200
4201 cannot reachend
4202 */
4203
4204 static void ArrayType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4205 {
4206 Expect (mcReserved_arraytok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4207 SimpleType (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4208 while (mcLexBuf_currenttoken == mcReserved_commatok)
4209 {
4210 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4211 SimpleType (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4212 }
4213 /* while */
4214 Expect (mcReserved_oftok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
4215 Type (stopset0, stopset1, stopset2);
4216 }
4217
4218
4219 /*
4220 RecordType := 'RECORD' [ DefaultRecordAttributes ]
4221 FieldListSequence 'END'
4222
4223 first symbols:recordtok
4224
4225 cannot reachend
4226 */
4227
4228 static void RecordType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4229 {
4230 Expect (mcReserved_recordtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4231 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4232 {
4233 DefaultRecordAttributes (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4234 }
4235 FieldListSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
4236 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
4237 }
4238
4239
4240 /*
4241 DefaultRecordAttributes := ''
4242
4243 first symbols:ldirectivetok
4244
4245 cannot reachend
4246 */
4247
4248 static void DefaultRecordAttributes (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4249 {
4250 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4251 AttributeExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4252 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4253 }
4254
4255
4256 /*
4257 RecordFieldPragma := [ '' ]
4258
4259 first symbols:ldirectivetok
4260
4261 reachend
4262 */
4263
4264 static void RecordFieldPragma (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4265 {
4266 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4267 {
4268 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4269 FieldPragmaExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4270 while (mcLexBuf_currenttoken == mcReserved_commatok)
4271 {
4272 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4273 FieldPragmaExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4274 }
4275 /* while */
4276 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4277 }
4278 }
4279
4280
4281 /*
4282 FieldPragmaExpression := Ident PragmaConstExpression
4283
4284 first symbols:identtok
4285
4286 cannot reachend
4287 */
4288
4289 static void FieldPragmaExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4290 {
4291 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4292 PragmaConstExpression (stopset0, stopset1, stopset2);
4293 }
4294
4295
4296 /*
4297 PragmaConstExpression := [ '(' ConstExpression ')' ]
4298
4299 first symbols:lparatok
4300
4301 reachend
4302 */
4303
4304 static void PragmaConstExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4305 {
4306 if (mcLexBuf_currenttoken == mcReserved_lparatok)
4307 {
4308 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4309 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4310 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4311 }
4312 }
4313
4314
4315 /*
4316 AttributeExpression := Ident '(' ConstExpression
4317 ')'
4318
4319 first symbols:identtok
4320
4321 cannot reachend
4322 */
4323
4324 static void AttributeExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4325 {
4326 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4327 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4328 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4329 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4330 }
4331
4332
4333 /*
4334 FieldListSequence := FieldListStatement { ';' FieldListStatement }
4335
4336 first symbols:casetok, identtok, semicolontok
4337
4338 reachend
4339 */
4340
4341 static void FieldListSequence (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4342 {
4343 FieldListStatement (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
4344 while (mcLexBuf_currenttoken == mcReserved_semicolontok)
4345 {
4346 Expect (mcReserved_semicolontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4347 FieldListStatement (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
4348 }
4349 /* while */
4350 }
4351
4352
4353 /*
4354 FieldListStatement := [ FieldList ]
4355
4356 first symbols:identtok, casetok
4357
4358 reachend
4359 */
4360
4361 static void FieldListStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4362 {
4363 if ((mcLexBuf_currenttoken == mcReserved_casetok) || (mcLexBuf_currenttoken == mcReserved_identtok))
4364 {
4365 FieldList (stopset0, stopset1, stopset2);
4366 }
4367 }
4368
4369
4370 /*
4371 FieldList := IdentList ':' Type RecordFieldPragma |
4372 'CASE' CaseTag 'OF' Varient { '|' Varient }
4373 [ 'ELSE' FieldListSequence ] 'END'
4374
4375 first symbols:casetok, identtok
4376
4377 cannot reachend
4378 */
4379
4380 static void FieldList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4381 {
4382 if (mcLexBuf_currenttoken == mcReserved_identtok)
4383 {
4384 IdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
4385 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
4386 Type (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4387 RecordFieldPragma (stopset0, stopset1, stopset2);
4388 }
4389 else if (mcLexBuf_currenttoken == mcReserved_casetok)
4390 {
4391 /* avoid dangling else. */
4392 Expect (mcReserved_casetok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4393 CaseTag (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4394 Expect (mcReserved_oftok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4395 Varient (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
4396 while (mcLexBuf_currenttoken == mcReserved_bartok)
4397 {
4398 Expect (mcReserved_bartok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4399 Varient (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok))), stopset2);
4400 }
4401 /* while */
4402 if (mcLexBuf_currenttoken == mcReserved_elsetok)
4403 {
4404 Expect (mcReserved_elsetok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4405 FieldListSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
4406 }
4407 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
4408 }
4409 else
4410 {
4411 /* avoid dangling else. */
4412 ErrorArray ((const char *) "expecting one of: CASE identifier", 33);
4413 }
4414 }
4415
4416
4417 /*
4418 TagIdent := [ Ident ]
4419
4420 first symbols:identtok
4421
4422 reachend
4423 */
4424
4425 static void TagIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4426 {
4427 if (mcLexBuf_currenttoken == mcReserved_identtok)
4428 {
4429 Ident (stopset0, stopset1, stopset2);
4430 }
4431 }
4432
4433
4434 /*
4435 CaseTag := TagIdent [ ':' Qualident ]
4436
4437 first symbols:colontok, identtok
4438
4439 reachend
4440 */
4441
4442 static void CaseTag (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4443 {
4444 TagIdent (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
4445 if (mcLexBuf_currenttoken == mcReserved_colontok)
4446 {
4447 Expect (mcReserved_colontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4448 Qualident (stopset0, stopset1, stopset2);
4449 }
4450 }
4451
4452
4453 /*
4454 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
4455
4456 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4457
4458 reachend
4459 */
4460
4461 static void Varient (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4462 {
4463 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))))) != 0))))
4464 {
4465 VarientCaseLabelList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
4466 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4467 FieldListSequence (stopset0, stopset1, stopset2);
4468 }
4469 }
4470
4471
4472 /*
4473 VarientCaseLabelList := VarientCaseLabels { ','
4474 VarientCaseLabels }
4475
4476 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4477
4478 cannot reachend
4479 */
4480
4481 static void VarientCaseLabelList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4482 {
4483 VarientCaseLabels (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4484 while (mcLexBuf_currenttoken == mcReserved_commatok)
4485 {
4486 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4487 VarientCaseLabels (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4488 }
4489 /* while */
4490 }
4491
4492
4493 /*
4494 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
4495
4496 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4497
4498 cannot reachend
4499 */
4500
4501 static void VarientCaseLabels (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4502 {
4503 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
4504 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
4505 {
4506 Expect (mcReserved_periodperiodtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4507 ConstExpression (stopset0, stopset1, stopset2);
4508 }
4509 }
4510
4511
4512 /*
4513 SilentConstExpression := SilentSimpleConstExpr [
4514 SilentRelation SilentSimpleConstExpr ]
4515
4516 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4517
4518 cannot reachend
4519 */
4520
4521 static void SilentConstExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4522 {
4523 SilentSimpleConstExpr (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
4524 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_greaterequaltok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_intok))
4525 {
4526 SilentRelation (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4527 SilentSimpleConstExpr (stopset0, stopset1, stopset2);
4528 }
4529 }
4530
4531
4532 /*
4533 SilentRelation := '=' | '#' | '<>' | '<' |
4534 '<=' | '>' | '>=' | 'IN'
4535
4536 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
4537
4538 cannot reachend
4539 */
4540
4541 static void SilentRelation (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4542 {
4543 if (mcLexBuf_currenttoken == mcReserved_equaltok)
4544 {
4545 Expect (mcReserved_equaltok, stopset0, stopset1, stopset2);
4546 }
4547 else if (mcLexBuf_currenttoken == mcReserved_hashtok)
4548 {
4549 /* avoid dangling else. */
4550 Expect (mcReserved_hashtok, stopset0, stopset1, stopset2);
4551 }
4552 else if (mcLexBuf_currenttoken == mcReserved_lessgreatertok)
4553 {
4554 /* avoid dangling else. */
4555 Expect (mcReserved_lessgreatertok, stopset0, stopset1, stopset2);
4556 }
4557 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
4558 {
4559 /* avoid dangling else. */
4560 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2);
4561 }
4562 else if (mcLexBuf_currenttoken == mcReserved_lessequaltok)
4563 {
4564 /* avoid dangling else. */
4565 Expect (mcReserved_lessequaltok, stopset0, stopset1, stopset2);
4566 }
4567 else if (mcLexBuf_currenttoken == mcReserved_greatertok)
4568 {
4569 /* avoid dangling else. */
4570 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
4571 }
4572 else if (mcLexBuf_currenttoken == mcReserved_greaterequaltok)
4573 {
4574 /* avoid dangling else. */
4575 Expect (mcReserved_greaterequaltok, stopset0, stopset1, stopset2);
4576 }
4577 else if (mcLexBuf_currenttoken == mcReserved_intok)
4578 {
4579 /* avoid dangling else. */
4580 Expect (mcReserved_intok, stopset0, stopset1, stopset2);
4581 }
4582 else
4583 {
4584 /* avoid dangling else. */
4585 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
4586 }
4587 }
4588
4589
4590 /*
4591 SilentSimpleConstExpr := SilentUnaryOrConstTerm
4592 { SilentAddOperator SilentConstTerm }
4593
4594 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4595
4596 cannot reachend
4597 */
4598
4599 static void SilentSimpleConstExpr (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4600 {
4601 SilentUnaryOrConstTerm (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
4602 while (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_ortok))
4603 {
4604 SilentAddOperator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4605 SilentConstTerm (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
4606 }
4607 /* while */
4608 }
4609
4610
4611 /*
4612 SilentUnaryOrConstTerm := '+' SilentConstTerm |
4613 '-' SilentConstTerm |
4614 SilentConstTerm
4615
4616 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4617
4618 cannot reachend
4619 */
4620
4621 static void SilentUnaryOrConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4622 {
4623 if (mcLexBuf_currenttoken == mcReserved_plustok)
4624 {
4625 Expect (mcReserved_plustok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4626 SilentConstTerm (stopset0, stopset1, stopset2);
4627 }
4628 else if (mcLexBuf_currenttoken == mcReserved_minustok)
4629 {
4630 /* avoid dangling else. */
4631 Expect (mcReserved_minustok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4632 SilentConstTerm (stopset0, stopset1, stopset2);
4633 }
4634 else if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
4635 {
4636 /* avoid dangling else. */
4637 SilentConstTerm (stopset0, stopset1, stopset2);
4638 }
4639 else
4640 {
4641 /* avoid dangling else. */
4642 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ { identifier string - +", 88);
4643 }
4644 }
4645
4646
4647 /*
4648 SilentAddOperator := '+' | '-' | 'OR'
4649
4650 first symbols:ortok, minustok, plustok
4651
4652 cannot reachend
4653 */
4654
4655 static void SilentAddOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4656 {
4657 if (mcLexBuf_currenttoken == mcReserved_plustok)
4658 {
4659 Expect (mcReserved_plustok, stopset0, stopset1, stopset2);
4660 }
4661 else if (mcLexBuf_currenttoken == mcReserved_minustok)
4662 {
4663 /* avoid dangling else. */
4664 Expect (mcReserved_minustok, stopset0, stopset1, stopset2);
4665 }
4666 else if (mcLexBuf_currenttoken == mcReserved_ortok)
4667 {
4668 /* avoid dangling else. */
4669 Expect (mcReserved_ortok, stopset0, stopset1, stopset2);
4670 }
4671 else
4672 {
4673 /* avoid dangling else. */
4674 ErrorArray ((const char *) "expecting one of: OR - +", 24);
4675 }
4676 }
4677
4678
4679 /*
4680 SilentConstTerm := SilentConstFactor { SilentMulOperator
4681 SilentConstFactor }
4682
4683 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
4684
4685 cannot reachend
4686 */
4687
4688 static void SilentConstTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4689 {
4690 SilentConstFactor (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_timestok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_modtok-mcReserved_arraytok)) | (1 << (mcReserved_divtok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
4691 while ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))))) != 0))) || (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))))) != 0)))) || (mcLexBuf_currenttoken == mcReserved_remtok))
4692 {
4693 SilentMulOperator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4694 SilentConstFactor (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
4695 }
4696 /* while */
4697 }
4698
4699
4700 /*
4701 SilentMulOperator := '*' | '/' | 'DIV' |
4702 'MOD' | 'REM' | 'AND' |
4703 '&'
4704
4705 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
4706
4707 cannot reachend
4708 */
4709
4710 static void SilentMulOperator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4711 {
4712 if (mcLexBuf_currenttoken == mcReserved_timestok)
4713 {
4714 Expect (mcReserved_timestok, stopset0, stopset1, stopset2);
4715 }
4716 else if (mcLexBuf_currenttoken == mcReserved_dividetok)
4717 {
4718 /* avoid dangling else. */
4719 Expect (mcReserved_dividetok, stopset0, stopset1, stopset2);
4720 }
4721 else if (mcLexBuf_currenttoken == mcReserved_divtok)
4722 {
4723 /* avoid dangling else. */
4724 Expect (mcReserved_divtok, stopset0, stopset1, stopset2);
4725 }
4726 else if (mcLexBuf_currenttoken == mcReserved_modtok)
4727 {
4728 /* avoid dangling else. */
4729 Expect (mcReserved_modtok, stopset0, stopset1, stopset2);
4730 }
4731 else if (mcLexBuf_currenttoken == mcReserved_remtok)
4732 {
4733 /* avoid dangling else. */
4734 Expect (mcReserved_remtok, stopset0, stopset1, stopset2);
4735 }
4736 else if (mcLexBuf_currenttoken == mcReserved_andtok)
4737 {
4738 /* avoid dangling else. */
4739 Expect (mcReserved_andtok, stopset0, stopset1, stopset2);
4740 }
4741 else if (mcLexBuf_currenttoken == mcReserved_ambersandtok)
4742 {
4743 /* avoid dangling else. */
4744 Expect (mcReserved_ambersandtok, stopset0, stopset1, stopset2);
4745 }
4746 else
4747 {
4748 /* avoid dangling else. */
4749 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
4750 }
4751 }
4752
4753
4754 /*
4755 SilentConstFactor := Number | SilentConstString |
4756 SilentConstSetOrQualidentOrFunction |
4757 '(' SilentConstExpression ')' |
4758 'NOT' SilentConstFactor |
4759 SilentConstAttribute
4760
4761 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok
4762
4763 cannot reachend
4764 */
4765
4766 static void SilentConstFactor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4767 {
4768 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok))))) != 0)))
4769 {
4770 Number (stopset0, stopset1, stopset2);
4771 }
4772 else if (mcLexBuf_currenttoken == mcReserved_stringtok)
4773 {
4774 /* avoid dangling else. */
4775 SilentConstString (stopset0, stopset1, stopset2);
4776 }
4777 else if ((mcLexBuf_currenttoken == mcReserved_lcbratok) || (mcLexBuf_currenttoken == mcReserved_identtok))
4778 {
4779 /* avoid dangling else. */
4780 SilentConstSetOrQualidentOrFunction (stopset0, stopset1, stopset2);
4781 }
4782 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
4783 {
4784 /* avoid dangling else. */
4785 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4786 SilentConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4787 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4788 }
4789 else if (mcLexBuf_currenttoken == mcReserved_nottok)
4790 {
4791 /* avoid dangling else. */
4792 Expect (mcReserved_nottok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4793 SilentConstFactor (stopset0, stopset1, stopset2);
4794 }
4795 else if (mcLexBuf_currenttoken == mcReserved_attributetok)
4796 {
4797 /* avoid dangling else. */
4798 SilentConstAttribute (stopset0, stopset1, stopset2);
4799 }
4800 else
4801 {
4802 /* avoid dangling else. */
4803 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( { identifier string integer number real number", 84);
4804 }
4805 }
4806
4807
4808 /*
4809 SilentConstString := string
4810
4811 first symbols:stringtok
4812
4813 cannot reachend
4814 */
4815
4816 static void SilentConstString (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4817 {
4818 string (stopset0, stopset1, stopset2);
4819 }
4820
4821
4822 /*
4823 SilentConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4824 '(' '(' SilentConstAttributeExpression
4825 ')' ')'
4826
4827 first symbols:attributetok
4828
4829 cannot reachend
4830 */
4831
4832 static void SilentConstAttribute (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4833 {
4834 Expect (mcReserved_attributetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_builtintok-mcReserved_recordtok))));
4835 Expect (mcReserved_builtintok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4836 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4837 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lesstok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4838 SilentConstAttributeExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4839 Expect (mcReserved_rparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4840 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4841 }
4842
4843
4844 /*
4845 SilentConstAttributeExpression := Ident |
4846 '<' Ident ','
4847 SilentConstString
4848 '>'
4849
4850 first symbols:lesstok, identtok
4851
4852 cannot reachend
4853 */
4854
4855 static void SilentConstAttributeExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4856 {
4857 if (mcLexBuf_currenttoken == mcReserved_identtok)
4858 {
4859 Ident (stopset0, stopset1, stopset2);
4860 }
4861 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
4862 {
4863 /* avoid dangling else. */
4864 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4865 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4866 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
4867 SilentConstString (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_greatertok-mcReserved_eoftok))), stopset1, stopset2);
4868 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
4869 }
4870 else
4871 {
4872 /* avoid dangling else. */
4873 ErrorArray ((const char *) "expecting one of: < identifier", 30);
4874 }
4875 }
4876
4877
4878 /*
4879 SilentComponentElement := SilentConstExpression
4880 [ '..' SilentConstExpression ]
4881
4882 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4883
4884 cannot reachend
4885 */
4886
4887 static void SilentComponentElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4888 {
4889 SilentConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
4890 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
4891 {
4892 Expect (mcReserved_periodperiodtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4893 SilentConstExpression (stopset0, stopset1, stopset2);
4894 }
4895 }
4896
4897
4898 /*
4899 SilentComponentValue := SilentComponentElement [
4900 'BY' SilentConstExpression ]
4901
4902 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4903
4904 cannot reachend
4905 */
4906
4907 static void SilentComponentValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4908 {
4909 SilentComponentElement (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok))), stopset2);
4910 if (mcLexBuf_currenttoken == mcReserved_bytok)
4911 {
4912 Expect (mcReserved_bytok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4913 SilentConstExpression (stopset0, stopset1, stopset2);
4914 }
4915 }
4916
4917
4918 /*
4919 SilentArraySetRecordValue := SilentComponentValue
4920 { ',' SilentComponentValue }
4921
4922 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4923
4924 cannot reachend
4925 */
4926
4927 static void SilentArraySetRecordValue (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4928 {
4929 SilentComponentValue (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4930 while (mcLexBuf_currenttoken == mcReserved_commatok)
4931 {
4932 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4933 SilentComponentValue (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4934 }
4935 /* while */
4936 }
4937
4938
4939 /*
4940 SilentConstructor := '{' [ SilentArraySetRecordValue ]
4941 '}'
4942
4943 first symbols:lcbratok
4944
4945 cannot reachend
4946 */
4947
4948 static void SilentConstructor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4949 {
4950 Expect (mcReserved_lcbratok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4951 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
4952 {
4953 SilentArraySetRecordValue (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok))), stopset1, stopset2);
4954 }
4955 Expect (mcReserved_rcbratok, stopset0, stopset1, stopset2);
4956 }
4957
4958
4959 /*
4960 SilentConstSetOrQualidentOrFunction := SilentConstructor |
4961 Qualident
4962 [ SilentConstructor |
4963 SilentActualParameters ]
4964
4965 first symbols:identtok, lcbratok
4966
4967 cannot reachend
4968 */
4969
4970 static void SilentConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
4971 {
4972 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
4973 {
4974 SilentConstructor (stopset0, stopset1, stopset2);
4975 }
4976 else if (mcLexBuf_currenttoken == mcReserved_identtok)
4977 {
4978 /* avoid dangling else. */
4979 Qualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lcbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4980 if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0)))
4981 {
4982 /* avoid gcc warning by using compound statement even if not strictly necessary. */
4983 /* seen optional [ | ] expression */
4984 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
4985 {
4986 SilentConstructor (stopset0, stopset1, stopset2);
4987 }
4988 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
4989 {
4990 /* avoid dangling else. */
4991 SilentActualParameters (stopset0, stopset1, stopset2);
4992 }
4993 else
4994 {
4995 /* avoid dangling else. */
4996 ErrorArray ((const char *) "expecting one of: ( {", 21);
4997 }
4998 }
4999 /* end of optional [ | ] expression */
5000 }
5001 else
5002 {
5003 /* avoid dangling else. */
5004 ErrorArray ((const char *) "expecting one of: identifier {", 30);
5005 }
5006 }
5007
5008
5009 /*
5010 SilentElement := SilentConstExpression [ '..' SilentConstExpression ]
5011
5012 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5013
5014 cannot reachend
5015 */
5016
5017 static void SilentElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5018 {
5019 SilentConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
5020 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
5021 {
5022 Expect (mcReserved_periodperiodtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
5023 SilentConstExpression (stopset0, stopset1, stopset2);
5024 }
5025 }
5026
5027
5028 /*
5029 SilentActualParameters := '(' [ SilentExpList ]
5030 ')'
5031
5032 first symbols:lparatok
5033
5034 cannot reachend
5035 */
5036
5037 static void SilentActualParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5038 {
5039 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
5040 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
5041 {
5042 SilentExpList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5043 }
5044 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5045 }
5046
5047
5048 /*
5049 SilentExpList := SilentConstExpression { ',' SilentConstExpression }
5050
5051 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5052
5053 cannot reachend
5054 */
5055
5056 static void SilentExpList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5057 {
5058 SilentConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5059 while (mcLexBuf_currenttoken == mcReserved_commatok)
5060 {
5061 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
5062 SilentConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5063 }
5064 /* while */
5065 }
5066
5067
5068 /*
5069 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
5070
5071 first symbols:oftok, packedsettok, settok
5072
5073 cannot reachend
5074 */
5075
5076 static void SetType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5077 {
5078 if (mcLexBuf_currenttoken == mcReserved_settok)
5079 {
5080 Expect (mcReserved_settok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5081 }
5082 else if (mcLexBuf_currenttoken == mcReserved_packedsettok)
5083 {
5084 /* avoid dangling else. */
5085 Expect (mcReserved_packedsettok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5086 }
5087 else
5088 {
5089 /* avoid dangling else. */
5090 ErrorArray ((const char *) "expecting one of: PACKEDSET SET", 31);
5091 }
5092 Expect (mcReserved_oftok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5093 SimpleType (stopset0, stopset1, stopset2);
5094 }
5095
5096
5097 /*
5098 PointerType := 'POINTER' 'TO' Type
5099
5100 first symbols:pointertok
5101
5102 cannot reachend
5103 */
5104
5105 static void PointerType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5106 {
5107 Expect (mcReserved_pointertok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_totok-mcReserved_recordtok))));
5108 Expect (mcReserved_totok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5109 Type (stopset0, stopset1, stopset2);
5110 }
5111
5112
5113 /*
5114 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
5115
5116 first symbols:proceduretok
5117
5118 cannot reachend
5119 */
5120
5121 static void ProcedureType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5122 {
5123 Expect (mcReserved_proceduretok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5124 if (mcLexBuf_currenttoken == mcReserved_lparatok)
5125 {
5126 FormalTypeList (stopset0, stopset1, stopset2);
5127 }
5128 }
5129
5130
5131 /*
5132 FormalTypeList := '(' ( ')' FormalReturn |
5133 ProcedureParameters ')'
5134 FormalReturn )
5135
5136 first symbols:lparatok
5137
5138 cannot reachend
5139 */
5140
5141 static void FormalTypeList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5142 {
5143 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5144 if (mcLexBuf_currenttoken == mcReserved_rparatok)
5145 {
5146 Expect (mcReserved_rparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5147 FormalReturn (stopset0, stopset1, stopset2);
5148 }
5149 else if ((mcLexBuf_currenttoken == mcReserved_arraytok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5150 {
5151 /* avoid dangling else. */
5152 ProcedureParameters (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5153 Expect (mcReserved_rparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5154 FormalReturn (stopset0, stopset1, stopset2);
5155 }
5156 else
5157 {
5158 /* avoid dangling else. */
5159 ErrorArray ((const char *) "expecting one of: VAR ... ARRAY identifier )", 44);
5160 }
5161 }
5162
5163
5164 /*
5165 FormalReturn := [ ':' OptReturnType ]
5166
5167 first symbols:colontok
5168
5169 reachend
5170 */
5171
5172 static void FormalReturn (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5173 {
5174 if (mcLexBuf_currenttoken == mcReserved_colontok)
5175 {
5176 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5177 OptReturnType (stopset0, stopset1, stopset2);
5178 }
5179 }
5180
5181
5182 /*
5183 OptReturnType := '[' Qualident ']' |
5184 Qualident
5185
5186 first symbols:identtok, lsbratok
5187
5188 cannot reachend
5189 */
5190
5191 static void OptReturnType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5192 {
5193 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5194 {
5195 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5196 Qualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5197 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5198 }
5199 else if (mcLexBuf_currenttoken == mcReserved_identtok)
5200 {
5201 /* avoid dangling else. */
5202 Qualident (stopset0, stopset1, stopset2);
5203 }
5204 else
5205 {
5206 /* avoid dangling else. */
5207 ErrorArray ((const char *) "expecting one of: identifier [", 30);
5208 }
5209 }
5210
5211
5212 /*
5213 ProcedureParameters := ProcedureParameter { ','
5214 ProcedureParameter }
5215
5216 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
5217
5218 cannot reachend
5219 */
5220
5221 static void ProcedureParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5222 {
5223 ProcedureParameter (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5224 while (mcLexBuf_currenttoken == mcReserved_commatok)
5225 {
5226 Expect (mcReserved_commatok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5227 ProcedureParameter (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5228 }
5229 /* while */
5230 }
5231
5232
5233 /*
5234 ProcedureParameter := '...' | 'VAR' FormalType |
5235 FormalType
5236
5237 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
5238
5239 cannot reachend
5240 */
5241
5242 static void ProcedureParameter (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5243 {
5244 if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
5245 {
5246 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
5247 }
5248 else if (mcLexBuf_currenttoken == mcReserved_vartok)
5249 {
5250 /* avoid dangling else. */
5251 Expect (mcReserved_vartok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5252 FormalType (stopset0, stopset1, stopset2);
5253 }
5254 else if ((mcLexBuf_currenttoken == mcReserved_arraytok) || (mcLexBuf_currenttoken == mcReserved_identtok))
5255 {
5256 /* avoid dangling else. */
5257 FormalType (stopset0, stopset1, stopset2);
5258 }
5259 else
5260 {
5261 /* avoid dangling else. */
5262 ErrorArray ((const char *) "expecting one of: ARRAY identifier VAR ...", 42);
5263 }
5264 }
5265
5266
5267 /*
5268 VarIdent := Ident [ '[' ConstExpression ']' ]
5269
5270 first symbols:identtok
5271
5272 cannot reachend
5273 */
5274
5275 static void VarIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5276 {
5277 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
5278 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5279 {
5280 Expect (mcReserved_lsbratok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
5281 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5282 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5283 }
5284 }
5285
5286
5287 /*
5288 VarIdentList := VarIdent { ',' VarIdent }
5289
5290 first symbols:identtok
5291
5292 cannot reachend
5293 */
5294
5295 static void VarIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5296 {
5297 VarIdent (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5298 while (mcLexBuf_currenttoken == mcReserved_commatok)
5299 {
5300 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5301 VarIdent (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5302 }
5303 /* while */
5304 }
5305
5306
5307 /*
5308 VariableDeclaration := VarIdentList ':' Type Alignment
5309
5310 first symbols:identtok
5311
5312 cannot reachend
5313 */
5314
5315 static void VariableDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5316 {
5317 VarIdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5318 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5319 Type (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
5320 Alignment (stopset0, stopset1, stopset2);
5321 }
5322
5323
5324 /*
5325 DefVarIdent := Ident [ '[' ConstExpression ']' ]
5326
5327 first symbols:identtok
5328
5329 cannot reachend
5330 */
5331
5332 static void DefVarIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5333 {
5334 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
5335 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5336 {
5337 Expect (mcReserved_lsbratok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
5338 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5339 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5340 }
5341 }
5342
5343
5344 /*
5345 DefVarIdentList := DefVarIdent { ',' DefVarIdent }
5346
5347 first symbols:identtok
5348
5349 cannot reachend
5350 */
5351
5352 static void DefVarIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5353 {
5354 DefVarIdent (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5355 while (mcLexBuf_currenttoken == mcReserved_commatok)
5356 {
5357 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5358 DefVarIdent (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5359 }
5360 /* while */
5361 }
5362
5363
5364 /*
5365 DefVariableDeclaration :=
5366 % typeDes := NIL %
5367 DefVarIdentList ':' Type
5368 Alignment
5369
5370 first symbols:identtok
5371
5372 cannot reachend
5373 */
5374
5375 static void DefVariableDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5376 {
5377 typeDes = static_cast<decl_node> (NULL);
5378 DefVarIdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5379 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5380 Type (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
5381 Alignment (stopset0, stopset1, stopset2);
5382 }
5383
5384
5385 /*
5386 Designator := Qualident { SubDesignator }
5387
5388 first symbols:identtok
5389
5390 cannot reachend
5391 */
5392
5393 static void Designator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5394 {
5395 Qualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
5396 while ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))))) != 0)))
5397 {
5398 SubDesignator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
5399 }
5400 /* while */
5401 }
5402
5403
5404 /*
5405 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
5406 '^'
5407
5408 first symbols:uparrowtok, lsbratok, periodtok
5409
5410 cannot reachend
5411 */
5412
5413 static void SubDesignator (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5414 {
5415 if (mcLexBuf_currenttoken == mcReserved_periodtok)
5416 {
5417 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5418 Ident (stopset0, stopset1, stopset2);
5419 }
5420 else if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5421 {
5422 /* avoid dangling else. */
5423 Expect (mcReserved_lsbratok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5424 ArrayExpList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5425 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5426 }
5427 else if (mcLexBuf_currenttoken == mcReserved_uparrowtok)
5428 {
5429 /* avoid dangling else. */
5430 Expect (mcReserved_uparrowtok, stopset0, stopset1, stopset2);
5431 }
5432 else
5433 {
5434 /* avoid dangling else. */
5435 ErrorArray ((const char *) "expecting one of: ^ [ .", 23);
5436 }
5437 }
5438
5439
5440 /*
5441 ArrayExpList := Expression { ',' Expression }
5442
5443 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5444
5445 cannot reachend
5446 */
5447
5448 static void ArrayExpList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5449 {
5450 Expression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5451 while (mcLexBuf_currenttoken == mcReserved_commatok)
5452 {
5453 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5454 Expression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5455 }
5456 /* while */
5457 }
5458
5459
5460 /*
5461 ExpList := Expression { ',' Expression }
5462
5463 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5464
5465 cannot reachend
5466 */
5467
5468 static void ExpList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5469 {
5470 Expression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5471 while (mcLexBuf_currenttoken == mcReserved_commatok)
5472 {
5473 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5474 Expression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5475 }
5476 /* while */
5477 }
5478
5479
5480 /*
5481 Expression := SimpleExpression [ Relation SimpleExpression ]
5482
5483 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5484
5485 cannot reachend
5486 */
5487
5488 static void Expression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5489 {
5490 SimpleExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
5491 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_greaterequaltok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_intok))
5492 {
5493 Relation (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5494 SimpleExpression (stopset0, stopset1, stopset2);
5495 }
5496 }
5497
5498
5499 /*
5500 SimpleExpression := UnaryOrTerm { AddOperator Term }
5501
5502 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5503
5504 cannot reachend
5505 */
5506
5507 static void SimpleExpression (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5508 {
5509 UnaryOrTerm (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
5510 while (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_ortok))
5511 {
5512 AddOperator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5513 Term (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
5514 }
5515 /* while */
5516 }
5517
5518
5519 /*
5520 UnaryOrTerm := '+' Term | '-' Term |
5521 Term
5522
5523 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5524
5525 cannot reachend
5526 */
5527
5528 static void UnaryOrTerm (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5529 {
5530 if (mcLexBuf_currenttoken == mcReserved_plustok)
5531 {
5532 Expect (mcReserved_plustok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5533 Term (stopset0, stopset1, stopset2);
5534 }
5535 else if (mcLexBuf_currenttoken == mcReserved_minustok)
5536 {
5537 /* avoid dangling else. */
5538 Expect (mcReserved_minustok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5539 Term (stopset0, stopset1, stopset2);
5540 }
5541 else if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5542 {
5543 /* avoid dangling else. */
5544 Term (stopset0, stopset1, stopset2);
5545 }
5546 else
5547 {
5548 /* avoid dangling else. */
5549 ErrorArray ((const char *) "expecting one of: NOT ( string integer number real number identifier { - +", 74);
5550 }
5551 }
5552
5553
5554 /*
5555 Term := Factor { MulOperator Factor }
5556
5557 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
5558
5559 cannot reachend
5560 */
5561
5562 static void Term (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5563 {
5564 Factor (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_timestok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_modtok-mcReserved_arraytok)) | (1 << (mcReserved_divtok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
5565 while ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))))) != 0))) || (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))))) != 0)))) || (mcLexBuf_currenttoken == mcReserved_remtok))
5566 {
5567 MulOperator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5568 Factor (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
5569 }
5570 /* while */
5571 }
5572
5573
5574 /*
5575 Factor := Number | string | SetOrDesignatorOrFunction |
5576 '(' Expression ')' |
5577 'NOT' ( Factor | ConstAttribute )
5578
5579 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
5580
5581 cannot reachend
5582 */
5583
5584 static void Factor (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5585 {
5586 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok))))) != 0)))
5587 {
5588 Number (stopset0, stopset1, stopset2);
5589 }
5590 else if (mcLexBuf_currenttoken == mcReserved_stringtok)
5591 {
5592 /* avoid dangling else. */
5593 string (stopset0, stopset1, stopset2);
5594 }
5595 else if ((mcLexBuf_currenttoken == mcReserved_lcbratok) || (mcLexBuf_currenttoken == mcReserved_identtok))
5596 {
5597 /* avoid dangling else. */
5598 SetOrDesignatorOrFunction (stopset0, stopset1, stopset2);
5599 }
5600 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
5601 {
5602 /* avoid dangling else. */
5603 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5604 Expression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5605 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5606 }
5607 else if (mcLexBuf_currenttoken == mcReserved_nottok)
5608 {
5609 /* avoid dangling else. */
5610 Expect (mcReserved_nottok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5611 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5612 {
5613 Factor (stopset0, stopset1, stopset2);
5614 }
5615 else if (mcLexBuf_currenttoken == mcReserved_attributetok)
5616 {
5617 /* avoid dangling else. */
5618 ConstAttribute (stopset0, stopset1, stopset2);
5619 }
5620 else
5621 {
5622 /* avoid dangling else. */
5623 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ real number integer number string ( NOT { identifier", 84);
5624 }
5625 }
5626 else
5627 {
5628 /* avoid dangling else. */
5629 ErrorArray ((const char *) "expecting one of: NOT ( identifier { string integer number real number", 70);
5630 }
5631 }
5632
5633
5634 /*
5635 SetOrDesignatorOrFunction := Qualident [ Constructor |
5636 SimpleDes
5637 [ ActualParameters ] ] |
5638 Constructor
5639
5640 first symbols:lcbratok, identtok
5641
5642 cannot reachend
5643 */
5644
5645 static void SetOrDesignatorOrFunction (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5646 {
5647 if (mcLexBuf_currenttoken == mcReserved_identtok)
5648 {
5649 /* avoid dangling else. */
5650 Qualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lcbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5651 if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0)))
5652 {
5653 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5654 /* seen optional [ | ] expression */
5655 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
5656 {
5657 Constructor (stopset0, stopset1, stopset2);
5658 }
5659 else if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok))))) != 0)))
5660 {
5661 /* avoid dangling else. */
5662 SimpleDes (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5663 if (mcLexBuf_currenttoken == mcReserved_lparatok)
5664 {
5665 ActualParameters (stopset0, stopset1, stopset2);
5666 }
5667 }
5668 else
5669 {
5670 /* avoid dangling else. */
5671 ErrorArray ((const char *) "expecting one of: ( ^ [ . {", 27);
5672 }
5673 }
5674 /* end of optional [ | ] expression */
5675 }
5676 else if (mcLexBuf_currenttoken == mcReserved_lcbratok)
5677 {
5678 /* avoid dangling else. */
5679 Constructor (stopset0, stopset1, stopset2);
5680 }
5681 else
5682 {
5683 /* avoid dangling else. */
5684 ErrorArray ((const char *) "expecting one of: { identifier", 30);
5685 }
5686 }
5687
5688
5689 /*
5690 SimpleDes := { SubDesignator }
5691
5692 first symbols:periodtok, lsbratok, uparrowtok
5693
5694 reachend
5695 */
5696
5697 static void SimpleDes (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5698 {
5699 while ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))))) != 0)))
5700 {
5701 SubDesignator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
5702 }
5703 /* while */
5704 }
5705
5706
5707 /*
5708 ActualParameters := '(' [ ExpList ] ')'
5709
5710 first symbols:lparatok
5711
5712 cannot reachend
5713 */
5714
5715 static void ActualParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5716 {
5717 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5718 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5719 {
5720 ExpList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5721 }
5722 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5723 }
5724
5725
5726 /*
5727 ExitStatement := 'EXIT'
5728
5729 first symbols:exittok
5730
5731 cannot reachend
5732 */
5733
5734 static void ExitStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5735 {
5736 Expect (mcReserved_exittok, stopset0, stopset1, stopset2);
5737 }
5738
5739
5740 /*
5741 ReturnStatement := 'RETURN' [ Expression ]
5742
5743 first symbols:returntok
5744
5745 cannot reachend
5746 */
5747
5748 static void ReturnStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5749 {
5750 Expect (mcReserved_returntok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5751 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5752 {
5753 Expression (stopset0, stopset1, stopset2);
5754 }
5755 }
5756
5757
5758 /*
5759 Statement := [ AssignmentOrProcedureCall |
5760 IfStatement | CaseStatement |
5761 WhileStatement |
5762 RepeatStatement |
5763 LoopStatement | ForStatement |
5764 WithStatement | AsmStatement |
5765 ExitStatement | ReturnStatement |
5766 RetryStatement ]
5767
5768 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
5769
5770 reachend
5771 */
5772
5773 static void Statement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5774 {
5775 if ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5776 {
5777 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5778 /* seen optional [ | ] expression */
5779 if (mcLexBuf_currenttoken == mcReserved_identtok)
5780 {
5781 AssignmentOrProcedureCall (stopset0, stopset1, stopset2);
5782 }
5783 else if (mcLexBuf_currenttoken == mcReserved_iftok)
5784 {
5785 /* avoid dangling else. */
5786 IfStatement (stopset0, stopset1, stopset2);
5787 }
5788 else if (mcLexBuf_currenttoken == mcReserved_casetok)
5789 {
5790 /* avoid dangling else. */
5791 CaseStatement (stopset0, stopset1, stopset2);
5792 }
5793 else if (mcLexBuf_currenttoken == mcReserved_whiletok)
5794 {
5795 /* avoid dangling else. */
5796 WhileStatement (stopset0, stopset1, stopset2);
5797 }
5798 else if (mcLexBuf_currenttoken == mcReserved_repeattok)
5799 {
5800 /* avoid dangling else. */
5801 RepeatStatement (stopset0, stopset1, stopset2);
5802 }
5803 else if (mcLexBuf_currenttoken == mcReserved_looptok)
5804 {
5805 /* avoid dangling else. */
5806 LoopStatement (stopset0, stopset1, stopset2);
5807 }
5808 else if (mcLexBuf_currenttoken == mcReserved_fortok)
5809 {
5810 /* avoid dangling else. */
5811 ForStatement (stopset0, stopset1, stopset2);
5812 }
5813 else if (mcLexBuf_currenttoken == mcReserved_withtok)
5814 {
5815 /* avoid dangling else. */
5816 WithStatement (stopset0, stopset1, stopset2);
5817 }
5818 else if (mcLexBuf_currenttoken == mcReserved_asmtok)
5819 {
5820 /* avoid dangling else. */
5821 AsmStatement (stopset0, stopset1, stopset2);
5822 }
5823 else if (mcLexBuf_currenttoken == mcReserved_exittok)
5824 {
5825 /* avoid dangling else. */
5826 ExitStatement (stopset0, stopset1, stopset2);
5827 }
5828 else if (mcLexBuf_currenttoken == mcReserved_returntok)
5829 {
5830 /* avoid dangling else. */
5831 ReturnStatement (stopset0, stopset1, stopset2);
5832 }
5833 else if (mcLexBuf_currenttoken == mcReserved_retrytok)
5834 {
5835 /* avoid dangling else. */
5836 RetryStatement (stopset0, stopset1, stopset2);
5837 }
5838 else
5839 {
5840 /* avoid dangling else. */
5841 ErrorArray ((const char *) "expecting one of: RETRY RETURN EXIT ASM WITH FOR LOOP REPEAT WHILE CASE IF identifier", 85);
5842 }
5843 }
5844 /* end of optional [ | ] expression */
5845 }
5846
5847
5848 /*
5849 RetryStatement := 'RETRY'
5850
5851 first symbols:retrytok
5852
5853 cannot reachend
5854 */
5855
5856 static void RetryStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5857 {
5858 Expect (mcReserved_retrytok, stopset0, stopset1, stopset2);
5859 }
5860
5861
5862 /*
5863 AssignmentOrProcedureCall := Designator ( ':=' Expression |
5864 ActualParameters |
5865
5866 % epsilon %
5867 )
5868
5869 first symbols:identtok
5870
5871 cannot reachend
5872 */
5873
5874 static void AssignmentOrProcedureCall (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5875 {
5876 Designator (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_becomestok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5877 if (mcLexBuf_currenttoken == mcReserved_becomestok)
5878 {
5879 Expect (mcReserved_becomestok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5880 Expression (stopset0, stopset1, stopset2);
5881 }
5882 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
5883 {
5884 /* avoid dangling else. */
5885 ActualParameters (stopset0, stopset1, stopset2);
5886 }
5887 /* epsilon */
5888 }
5889
5890
5891 /*
5892 StatementSequence := Statement { ';' Statement }
5893
5894 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
5895
5896 reachend
5897 */
5898
5899 static void StatementSequence (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5900 {
5901 Statement (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
5902 while (mcLexBuf_currenttoken == mcReserved_semicolontok)
5903 {
5904 Expect (mcReserved_semicolontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5905 Statement (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
5906 }
5907 /* while */
5908 }
5909
5910
5911 /*
5912 IfStatement := 'IF' Expression 'THEN' StatementSequence
5913 { 'ELSIF' Expression 'THEN' StatementSequence }
5914 [ 'ELSE' StatementSequence ] 'END'
5915
5916 first symbols:iftok
5917
5918 cannot reachend
5919 */
5920
5921 static void IfStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5922 {
5923 Expect (mcReserved_iftok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5924 Expression (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_thentok-mcReserved_recordtok))));
5925 Expect (mcReserved_thentok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_elsiftok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
5926 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_elsiftok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5927 while (mcLexBuf_currenttoken == mcReserved_elsiftok)
5928 {
5929 Expect (mcReserved_elsiftok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5930 Expression (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_thentok-mcReserved_recordtok))));
5931 Expect (mcReserved_thentok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_elsiftok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
5932 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_elsiftok-mcReserved_arraytok))), stopset2);
5933 }
5934 /* while */
5935 if (mcLexBuf_currenttoken == mcReserved_elsetok)
5936 {
5937 Expect (mcReserved_elsetok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
5938 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5939 }
5940 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
5941 }
5942
5943
5944 /*
5945 CaseStatement := 'CASE' Expression 'OF' Case { '|'
5946 Case }
5947 CaseEndStatement
5948
5949 first symbols:casetok
5950
5951 cannot reachend
5952 */
5953
5954 static void CaseStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5955 {
5956 Expect (mcReserved_casetok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5957 Expression (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5958 Expect (mcReserved_oftok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
5959 Case (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5960 while (mcLexBuf_currenttoken == mcReserved_bartok)
5961 {
5962 Expect (mcReserved_bartok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
5963 Case (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok))), stopset2);
5964 }
5965 /* while */
5966 CaseEndStatement (stopset0, stopset1, stopset2);
5967 }
5968
5969
5970 /*
5971 CaseEndStatement := 'END' | 'ELSE' StatementSequence
5972 'END'
5973
5974 first symbols:elsetok, endtok
5975
5976 cannot reachend
5977 */
5978
5979 static void CaseEndStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
5980 {
5981 if (mcLexBuf_currenttoken == mcReserved_endtok)
5982 {
5983 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
5984 }
5985 else if (mcLexBuf_currenttoken == mcReserved_elsetok)
5986 {
5987 /* avoid dangling else. */
5988 Expect (mcReserved_elsetok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
5989 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5990 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
5991 }
5992 else
5993 {
5994 /* avoid dangling else. */
5995 ErrorArray ((const char *) "expecting one of: ELSE END", 26);
5996 }
5997 }
5998
5999
6000 /*
6001 Case := [ CaseLabelList ':' StatementSequence ]
6002
6003 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6004
6005 reachend
6006 */
6007
6008 static void Case (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6009 {
6010 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))))) != 0))))
6011 {
6012 CaseLabelList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6013 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6014 StatementSequence (stopset0, stopset1, stopset2);
6015 }
6016 }
6017
6018
6019 /*
6020 CaseLabelList := CaseLabels { ',' CaseLabels }
6021
6022 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
6023
6024 cannot reachend
6025 */
6026
6027 static void CaseLabelList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6028 {
6029 CaseLabels (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6030 while (mcLexBuf_currenttoken == mcReserved_commatok)
6031 {
6032 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
6033 CaseLabels (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6034 }
6035 /* while */
6036 }
6037
6038
6039 /*
6040 CaseLabels := ConstExpression [ '..' ConstExpression ]
6041
6042 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6043
6044 cannot reachend
6045 */
6046
6047 static void CaseLabels (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6048 {
6049 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
6050 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
6051 {
6052 Expect (mcReserved_periodperiodtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6053 ConstExpression (stopset0, stopset1, stopset2);
6054 }
6055 }
6056
6057
6058 /*
6059 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
6060 'END'
6061
6062 first symbols:whiletok
6063
6064 cannot reachend
6065 */
6066
6067 static void WhileStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6068 {
6069 Expect (mcReserved_whiletok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6070 Expression (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6071 Expect (mcReserved_dotok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6072 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6073 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6074 }
6075
6076
6077 /*
6078 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
6079 Expression
6080
6081 first symbols:repeattok
6082
6083 cannot reachend
6084 */
6085
6086 static void RepeatStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6087 {
6088 Expect (mcReserved_repeattok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_untiltok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6089 StatementSequence (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_untiltok-mcReserved_recordtok))));
6090 Expect (mcReserved_untiltok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6091 Expression (stopset0, stopset1, stopset2);
6092 }
6093
6094
6095 /*
6096 ForStatement := 'FOR' Ident ':=' Expression 'TO'
6097 Expression [ 'BY' ConstExpression ]
6098 'DO' StatementSequence 'END'
6099
6100 first symbols:fortok
6101
6102 cannot reachend
6103 */
6104
6105 static void ForStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6106 {
6107 Expect (mcReserved_fortok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6108 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_becomestok-mcReserved_eoftok))), stopset1, stopset2);
6109 Expect (mcReserved_becomestok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6110 Expression (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_totok-mcReserved_recordtok))));
6111 Expect (mcReserved_totok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6112 Expression (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok)) | (1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6113 if (mcLexBuf_currenttoken == mcReserved_bytok)
6114 {
6115 Expect (mcReserved_bytok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6116 ConstExpression (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6117 }
6118 Expect (mcReserved_dotok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6119 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6120 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6121 }
6122
6123
6124 /*
6125 LoopStatement := 'LOOP' StatementSequence 'END'
6126
6127 first symbols:looptok
6128
6129 cannot reachend
6130 */
6131
6132 static void LoopStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6133 {
6134 Expect (mcReserved_looptok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6135 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6136 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6137 }
6138
6139
6140 /*
6141 WithStatement := 'WITH' Designator 'DO' StatementSequence
6142 'END'
6143
6144 first symbols:withtok
6145
6146 cannot reachend
6147 */
6148
6149 static void WithStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6150 {
6151 Expect (mcReserved_withtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6152 Designator (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6153 Expect (mcReserved_dotok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6154 StatementSequence (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6155 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6156 }
6157
6158
6159 /*
6160 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
6161 Ident
6162
6163 first symbols:proceduretok
6164
6165 cannot reachend
6166 */
6167
6168 static void ProcedureDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6169 {
6170 ProcedureHeading (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6171 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6172 ProcedureBlock (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6173 Ident (stopset0, stopset1, stopset2);
6174 }
6175
6176
6177 /*
6178 ProcedureIdent := Ident
6179 % curproc := lookupSym (curident) %
6180
6181
6182 first symbols:identtok
6183
6184 cannot reachend
6185 */
6186
6187 static void ProcedureIdent (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6188 {
6189 Ident (stopset0, stopset1, stopset2);
6190 curproc = decl_lookupSym (curident);
6191 }
6192
6193
6194 /*
6195 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
6196 '(' '(' Ident ')' ')' |
6197 '__INLINE__' ]
6198
6199 first symbols:inlinetok, attributetok
6200
6201 reachend
6202 */
6203
6204 static void DefineBuiltinProcedure (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6205 {
6206 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))))) != 0)))
6207 {
6208 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6209 /* seen optional [ | ] expression */
6210 if (mcLexBuf_currenttoken == mcReserved_attributetok)
6211 {
6212 Expect (mcReserved_attributetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_builtintok-mcReserved_recordtok))));
6213 Expect (mcReserved_builtintok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
6214 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
6215 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6216 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6217 Expect (mcReserved_rparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6218 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
6219 }
6220 else if (mcLexBuf_currenttoken == mcReserved_inlinetok)
6221 {
6222 /* avoid dangling else. */
6223 Expect (mcReserved_inlinetok, stopset0, stopset1, stopset2);
6224 }
6225 else
6226 {
6227 /* avoid dangling else. */
6228 ErrorArray ((const char *) "expecting one of: __INLINE__ __ATTRIBUTE__", 42);
6229 }
6230 }
6231 /* end of optional [ | ] expression */
6232 }
6233
6234
6235 /*
6236 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
6237 ( ProcedureIdent
6238 % enterScope (curproc) %
6239 [ FormalParameters ] AttributeNoReturn )
6240
6241 first symbols:proceduretok
6242
6243 cannot reachend
6244 */
6245
6246 static void ProcedureHeading (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6247 {
6248 Expect (mcReserved_proceduretok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6249 DefineBuiltinProcedure (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6250 ProcedureIdent (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6251 decl_enterScope (curproc);
6252 if (mcLexBuf_currenttoken == mcReserved_lparatok)
6253 {
6254 FormalParameters (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6255 }
6256 AttributeNoReturn (stopset0, stopset1, stopset2);
6257 }
6258
6259
6260 /*
6261 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
6262
6263 first symbols:inlinetok, builtintok
6264
6265 reachend
6266 */
6267
6268 static void Builtin (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6269 {
6270 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_builtintok-mcReserved_recordtok))))) != 0)))
6271 {
6272 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6273 /* seen optional [ | ] expression */
6274 if (mcLexBuf_currenttoken == mcReserved_builtintok)
6275 {
6276 Expect (mcReserved_builtintok, stopset0, stopset1, stopset2);
6277 }
6278 else if (mcLexBuf_currenttoken == mcReserved_inlinetok)
6279 {
6280 /* avoid dangling else. */
6281 Expect (mcReserved_inlinetok, stopset0, stopset1, stopset2);
6282 }
6283 else
6284 {
6285 /* avoid dangling else. */
6286 ErrorArray ((const char *) "expecting one of: __INLINE__ __BUILTIN__", 40);
6287 }
6288 }
6289 /* end of optional [ | ] expression */
6290 }
6291
6292
6293 /*
6294 DefProcedureHeading := 'PROCEDURE' Builtin ( ProcedureIdent
6295 [ DefFormalParameters ]
6296 AttributeNoReturn )
6297
6298 first symbols:proceduretok
6299
6300 cannot reachend
6301 */
6302
6303 static void DefProcedureHeading (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6304 {
6305 Expect (mcReserved_proceduretok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_builtintok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6306 Builtin (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6307 ProcedureIdent (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6308 if (mcLexBuf_currenttoken == mcReserved_lparatok)
6309 {
6310 DefFormalParameters (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6311 }
6312 AttributeNoReturn (stopset0, stopset1, stopset2);
6313 }
6314
6315
6316 /*
6317 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
6318 'END'
6319 % leaveScope %
6320
6321
6322 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
6323
6324 cannot reachend
6325 */
6326
6327 static void ProcedureBlock (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6328 {
6329 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
6330 {
6331 Declaration (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6332 }
6333 /* while */
6334 if (mcLexBuf_currenttoken == mcReserved_begintok)
6335 {
6336 Expect (mcReserved_begintok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_excepttok-mcReserved_arraytok)) | (1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6337 ProcedureBlockBody (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6338 }
6339 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6340 decl_leaveScope ();
6341 }
6342
6343
6344 /*
6345 Block := { Declaration } InitialBlock FinalBlock
6346 'END'
6347
6348 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
6349
6350 cannot reachend
6351 */
6352
6353 static void Block (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6354 {
6355 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
6356 {
6357 Declaration (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6358 }
6359 /* while */
6360 InitialBlock (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok))), stopset2);
6361 FinalBlock (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6362 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6363 }
6364
6365
6366 /*
6367 InitialBlock := [ 'BEGIN' InitialBlockBody ]
6368
6369 first symbols:begintok
6370
6371 reachend
6372 */
6373
6374 static void InitialBlock (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6375 {
6376 if (mcLexBuf_currenttoken == mcReserved_begintok)
6377 {
6378 Expect (mcReserved_begintok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok)) | (1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6379 InitialBlockBody (stopset0, stopset1, stopset2);
6380 }
6381 }
6382
6383
6384 /*
6385 FinalBlock := [ 'FINALLY' FinalBlockBody ]
6386
6387 first symbols:finallytok
6388
6389 reachend
6390 */
6391
6392 static void FinalBlock (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6393 {
6394 if (mcLexBuf_currenttoken == mcReserved_finallytok)
6395 {
6396 Expect (mcReserved_finallytok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok)) | (1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6397 FinalBlockBody (stopset0, stopset1, stopset2);
6398 }
6399 }
6400
6401
6402 /*
6403 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6404
6405 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6406
6407 reachend
6408 */
6409
6410 static void InitialBlockBody (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6411 {
6412 NormalPart (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
6413 if (mcLexBuf_currenttoken == mcReserved_excepttok)
6414 {
6415 Expect (mcReserved_excepttok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6416 ExceptionalPart (stopset0, stopset1, stopset2);
6417 }
6418 }
6419
6420
6421 /*
6422 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6423
6424 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6425
6426 reachend
6427 */
6428
6429 static void FinalBlockBody (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6430 {
6431 NormalPart (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
6432 if (mcLexBuf_currenttoken == mcReserved_excepttok)
6433 {
6434 Expect (mcReserved_excepttok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6435 ExceptionalPart (stopset0, stopset1, stopset2);
6436 }
6437 }
6438
6439
6440 /*
6441 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6442
6443 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6444
6445 reachend
6446 */
6447
6448 static void ProcedureBlockBody (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6449 {
6450 NormalPart (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
6451 if (mcLexBuf_currenttoken == mcReserved_excepttok)
6452 {
6453 Expect (mcReserved_excepttok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6454 ExceptionalPart (stopset0, stopset1, stopset2);
6455 }
6456 }
6457
6458
6459 /*
6460 NormalPart := StatementSequence
6461
6462 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6463
6464 reachend
6465 */
6466
6467 static void NormalPart (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6468 {
6469 StatementSequence (stopset0, stopset1, stopset2);
6470 }
6471
6472
6473 /*
6474 ExceptionalPart := StatementSequence
6475
6476 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6477
6478 reachend
6479 */
6480
6481 static void ExceptionalPart (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6482 {
6483 StatementSequence (stopset0, stopset1, stopset2);
6484 }
6485
6486
6487 /*
6488 Declaration := 'CONST' { ConstantDeclaration ';' } |
6489 'TYPE' { TypeDeclaration ';' } |
6490 'VAR' { VariableDeclaration ';' } |
6491 ProcedureDeclaration ';' |
6492 ModuleDeclaration ';'
6493
6494 first symbols:moduletok, proceduretok, vartok, typetok, consttok
6495
6496 cannot reachend
6497 */
6498
6499 static void Declaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6500 {
6501 if (mcLexBuf_currenttoken == mcReserved_consttok)
6502 {
6503 Expect (mcReserved_consttok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6504 while (mcLexBuf_currenttoken == mcReserved_identtok)
6505 {
6506 ConstantDeclaration (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6507 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6508 }
6509 /* while */
6510 }
6511 else if (mcLexBuf_currenttoken == mcReserved_typetok)
6512 {
6513 /* avoid dangling else. */
6514 Expect (mcReserved_typetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6515 while (mcLexBuf_currenttoken == mcReserved_identtok)
6516 {
6517 TypeDeclaration (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6518 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6519 }
6520 /* while */
6521 }
6522 else if (mcLexBuf_currenttoken == mcReserved_vartok)
6523 {
6524 /* avoid dangling else. */
6525 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6526 while (mcLexBuf_currenttoken == mcReserved_identtok)
6527 {
6528 VariableDeclaration (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6529 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6530 }
6531 /* while */
6532 }
6533 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
6534 {
6535 /* avoid dangling else. */
6536 ProcedureDeclaration (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6537 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
6538 }
6539 else if (mcLexBuf_currenttoken == mcReserved_moduletok)
6540 {
6541 /* avoid dangling else. */
6542 ModuleDeclaration (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6543 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
6544 }
6545 else
6546 {
6547 /* avoid dangling else. */
6548 ErrorArray ((const char *) "expecting one of: MODULE PROCEDURE VAR TYPE CONST", 49);
6549 }
6550 }
6551
6552
6553 /*
6554 DefFormalParameters := '(' [ DefMultiFPSection ]
6555 ')' FormalReturn
6556
6557 first symbols:lparatok
6558
6559 cannot reachend
6560 */
6561
6562 static void DefFormalParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6563 {
6564 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6565 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6566 {
6567 DefMultiFPSection (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6568 }
6569 Expect (mcReserved_rparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6570 FormalReturn (stopset0, stopset1, stopset2);
6571 }
6572
6573
6574 /*
6575 DefMultiFPSection := DefExtendedFP |
6576 FPSection [ ';' DefMultiFPSection ]
6577
6578 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6579
6580 cannot reachend
6581 */
6582
6583 static void DefMultiFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6584 {
6585 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok))
6586 {
6587 DefExtendedFP (stopset0, stopset1, stopset2);
6588 }
6589 else if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0)))
6590 {
6591 /* avoid dangling else. */
6592 FPSection (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6593 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
6594 {
6595 Expect (mcReserved_semicolontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6596 DefMultiFPSection (stopset0, stopset1, stopset2);
6597 }
6598 }
6599 else
6600 {
6601 /* avoid dangling else. */
6602 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6603 }
6604 }
6605
6606
6607 /*
6608 FormalParameters := '(' [ MultiFPSection ] ')'
6609 FormalReturn
6610
6611 first symbols:lparatok
6612
6613 cannot reachend
6614 */
6615
6616 static void FormalParameters (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6617 {
6618 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6619 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6620 {
6621 MultiFPSection (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6622 }
6623 Expect (mcReserved_rparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6624 FormalReturn (stopset0, stopset1, stopset2);
6625 }
6626
6627
6628 /*
6629 AttributeNoReturn := [ '' ]
6630
6631 first symbols:ldirectivetok
6632
6633 reachend
6634 */
6635
6636 static void AttributeNoReturn (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6637 {
6638 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6639 {
6640 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6641 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6642 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
6643 }
6644 }
6645
6646
6647 /*
6648 AttributeUnused := [ '' ]
6649
6650 first symbols:ldirectivetok
6651
6652 reachend
6653 */
6654
6655 static void AttributeUnused (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6656 {
6657 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6658 {
6659 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6660 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6661 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
6662 }
6663 }
6664
6665
6666 /*
6667 MultiFPSection := ExtendedFP | FPSection [ ';'
6668 MultiFPSection ]
6669
6670 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6671
6672 cannot reachend
6673 */
6674
6675 static void MultiFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6676 {
6677 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok))
6678 {
6679 ExtendedFP (stopset0, stopset1, stopset2);
6680 }
6681 else if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0)))
6682 {
6683 /* avoid dangling else. */
6684 FPSection (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6685 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
6686 {
6687 Expect (mcReserved_semicolontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6688 MultiFPSection (stopset0, stopset1, stopset2);
6689 }
6690 }
6691 else
6692 {
6693 /* avoid dangling else. */
6694 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6695 }
6696 }
6697
6698
6699 /*
6700 FPSection := NonVarFPSection |
6701 VarFPSection
6702
6703 first symbols:vartok, identtok
6704
6705 cannot reachend
6706 */
6707
6708 static void FPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6709 {
6710 if (mcLexBuf_currenttoken == mcReserved_identtok)
6711 {
6712 NonVarFPSection (stopset0, stopset1, stopset2);
6713 }
6714 else if (mcLexBuf_currenttoken == mcReserved_vartok)
6715 {
6716 /* avoid dangling else. */
6717 VarFPSection (stopset0, stopset1, stopset2);
6718 }
6719 else
6720 {
6721 /* avoid dangling else. */
6722 ErrorArray ((const char *) "expecting one of: VAR identifier", 32);
6723 }
6724 }
6725
6726
6727 /*
6728 DefExtendedFP := DefOptArg | '...'
6729
6730 first symbols:lsbratok, periodperiodperiodtok
6731
6732 cannot reachend
6733 */
6734
6735 static void DefExtendedFP (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6736 {
6737 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
6738 {
6739 DefOptArg (stopset0, stopset1, stopset2);
6740 }
6741 else if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
6742 {
6743 /* avoid dangling else. */
6744 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
6745 }
6746 else
6747 {
6748 /* avoid dangling else. */
6749 ErrorArray ((const char *) "expecting one of: ... [", 23);
6750 }
6751 }
6752
6753
6754 /*
6755 ExtendedFP := OptArg | '...'
6756
6757 first symbols:lsbratok, periodperiodperiodtok
6758
6759 cannot reachend
6760 */
6761
6762 static void ExtendedFP (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6763 {
6764 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
6765 {
6766 OptArg (stopset0, stopset1, stopset2);
6767 }
6768 else if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
6769 {
6770 /* avoid dangling else. */
6771 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
6772 }
6773 else
6774 {
6775 /* avoid dangling else. */
6776 ErrorArray ((const char *) "expecting one of: ... [", 23);
6777 }
6778 }
6779
6780
6781 /*
6782 VarFPSection := 'VAR' IdentList ':' FormalType [
6783 AttributeUnused ]
6784
6785 first symbols:vartok
6786
6787 cannot reachend
6788 */
6789
6790 static void VarFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6791 {
6792 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6793 IdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6794 Expect (mcReserved_colontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6795 FormalType (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6796 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6797 {
6798 AttributeUnused (stopset0, stopset1, stopset2);
6799 }
6800 }
6801
6802
6803 /*
6804 NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
6805
6806 first symbols:identtok
6807
6808 cannot reachend
6809 */
6810
6811 static void NonVarFPSection (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6812 {
6813 IdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6814 Expect (mcReserved_colontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6815 FormalType (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6816 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6817 {
6818 AttributeUnused (stopset0, stopset1, stopset2);
6819 }
6820 }
6821
6822
6823 /*
6824 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
6825 ']'
6826
6827 first symbols:lsbratok
6828
6829 cannot reachend
6830 */
6831
6832 static void OptArg (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6833 {
6834 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6835 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6836 Expect (mcReserved_colontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6837 FormalType (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
6838 if (mcLexBuf_currenttoken == mcReserved_equaltok)
6839 {
6840 Expect (mcReserved_equaltok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6841 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
6842 }
6843 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
6844 }
6845
6846
6847 /*
6848 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
6849 ']'
6850
6851 first symbols:lsbratok
6852
6853 cannot reachend
6854 */
6855
6856 static void DefOptArg (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6857 {
6858 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6859 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6860 Expect (mcReserved_colontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6861 FormalType (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
6862 Expect (mcReserved_equaltok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6863 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
6864 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
6865 }
6866
6867
6868 /*
6869 FormalType := { 'ARRAY' 'OF' } Qualident
6870
6871 first symbols:identtok, arraytok
6872
6873 cannot reachend
6874 */
6875
6876 static void FormalType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6877 {
6878 while (mcLexBuf_currenttoken == mcReserved_arraytok)
6879 {
6880 Expect (mcReserved_arraytok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
6881 Expect (mcReserved_oftok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6882 }
6883 /* while */
6884 Qualident (stopset0, stopset1, stopset2);
6885 }
6886
6887
6888 /*
6889 ModuleDeclaration := 'MODULE' Ident [ Priority ]
6890 ';' { Import } [ Export ]
6891 Block Ident
6892
6893 first symbols:moduletok
6894
6895 cannot reachend
6896 */
6897
6898 static void ModuleDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6899 {
6900 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6901 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
6902 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
6903 {
6904 Priority (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6905 }
6906 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6907 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
6908 {
6909 Import (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
6910 }
6911 /* while */
6912 if (mcLexBuf_currenttoken == mcReserved_exporttok)
6913 {
6914 Export (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
6915 }
6916 Block (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6917 Ident (stopset0, stopset1, stopset2);
6918 }
6919
6920
6921 /*
6922 Priority := '[' ConstExpression ']'
6923
6924 first symbols:lsbratok
6925
6926 cannot reachend
6927 */
6928
6929 static void Priority (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6930 {
6931 Expect (mcReserved_lsbratok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6932 ConstExpression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
6933 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
6934 }
6935
6936
6937 /*
6938 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
6939 'UNQUALIFIED' IdentList |
6940 IdentList ) ';'
6941
6942 first symbols:exporttok
6943
6944 cannot reachend
6945 */
6946
6947 static void Export (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6948 {
6949 Expect (mcReserved_exporttok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_qualifiedtok-mcReserved_arraytok)) | (1 << (mcReserved_unqualifiedtok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6950 if (mcLexBuf_currenttoken == mcReserved_qualifiedtok)
6951 {
6952 Expect (mcReserved_qualifiedtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6953 IdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6954 }
6955 else if (mcLexBuf_currenttoken == mcReserved_unqualifiedtok)
6956 {
6957 /* avoid dangling else. */
6958 Expect (mcReserved_unqualifiedtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6959 IdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6960 }
6961 else if (mcLexBuf_currenttoken == mcReserved_identtok)
6962 {
6963 /* avoid dangling else. */
6964 IdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6965 }
6966 else
6967 {
6968 /* avoid dangling else. */
6969 ErrorArray ((const char *) "expecting one of: identifier UNQUALIFIED QUALIFIED", 50);
6970 }
6971 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
6972 }
6973
6974
6975 /*
6976 FromImport := 'FROM' Ident 'IMPORT' IdentList ';'
6977
6978 first symbols:fromtok
6979
6980 cannot reachend
6981 */
6982
6983 static void FromImport (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
6984 {
6985 Expect (mcReserved_fromtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6986 Ident (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok))), stopset2);
6987 Expect (mcReserved_importtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6988 IdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6989 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
6990 }
6991
6992
6993 /*
6994 ImportModuleList := Ident { ',' Ident }
6995
6996 first symbols:identtok
6997
6998 cannot reachend
6999 */
7000
7001 static void ImportModuleList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7002 {
7003 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7004 while (mcLexBuf_currenttoken == mcReserved_commatok)
7005 {
7006 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7007 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7008 }
7009 /* while */
7010 }
7011
7012
7013 /*
7014 WithoutFromImport := 'IMPORT' ImportModuleList ';'
7015
7016 first symbols:importtok
7017
7018 cannot reachend
7019 */
7020
7021 static void WithoutFromImport (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7022 {
7023 Expect (mcReserved_importtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7024 ImportModuleList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7025 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7026 }
7027
7028
7029 /*
7030 Import := FromImport | WithoutFromImport
7031
7032 first symbols:importtok, fromtok
7033
7034 cannot reachend
7035 */
7036
7037 static void Import (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7038 {
7039 if (mcLexBuf_currenttoken == mcReserved_fromtok)
7040 {
7041 FromImport (stopset0, stopset1, stopset2);
7042 }
7043 else if (mcLexBuf_currenttoken == mcReserved_importtok)
7044 {
7045 /* avoid dangling else. */
7046 WithoutFromImport (stopset0, stopset1, stopset2);
7047 }
7048 else
7049 {
7050 /* avoid dangling else. */
7051 ErrorArray ((const char *) "expecting one of: IMPORT FROM", 29);
7052 }
7053 }
7054
7055
7056 /*
7057 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
7058 string ]
7059 Ident ';'
7060 % curmodule := lookupDef (curident) %
7061
7062 % enterScope (curmodule) %
7063 { Import } [ Export ] { Definition }
7064 'END' Ident '.'
7065 % checkEndName (curmodule, curident, 'definition module') %
7066
7067 % leaveScope %
7068
7069 % setEnumsComplete (curmodule) %
7070
7071
7072 first symbols:definitiontok
7073
7074 cannot reachend
7075 */
7076
7077 static void DefinitionModule (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7078 {
7079 Expect (mcReserved_definitiontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2);
7080 Expect (mcReserved_moduletok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7081 if (mcLexBuf_currenttoken == mcReserved_fortok)
7082 {
7083 Expect (mcReserved_fortok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7084 string (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7085 }
7086 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7087 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
7088 curmodule = decl_lookupDef (curident);
7089 decl_enterScope (curmodule);
7090 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
7091 {
7092 Import (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7093 }
7094 /* while */
7095 if (mcLexBuf_currenttoken == mcReserved_exporttok)
7096 {
7097 Export (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7098 }
7099 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
7100 {
7101 Definition (stopset0, stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7102 }
7103 /* while */
7104 Expect (mcReserved_endtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7105 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
7106 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
7107 checkEndName (curmodule, curident, (const char *) "definition module", 17);
7108 decl_leaveScope ();
7109 decl_setEnumsComplete (curmodule);
7110 }
7111
7112
7113 /*
7114 DefQualident := Ident
7115 % typeExp := lookupSym (curident) %
7116 [ '.'
7117 % IF NOT isDef (typeExp)
7118 THEN
7119 ErrorArray ('the first component of this qualident must be a definition module')
7120 END %
7121 Ident
7122 % typeExp := lookupInScope (typeExp, curident) ;
7123 IF typeExp=NIL
7124 THEN
7125 ErrorArray ('identifier not found in definition module')
7126 END %
7127 ]
7128
7129 first symbols:identtok
7130
7131 cannot reachend
7132 */
7133
7134 static void DefQualident (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7135 {
7136 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
7137 typeExp = decl_lookupSym (curident);
7138 if (mcLexBuf_currenttoken == mcReserved_periodtok)
7139 {
7140 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7141 if (! (decl_isDef (typeExp)))
7142 {
7143 ErrorArray ((const char *) "the first component of this qualident must be a definition module", 65);
7144 }
7145 Ident (stopset0, stopset1, stopset2);
7146 typeExp = decl_lookupInScope (typeExp, curident);
7147 if (typeExp == NULL)
7148 {
7149 ErrorArray ((const char *) "identifier not found in definition module", 41);
7150 }
7151 }
7152 }
7153
7154
7155 /*
7156 DefOptSubrange := [ SubrangeType |
7157
7158 % putType (typeDes, typeExp) %
7159 ]
7160
7161 first symbols:lsbratok
7162
7163 reachend
7164 */
7165
7166 static void DefOptSubrange (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7167 {
7168 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7169 {
7170 /* avoid gcc warning by using compound statement even if not strictly necessary. */
7171 /* seen optional [ | ] expression */
7172 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7173 {
7174 SubrangeType (stopset0, stopset1, stopset2);
7175 }
7176 else
7177 {
7178 decl_putType (typeDes, typeExp);
7179 }
7180 }
7181 /* end of optional [ | ] expression */
7182 }
7183
7184
7185 /*
7186 DefTypeEquiv := DefQualident DefOptSubrange
7187
7188 first symbols:identtok
7189
7190 cannot reachend
7191 */
7192
7193 static void DefTypeEquiv (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7194 {
7195 DefQualident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
7196 DefOptSubrange (stopset0, stopset1, stopset2);
7197 }
7198
7199
7200 /*
7201 DefEnumIdentList :=
7202 % VAR n, f: node ; %
7203
7204 % n := makeEnum () %
7205 Ident
7206 % f := makeEnumField (n, curident) %
7207 { ',' Ident
7208 % f := makeEnumField (n, curident) %
7209 }
7210 % IF typeDes # NIL THEN putType (typeDes, n) END %
7211
7212
7213 first symbols:identtok
7214
7215 cannot reachend
7216 */
7217
7218 static void DefEnumIdentList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7219 {
7220 decl_node n;
7221 decl_node f;
7222
7223 n = decl_makeEnum ();
7224 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7225 f = decl_makeEnumField (n, curident);
7226 while (mcLexBuf_currenttoken == mcReserved_commatok)
7227 {
7228 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7229 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7230 f = decl_makeEnumField (n, curident);
7231 }
7232 /* while */
7233 if (typeDes != NULL)
7234 {
7235 decl_putType (typeDes, n);
7236 }
7237 }
7238
7239
7240 /*
7241 DefEnumeration := '(' DefEnumIdentList ')'
7242
7243 first symbols:lparatok
7244
7245 cannot reachend
7246 */
7247
7248 static void DefEnumeration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7249 {
7250 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7251 DefEnumIdentList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7252 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
7253 }
7254
7255
7256 /*
7257 DefSimpleType := DefTypeEquiv | DefEnumeration |
7258 SubrangeType
7259
7260 first symbols:lsbratok, lparatok, identtok
7261
7262 cannot reachend
7263 */
7264
7265 static void DefSimpleType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7266 {
7267 if (mcLexBuf_currenttoken == mcReserved_identtok)
7268 {
7269 DefTypeEquiv (stopset0, stopset1, stopset2);
7270 }
7271 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
7272 {
7273 /* avoid dangling else. */
7274 DefEnumeration (stopset0, stopset1, stopset2);
7275 }
7276 else if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7277 {
7278 /* avoid dangling else. */
7279 SubrangeType (stopset0, stopset1, stopset2);
7280 }
7281 else
7282 {
7283 /* avoid dangling else. */
7284 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
7285 }
7286 }
7287
7288
7289 /*
7290 DefType := DefSimpleType | ArrayType |
7291 RecordType | SetType | PointerType |
7292 ProcedureType
7293
7294 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
7295
7296 cannot reachend
7297 */
7298
7299 static void DefType (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7300 {
7301 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_identtok))
7302 {
7303 DefSimpleType (stopset0, stopset1, stopset2);
7304 }
7305 else if (mcLexBuf_currenttoken == mcReserved_arraytok)
7306 {
7307 /* avoid dangling else. */
7308 ArrayType (stopset0, stopset1, stopset2);
7309 }
7310 else if (mcLexBuf_currenttoken == mcReserved_recordtok)
7311 {
7312 /* avoid dangling else. */
7313 RecordType (stopset0, stopset1, stopset2);
7314 }
7315 else if ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp2_SetOfStop1) ((1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_settok))
7316 {
7317 /* avoid dangling else. */
7318 SetType (stopset0, stopset1, stopset2);
7319 }
7320 else if (mcLexBuf_currenttoken == mcReserved_pointertok)
7321 {
7322 /* avoid dangling else. */
7323 PointerType (stopset0, stopset1, stopset2);
7324 }
7325 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
7326 {
7327 /* avoid dangling else. */
7328 ProcedureType (stopset0, stopset1, stopset2);
7329 }
7330 else
7331 {
7332 /* avoid dangling else. */
7333 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
7334 }
7335 }
7336
7337
7338 /*
7339 DefTypeDeclaration := { Ident
7340 % typeDes := lookupSym (curident) %
7341 ( ';' | '=' DefType Alignment
7342 ';' ) }
7343
7344 first symbols:identtok
7345
7346 reachend
7347 */
7348
7349 static void DefTypeDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7350 {
7351 while (mcLexBuf_currenttoken == mcReserved_identtok)
7352 {
7353 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
7354 typeDes = decl_lookupSym (curident);
7355 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
7356 {
7357 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7358 }
7359 else if (mcLexBuf_currenttoken == mcReserved_equaltok)
7360 {
7361 /* avoid dangling else. */
7362 Expect (mcReserved_equaltok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7363 DefType (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7364 Alignment (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7365 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7366 }
7367 else
7368 {
7369 /* avoid dangling else. */
7370 ErrorArray ((const char *) "expecting one of: = ;", 21);
7371 }
7372 }
7373 /* while */
7374 }
7375
7376
7377 /*
7378 DefConstantDeclaration := Ident '=' ConstExpression
7379
7380 first symbols:identtok
7381
7382 cannot reachend
7383 */
7384
7385 static void DefConstantDeclaration (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7386 {
7387 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
7388 Expect (mcReserved_equaltok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
7389 ConstExpression (stopset0, stopset1, stopset2);
7390 }
7391
7392
7393 /*
7394 Definition := 'CONST' { DefConstantDeclaration ';' } |
7395 'TYPE' { DefTypeDeclaration } |
7396 'VAR' { DefVariableDeclaration ';' } |
7397 DefProcedureHeading ';'
7398
7399 first symbols:proceduretok, vartok, typetok, consttok
7400
7401 cannot reachend
7402 */
7403
7404 static void Definition (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7405 {
7406 if (mcLexBuf_currenttoken == mcReserved_consttok)
7407 {
7408 Expect (mcReserved_consttok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7409 while (mcLexBuf_currenttoken == mcReserved_identtok)
7410 {
7411 DefConstantDeclaration (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7412 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7413 }
7414 /* while */
7415 }
7416 else if (mcLexBuf_currenttoken == mcReserved_typetok)
7417 {
7418 /* avoid dangling else. */
7419 Expect (mcReserved_typetok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7420 while (mcLexBuf_currenttoken == mcReserved_identtok)
7421 {
7422 DefTypeDeclaration (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7423 }
7424 /* while */
7425 }
7426 else if (mcLexBuf_currenttoken == mcReserved_vartok)
7427 {
7428 /* avoid dangling else. */
7429 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7430 while (mcLexBuf_currenttoken == mcReserved_identtok)
7431 {
7432 DefVariableDeclaration (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7433 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7434 }
7435 /* while */
7436 }
7437 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
7438 {
7439 /* avoid dangling else. */
7440 DefProcedureHeading (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7441 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7442 }
7443 else
7444 {
7445 /* avoid dangling else. */
7446 ErrorArray ((const char *) "expecting one of: PROCEDURE VAR TYPE CONST", 42);
7447 }
7448 }
7449
7450
7451 /*
7452 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
7453 ')'
7454
7455 first symbols:asmtok
7456
7457 cannot reachend
7458 */
7459
7460 static void AsmStatement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7461 {
7462 Expect (mcReserved_asmtok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_volatiletok-mcReserved_recordtok))));
7463 if (mcLexBuf_currenttoken == mcReserved_volatiletok)
7464 {
7465 Expect (mcReserved_volatiletok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
7466 }
7467 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7468 AsmOperands (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7469 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
7470 }
7471
7472
7473 /*
7474 AsmOperands := string [ AsmOperandSpec ]
7475
7476 first symbols:stringtok
7477
7478 cannot reachend
7479 */
7480
7481 static void AsmOperands (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7482 {
7483 string (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7484 if (mcLexBuf_currenttoken == mcReserved_colontok)
7485 {
7486 AsmOperandSpec (stopset0, stopset1, stopset2);
7487 }
7488 }
7489
7490
7491 /*
7492 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
7493 ':' TrashList ] ] ]
7494
7495 first symbols:colontok
7496
7497 reachend
7498 */
7499
7500 static void AsmOperandSpec (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7501 {
7502 if (mcLexBuf_currenttoken == mcReserved_colontok)
7503 {
7504 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7505 AsmList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7506 if (mcLexBuf_currenttoken == mcReserved_colontok)
7507 {
7508 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7509 AsmList (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7510 if (mcLexBuf_currenttoken == mcReserved_colontok)
7511 {
7512 Expect (mcReserved_colontok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7513 TrashList (stopset0, stopset1, stopset2);
7514 }
7515 }
7516 }
7517 }
7518
7519
7520 /*
7521 AsmList := [ AsmElement ] { ',' AsmElement }
7522
7523 first symbols:lsbratok, stringtok, commatok
7524
7525 reachend
7526 */
7527
7528 static void AsmList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7529 {
7530 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_stringtok))
7531 {
7532 AsmElement (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7533 }
7534 while (mcLexBuf_currenttoken == mcReserved_commatok)
7535 {
7536 Expect (mcReserved_commatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7537 AsmElement (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7538 }
7539 /* while */
7540 }
7541
7542
7543 /*
7544 NamedOperand := '[' Ident ']'
7545
7546 first symbols:lsbratok
7547
7548 cannot reachend
7549 */
7550
7551 static void NamedOperand (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7552 {
7553 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7554 Ident (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7555 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
7556 }
7557
7558
7559 /*
7560 AsmOperandName := [ NamedOperand ]
7561
7562 first symbols:lsbratok
7563
7564 reachend
7565 */
7566
7567 static void AsmOperandName (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7568 {
7569 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7570 {
7571 NamedOperand (stopset0, stopset1, stopset2);
7572 }
7573 }
7574
7575
7576 /*
7577 AsmElement := AsmOperandName string '(' Expression
7578 ')'
7579
7580 first symbols:stringtok, lsbratok
7581
7582 cannot reachend
7583 */
7584
7585 static void AsmElement (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7586 {
7587 AsmOperandName (stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7588 string (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
7589 Expect (mcReserved_lparatok, stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp2_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7590 Expression (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7591 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
7592 }
7593
7594
7595 /*
7596 TrashList := [ string ] { ',' string }
7597
7598 first symbols:commatok, stringtok
7599
7600 reachend
7601 */
7602
7603 static void TrashList (mcp2_SetOfStop0 stopset0, mcp2_SetOfStop1 stopset1, mcp2_SetOfStop2 stopset2)
7604 {
7605 if (mcLexBuf_currenttoken == mcReserved_stringtok)
7606 {
7607 string (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7608 }
7609 while (mcLexBuf_currenttoken == mcReserved_commatok)
7610 {
7611 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp2_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7612 string (stopset0|(mcp2_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7613 }
7614 /* while */
7615 }
7616
7617
7618 /*
7619 CompilationUnit - returns TRUE if the input was correct enough to parse
7620 in future passes.
7621 */
7622
7623 extern "C" bool mcp2_CompilationUnit (void)
7624 {
7625 WasNoError = true;
7626 FileUnit ((mcp2_SetOfStop0) ((1 << (mcReserved_eoftok-mcReserved_eoftok))), (mcp2_SetOfStop1) 0, (mcp2_SetOfStop2) 0);
7627 return WasNoError;
7628 /* static analysis guarentees a RETURN statement will be used before here. */
7629 __builtin_unreachable ();
7630 }
7631
7632 extern "C" void _M2_mcp2_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
7633 {
7634 }
7635
7636 extern "C" void _M2_mcp2_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
7637 {
7638 }