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