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