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