Line data Source code
1 : /* do not edit automatically generated by mc from P3Build. */
2 : /* output from m2-3.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 _P3Build_C
44 :
45 : #include "GP3Build.h"
46 : # include "GM2LexBuf.h"
47 : # include "GM2Error.h"
48 : # include "GNameKey.h"
49 : # include "GDynamicStrings.h"
50 : # include "GM2Printf.h"
51 : # include "GM2Debug.h"
52 : # include "GP2SymBuild.h"
53 : # include "GM2MetaError.h"
54 : # include "GM2CaseList.h"
55 : # include "GM2StackSpell.h"
56 : # include "GM2Reserved.h"
57 : # include "GM2Quads.h"
58 : # include "GP3SymBuild.h"
59 : # include "GSymbolTable.h"
60 : # include "GM2Batch.h"
61 : # include "GM2StateCheck.h"
62 :
63 : # define Debugging false
64 : # define DebugAsm false
65 : typedef unsigned int P3Build_stop0;
66 :
67 : typedef unsigned int P3Build_SetOfStop0;
68 :
69 : typedef unsigned int P3Build_stop1;
70 :
71 : typedef unsigned int P3Build_SetOfStop1;
72 :
73 : typedef unsigned int P3Build_stop2;
74 :
75 : typedef unsigned int P3Build_SetOfStop2;
76 :
77 : # define Pass1 false
78 : static bool seenError;
79 : static M2StateCheck_StateCheck BlockState;
80 :
81 : /*
82 : CompilationUnit - returns TRUE if the input was correct enough to parse
83 : in future passes.
84 : */
85 :
86 : extern "C" bool P3Build_CompilationUnit (void);
87 : static void ErrorString (DynamicStrings_String s);
88 : static void ErrorArray (const char *a_, unsigned int _a_high);
89 :
90 : /*
91 : DescribeStop - issues a message explaining what tokens were expected
92 : */
93 :
94 : static DynamicStrings_String DescribeStop (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
95 :
96 : /*
97 : DescribeError - issues a message explaining what tokens were expected
98 : */
99 :
100 : static void DescribeError (void);
101 :
102 : /*
103 : SyntaxError - after a syntax error we skip all tokens up until we reach
104 : a stop symbol.
105 : */
106 :
107 : static void SyntaxError (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
108 :
109 : /*
110 : SyntaxCheck -
111 : */
112 :
113 : static void SyntaxCheck (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
114 :
115 : /*
116 : WarnMissingToken - generates a warning message about a missing token, t.
117 : */
118 :
119 : static void WarnMissingToken (M2Reserved_toktype t);
120 :
121 : /*
122 : MissingToken - generates a warning message about a missing token, t.
123 : */
124 :
125 : static void MissingToken (M2Reserved_toktype t);
126 :
127 : /*
128 : CheckAndInsert -
129 : */
130 :
131 : static bool CheckAndInsert (M2Reserved_toktype t, P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
132 :
133 : /*
134 : InStopSet
135 : */
136 :
137 : static bool InStopSet (M2Reserved_toktype t, P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
138 :
139 : /*
140 : PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
141 : If it is not then it will insert a token providing the token
142 : is one of ; ] ) } . OF END ,
143 :
144 : if the stopset contains <identtok> then we do not insert a token
145 : */
146 :
147 : static void PeepToken (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
148 :
149 : /*
150 : Expect -
151 : */
152 :
153 : static void Expect (M2Reserved_toktype t, P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
154 :
155 : /*
156 : Ident - error checking varient of Ident
157 : */
158 :
159 : static void Ident (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
160 :
161 : /*
162 : string -
163 : */
164 :
165 : static void string (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
166 :
167 : /*
168 : Integer -
169 : */
170 :
171 : static void Integer (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
172 :
173 : /*
174 : Real -
175 : */
176 :
177 : static void Real (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
178 :
179 : /*
180 : PushTFQualident - push the result of the Qualident
181 : to the stack. It checks to see if init
182 : is a procedure or proc type and if so
183 : it does not push the return type.
184 : */
185 :
186 : static void PushTFQualident (unsigned int tok, unsigned int tokstart, unsigned int init);
187 :
188 : /*
189 : CheckModuleQualident - check to see if the beginning ident of the qualident is an
190 : imported module.
191 : */
192 :
193 : static void CheckModuleQualident (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
194 :
195 : /*
196 : FileUnit :=
197 : % PushAutoOff %
198 : ( DefinitionModule |
199 : ImplementationOrProgramModule )
200 : % PopAuto %
201 :
202 :
203 : first symbols:implementationtok, moduletok, definitiontok
204 :
205 : cannot reachend
206 : */
207 :
208 : static void FileUnit (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
209 :
210 : /*
211 : ProgramModule :=
212 : % VAR modulet, endt, namet: CARDINAL ; %
213 :
214 : % modulet := GetTokenNo () %
215 : 'MODULE'
216 : % M2Error.DefaultProgramModule %
217 :
218 : % PushAutoOn %
219 : Ident
220 : % P3StartBuildProgModule %
221 :
222 : % StartBuildModFile (modulet) %
223 :
224 : % BuildModuleStart (modulet) %
225 :
226 : % PushAutoOff %
227 : [ Priority ] ';'
228 : % BuildScaffold (modulet,
229 : GetCurrentModule ()) %
230 : { Import } Block
231 : % PushAutoOn %
232 :
233 : % endt := GetTokenNo () -1 %
234 :
235 : % namet := GetTokenNo () %
236 : Ident
237 : % EndBuildFile (endt) %
238 :
239 : % P3EndBuildProgModule (namet) %
240 : '.'
241 : % PopAuto ; PopAuto %
242 :
243 :
244 : first symbols:moduletok
245 :
246 : cannot reachend
247 : */
248 :
249 : static void ProgramModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
250 :
251 : /*
252 : ImplementationModule :=
253 : % VAR modulet, endt, namet: CARDINAL ; %
254 :
255 : % modulet := GetTokenNo () %
256 : 'IMPLEMENTATION'
257 : % M2Error.DefaultImplementationModule %
258 : 'MODULE'
259 : % PushAutoOn %
260 : Ident
261 : % StartBuildModFile (modulet) %
262 :
263 : % P3StartBuildImpModule %
264 :
265 : % BuildModuleStart (modulet) %
266 :
267 : % PushAutoOff %
268 : [ Priority ] ';'
269 : % BuildScaffold (modulet,
270 : GetCurrentModule ()) %
271 : { Import } Block
272 : % PushAutoOn %
273 :
274 : % endt := GetTokenNo () -1 %
275 :
276 : % namet := GetTokenNo () %
277 : Ident
278 : % EndBuildFile (endt) %
279 :
280 : % P3EndBuildImpModule (namet) %
281 : '.'
282 : % PopAuto ; PopAuto ; PopAuto %
283 :
284 :
285 : first symbols:implementationtok
286 :
287 : cannot reachend
288 : */
289 :
290 : static void ImplementationModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
291 :
292 : /*
293 : ImplementationOrProgramModule :=
294 : % PushAutoOff %
295 : ( ImplementationModule |
296 : ProgramModule )
297 :
298 : % PopAuto %
299 :
300 :
301 : first symbols:moduletok, implementationtok
302 :
303 : cannot reachend
304 : */
305 :
306 : static void ImplementationOrProgramModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
307 :
308 : /*
309 : Number := Integer | Real
310 :
311 : first symbols:realtok, integertok
312 :
313 : cannot reachend
314 : */
315 :
316 : static void Number (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
317 :
318 : /*
319 : Qualident := Ident
320 : % IF IsAutoPushOn()
321 : THEN
322 : CheckModuleQualident (stopset0, stopset1, stopset2)
323 : ELSE just parse qualident %
324 : { '.' Ident }
325 : % END %
326 :
327 :
328 : first symbols:identtok
329 :
330 : cannot reachend
331 : */
332 :
333 : static void Qualident (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
334 :
335 : /*
336 : QualidentCheck :=
337 : % PushAutoOn %
338 : Qualident
339 : % PopAuto %
340 :
341 : % CheckQualident (OperandTok (1), BlockState, OperandT (1)) %
342 :
343 : % IF NOT IsAutoPushOn ()
344 : THEN
345 : PopNothing
346 : END %
347 :
348 :
349 : first symbols:identtok
350 :
351 : cannot reachend
352 : */
353 :
354 : static void QualidentCheck (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
355 :
356 : /*
357 : ConstantDeclaration :=
358 : % VAR tokno: CARDINAL ; %
359 :
360 : % InclConst (BlockState) %
361 :
362 : % PushAutoOn %
363 : ( Ident '='
364 : % tokno := GetTokenNo () -1 %
365 :
366 : % BuildConst %
367 : ConstExpression )
368 : % BuildAssignConstant (tokno) %
369 :
370 : % PopAuto %
371 :
372 : % ExclConst (BlockState) %
373 :
374 :
375 : first symbols:identtok
376 :
377 : cannot reachend
378 : */
379 :
380 : static void ConstantDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
381 :
382 : /*
383 : ConstExpression :=
384 : % VAR tokpos: CARDINAL ; %
385 :
386 : % PushInConstExpression %
387 :
388 : % PushAutoOn %
389 : SimpleConstExpr [ Relation
390 : % tokpos := GetTokenNo ()-1 %
391 : SimpleConstExpr
392 :
393 : % BuildRelOp (tokpos) %
394 : ]
395 : % PopAuto %
396 :
397 : % PopInConstExpression %
398 :
399 :
400 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
401 :
402 : cannot reachend
403 : */
404 :
405 : static void ConstExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
406 :
407 : /*
408 : Relation := '='
409 : % PushTtok(EqualTok, GetTokenNo() -1) ;
410 : RecordOp %
411 : | '#'
412 : % PushTtok(HashTok, GetTokenNo() -1) ;
413 : RecordOp %
414 : | '<>'
415 : % PushTtok(LessGreaterTok, GetTokenNo() -1) ;
416 : RecordOp %
417 : | '<'
418 : % PushTtok(LessTok, GetTokenNo() -1) %
419 : | '<='
420 : % PushTtok(LessEqualTok, GetTokenNo() -1) %
421 : | '>'
422 : % PushTtok(GreaterTok, GetTokenNo() -1) %
423 : | '>='
424 : % PushTtok(GreaterEqualTok, GetTokenNo() -1) %
425 : | 'IN'
426 : % PushTtok(InTok, GetTokenNo() -1) %
427 :
428 :
429 : first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
430 :
431 : cannot reachend
432 : */
433 :
434 : static void Relation (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
435 :
436 : /*
437 : SimpleConstExpr := UnaryOrConstTerm { AddOperator
438 : ConstTerm
439 :
440 : % BuildBinaryOp %
441 : }
442 :
443 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
444 :
445 : cannot reachend
446 : */
447 :
448 : static void SimpleConstExpr (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
449 :
450 : /*
451 : UnaryOrConstTerm := '+'
452 : % PushTtok(PlusTok, GetTokenNo() -1) %
453 : ConstTerm
454 : % BuildUnaryOp %
455 : | '-'
456 : % PushTtok(MinusTok, GetTokenNo() -1) %
457 : ConstTerm
458 : % BuildUnaryOp %
459 : | ConstTerm
460 :
461 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
462 :
463 : cannot reachend
464 : */
465 :
466 : static void UnaryOrConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
467 :
468 : /*
469 : AddOperator := '+'
470 : % PushTtok(PlusTok, GetTokenNo() -1) ;
471 : RecordOp %
472 : | '-'
473 : % PushTtok(MinusTok, GetTokenNo() -1) ;
474 : RecordOp %
475 : | 'OR'
476 : % PushTtok(OrTok, GetTokenNo() -1) ;
477 : RecordOp %
478 :
479 :
480 : first symbols:ortok, minustok, plustok
481 :
482 : cannot reachend
483 : */
484 :
485 : static void AddOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
486 :
487 : /*
488 : ConstTerm := ConstFactor { MulOperator ConstFactor
489 :
490 : % BuildBinaryOp %
491 : }
492 :
493 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
494 :
495 : cannot reachend
496 : */
497 :
498 : static void ConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
499 :
500 : /*
501 : MulOperator := '*'
502 : % PushTtok(TimesTok, GetTokenNo() -1) ;
503 : RecordOp %
504 : | '/'
505 : % PushTtok(DivideTok, GetTokenNo() -1) ;
506 : RecordOp %
507 : | 'DIV'
508 : % PushTtok(DivTok, GetTokenNo() -1) ;
509 : RecordOp %
510 : | 'MOD'
511 : % PushTtok(ModTok, GetTokenNo() -1) ;
512 : RecordOp %
513 : | 'REM'
514 : % PushTtok(RemTok, GetTokenNo() -1) ;
515 : RecordOp %
516 : | 'AND'
517 : % PushTtok(AndTok, GetTokenNo() -1) ;
518 : RecordOp %
519 : | '&'
520 : % PushTtok(AmbersandTok, GetTokenNo() -1) ;
521 : RecordOp %
522 :
523 :
524 : first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
525 :
526 : cannot reachend
527 : */
528 :
529 : static void MulOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
530 :
531 : /*
532 : ConstFactor :=
533 : % VAR tokpos: CARDINAL ; %
534 : Number | ConstString |
535 : ConstSetOrQualidentOrFunction |
536 : '(' ConstExpression ')' |
537 : 'NOT'
538 : % tokpos := GetTokenNo() -1 %
539 : ConstFactor
540 : % BuildNot (tokpos) %
541 : | ConstAttribute
542 :
543 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
544 :
545 : cannot reachend
546 : */
547 :
548 : static void ConstFactor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
549 :
550 : /*
551 : ConstString := string
552 :
553 : first symbols:stringtok
554 :
555 : cannot reachend
556 : */
557 :
558 : static void ConstString (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
559 :
560 : /*
561 : ComponentElement := ConstExpression ( '..' ConstExpression
562 :
563 : % PushTtok(PeriodPeriodTok, GetTokenNo() -1) %
564 : |
565 :
566 : % PushT(NulTok) %
567 : )
568 :
569 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
570 :
571 : cannot reachend
572 : */
573 :
574 : static void ComponentElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
575 :
576 : /*
577 : ComponentValue :=
578 : % VAR tokpos: CARDINAL ; %
579 : (
580 : % tokpos := GetTokenNo () %
581 : ComponentElement (
582 : % tokpos := GetTokenNo () %
583 : 'BY' ConstExpression
584 :
585 : % PushTtok (ByTok, tokpos) %
586 : |
587 :
588 : % PushTtok (NulTok, tokpos) %
589 : ) )
590 :
591 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
592 :
593 : cannot reachend
594 : */
595 :
596 : static void ComponentValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
597 :
598 : /*
599 : ArraySetRecordValue := ComponentValue
600 : % BuildComponentValue %
601 : { ','
602 : % NextConstructorField %
603 : ComponentValue
604 : % BuildComponentValue %
605 : }
606 :
607 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
608 :
609 : cannot reachend
610 : */
611 :
612 : static void ArraySetRecordValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
613 :
614 : /*
615 : Constructor :=
616 : % VAR tokpos: CARDINAL ; %
617 :
618 : % DisplayStack %
619 :
620 : % InclConstructor (BlockState) %
621 :
622 : % CheckQualident (OperandTok (1), BlockState, OperandT (1)) %
623 : '{'
624 : % tokpos := GetTokenNo () -1 %
625 :
626 : % BuildConstructorStart (tokpos) %
627 : [ ArraySetRecordValue ]
628 : % BuildConstructorEnd (tokpos, GetTokenNo()) %
629 : '}'
630 : % ExclConstructor (BlockState) %
631 :
632 :
633 : first symbols:lcbratok
634 :
635 : cannot reachend
636 : */
637 :
638 : static void Constructor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
639 :
640 : /*
641 : ConstSetOrQualidentOrFunction :=
642 : % VAR tokpos: CARDINAL ; %
643 :
644 : % tokpos := GetTokenNo () %
645 : ( Qualident [ Constructor |
646 : ConstActualParameters
647 :
648 : % BuildConstFunctionCall %
649 : ] |
650 :
651 : % BuildTypeForConstructor (tokpos) %
652 : Constructor )
653 :
654 : first symbols:lcbratok, identtok
655 :
656 : cannot reachend
657 : */
658 :
659 : static void ConstSetOrQualidentOrFunction (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
660 :
661 : /*
662 : ConstActualParameters :=
663 : % PushState (BlockState) %
664 :
665 : % InclConstFunc (BlockState) %
666 :
667 : % CheckQualident (OperandTok (1), BlockState, OperandT (1)) %
668 :
669 : % PushInConstParameters %
670 : ActualParameters
671 : % PopInConstParameters %
672 :
673 : % PopState (BlockState) %
674 :
675 :
676 : first symbols:lparatok
677 :
678 : cannot reachend
679 : */
680 :
681 : static void ConstActualParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
682 :
683 : /*
684 : ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
685 : '(' '('
686 : % PushAutoOn %
687 : ConstAttributeExpression
688 : % PopAuto %
689 : ')' ')'
690 :
691 : first symbols:attributetok
692 :
693 : cannot reachend
694 : */
695 :
696 : static void ConstAttribute (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
697 :
698 : /*
699 : ConstAttributeExpression := Ident
700 : % BuildBuiltinConst %
701 : | '<' Qualident ','
702 : Ident
703 : % BuildBuiltinTypeInfo %
704 : '>'
705 :
706 : first symbols:lesstok, identtok
707 :
708 : cannot reachend
709 : */
710 :
711 : static void ConstAttributeExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
712 :
713 : /*
714 : ByteAlignment :=
715 : % VAR tokpos: CARDINAL ; %
716 : ''
717 : % PopAuto %
718 :
719 :
720 : first symbols:ldirectivetok
721 :
722 : cannot reachend
723 : */
724 :
725 : static void ByteAlignment (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
726 :
727 : /*
728 : Alignment := [ ByteAlignment ]
729 :
730 : first symbols:ldirectivetok
731 :
732 : reachend
733 : */
734 :
735 : static void Alignment (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
736 :
737 : /*
738 : TypeDeclaration :=
739 : % InclType (BlockState) %
740 : Ident '=' Type Alignment
741 : % ExclType (BlockState) %
742 :
743 :
744 : first symbols:identtok
745 :
746 : cannot reachend
747 : */
748 :
749 : static void TypeDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
750 :
751 : /*
752 : Type :=
753 : % PushAutoOff %
754 : ( SimpleType | ArrayType | RecordType |
755 : SetType | PointerType |
756 : ProcedureType )
757 : % PopAuto %
758 :
759 :
760 : first symbols:lparatok, lsbratok, proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok
761 :
762 : cannot reachend
763 : */
764 :
765 : static void Type (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
766 :
767 : /*
768 : SimpleType := QualidentCheck [ SubrangeType ] |
769 : Enumeration | SubrangeType
770 :
771 : first symbols:lsbratok, lparatok, identtok
772 :
773 : cannot reachend
774 : */
775 :
776 : static void SimpleType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
777 :
778 : /*
779 : Enumeration := '(' ( IdentList ) ')'
780 :
781 : first symbols:lparatok
782 :
783 : cannot reachend
784 : */
785 :
786 : static void Enumeration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
787 :
788 : /*
789 : IdentList := Ident
790 : % VAR
791 : on: BOOLEAN ;
792 : n : CARDINAL ; %
793 :
794 : % on := IsAutoPushOn() ;
795 : IF on
796 : THEN
797 : n := 1
798 : END %
799 : { ',' Ident
800 : % IF on
801 : THEN
802 : INC(n)
803 : END %
804 : }
805 : % IF on
806 : THEN
807 : PushT(n)
808 : END %
809 :
810 :
811 : first symbols:identtok
812 :
813 : cannot reachend
814 : */
815 :
816 : static void IdentList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
817 :
818 : /*
819 : SubrangeType := '[' ConstExpression '..' ConstExpression
820 : ']'
821 : % BuildSubrange ; %
822 :
823 :
824 : first symbols:lsbratok
825 :
826 : cannot reachend
827 : */
828 :
829 : static void SubrangeType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
830 :
831 : /*
832 : ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
833 : 'OF' Type
834 :
835 : first symbols:arraytok
836 :
837 : cannot reachend
838 : */
839 :
840 : static void ArrayType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
841 :
842 : /*
843 : RecordType := 'RECORD' [ DefaultRecordAttributes ]
844 : FieldListSequence 'END'
845 :
846 : first symbols:recordtok
847 :
848 : cannot reachend
849 : */
850 :
851 : static void RecordType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
852 :
853 : /*
854 : DefaultRecordAttributes := ''
855 :
856 : first symbols:ldirectivetok
857 :
858 : cannot reachend
859 : */
860 :
861 : static void DefaultRecordAttributes (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
862 :
863 : /*
864 : RecordFieldPragma := [ '' ]
865 :
866 : first symbols:ldirectivetok
867 :
868 : reachend
869 : */
870 :
871 : static void RecordFieldPragma (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
872 :
873 : /*
874 : FieldPragmaExpression :=
875 : % PushAutoOn %
876 : Ident PragmaConstExpression
877 :
878 : % BuildPragmaField %
879 :
880 : % PopAuto %
881 :
882 :
883 : first symbols:identtok
884 :
885 : cannot reachend
886 : */
887 :
888 : static void FieldPragmaExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
889 :
890 : /*
891 : PragmaConstExpression := ( '(' ConstExpression ')' |
892 :
893 : % PushT(NulSym) %
894 :
895 : % Annotate('NulSym||no pragma const') %
896 : )
897 :
898 : first symbols:lparatok
899 :
900 : reachend
901 : */
902 :
903 : static void PragmaConstExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
904 :
905 : /*
906 : AttributeExpression := Ident '(' ConstExpression
907 : ')'
908 :
909 : first symbols:identtok
910 :
911 : cannot reachend
912 : */
913 :
914 : static void AttributeExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
915 :
916 : /*
917 : FieldListSequence := FieldListStatement { ';' FieldListStatement }
918 :
919 : first symbols:casetok, identtok, semicolontok
920 :
921 : reachend
922 : */
923 :
924 : static void FieldListSequence (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
925 :
926 : /*
927 : FieldListStatement := [ FieldList ]
928 :
929 : first symbols:identtok, casetok
930 :
931 : reachend
932 : */
933 :
934 : static void FieldListStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
935 :
936 : /*
937 : FieldList := IdentList ':' Type RecordFieldPragma |
938 : 'CASE'
939 : % BeginVarient %
940 : CaseTag 'OF' Varient { '|' Varient }
941 : [ 'ELSE'
942 : % ElseVarient %
943 : FieldListSequence ] 'END'
944 : % EndVarient %
945 :
946 :
947 : first symbols:casetok, identtok
948 :
949 : cannot reachend
950 : */
951 :
952 : static void FieldList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
953 :
954 : /*
955 : TagIdent := [ Ident ]
956 :
957 : first symbols:identtok
958 :
959 : reachend
960 : */
961 :
962 : static void TagIdent (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
963 :
964 : /*
965 : CaseTag := TagIdent [ ':' QualidentCheck ]
966 :
967 : first symbols:colontok, identtok
968 :
969 : reachend
970 : */
971 :
972 : static void CaseTag (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
973 :
974 : /*
975 : Varient := [
976 : % BeginVarientList %
977 : VarientCaseLabelList ':' FieldListSequence
978 :
979 : % EndVarientList %
980 : ]
981 :
982 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
983 :
984 : reachend
985 : */
986 :
987 : static void Varient (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
988 :
989 : /*
990 : VarientCaseLabelList := VarientCaseLabels { ','
991 : VarientCaseLabels }
992 :
993 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
994 :
995 : cannot reachend
996 : */
997 :
998 : static void VarientCaseLabelList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
999 :
1000 : /*
1001 : VarientCaseLabels := ConstExpression ( '..' ConstExpression
1002 :
1003 : % AddVarientRange %
1004 : |
1005 :
1006 : % AddVarientEquality ; epsilon %
1007 : )
1008 :
1009 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1010 :
1011 : cannot reachend
1012 : */
1013 :
1014 : static void VarientCaseLabels (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1015 :
1016 : /*
1017 : SilentConstExpression :=
1018 : % PushAutoOff %
1019 : SilentSimpleConstExpr [
1020 : SilentRelation SilentSimpleConstExpr ]
1021 : % PopAuto %
1022 :
1023 :
1024 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1025 :
1026 : cannot reachend
1027 : */
1028 :
1029 : static void SilentConstExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1030 :
1031 : /*
1032 : SilentRelation := '=' | '#' | '<>' | '<' |
1033 : '<=' | '>' | '>=' | 'IN'
1034 :
1035 : first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
1036 :
1037 : cannot reachend
1038 : */
1039 :
1040 : static void SilentRelation (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1041 :
1042 : /*
1043 : SilentSimpleConstExpr := SilentUnaryOrConstTerm
1044 : { SilentAddOperator SilentConstTerm }
1045 :
1046 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1047 :
1048 : cannot reachend
1049 : */
1050 :
1051 : static void SilentSimpleConstExpr (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1052 :
1053 : /*
1054 : SilentUnaryOrConstTerm := '+' SilentConstTerm |
1055 : '-' SilentConstTerm |
1056 : SilentConstTerm
1057 :
1058 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1059 :
1060 : cannot reachend
1061 : */
1062 :
1063 : static void SilentUnaryOrConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1064 :
1065 : /*
1066 : SilentAddOperator := '+' | '-' | 'OR'
1067 :
1068 : first symbols:ortok, minustok, plustok
1069 :
1070 : cannot reachend
1071 : */
1072 :
1073 : static void SilentAddOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1074 :
1075 : /*
1076 : SilentConstTerm := SilentConstFactor { SilentMulOperator
1077 : SilentConstFactor }
1078 :
1079 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
1080 :
1081 : cannot reachend
1082 : */
1083 :
1084 : static void SilentConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1085 :
1086 : /*
1087 : SilentMulOperator := '*' | '/' | 'DIV' |
1088 : 'MOD' | 'REM' | 'AND' |
1089 : '&'
1090 :
1091 : first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
1092 :
1093 : cannot reachend
1094 : */
1095 :
1096 : static void SilentMulOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1097 :
1098 : /*
1099 : SilentConstFactor := Number | SilentConstString |
1100 : SilentConstSetOrQualidentOrFunction |
1101 : '(' SilentConstExpression ')' |
1102 : 'NOT' SilentConstFactor |
1103 : SilentConstAttribute
1104 :
1105 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok
1106 :
1107 : cannot reachend
1108 : */
1109 :
1110 : static void SilentConstFactor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1111 :
1112 : /*
1113 : SilentConstString := string
1114 :
1115 : first symbols:stringtok
1116 :
1117 : cannot reachend
1118 : */
1119 :
1120 : static void SilentConstString (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1121 :
1122 : /*
1123 : SilentConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
1124 : '(' '(' SilentConstAttributeExpression
1125 : ')' ')'
1126 :
1127 : first symbols:attributetok
1128 :
1129 : cannot reachend
1130 : */
1131 :
1132 : static void SilentConstAttribute (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1133 :
1134 : /*
1135 : SilentConstAttributeExpression := Ident |
1136 : '<' Ident ','
1137 : SilentConstString
1138 : '>'
1139 :
1140 : first symbols:lesstok, identtok
1141 :
1142 : cannot reachend
1143 : */
1144 :
1145 : static void SilentConstAttributeExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1146 :
1147 : /*
1148 : SilentComponentElement := SilentConstExpression
1149 : [ '..' SilentConstExpression ]
1150 :
1151 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1152 :
1153 : cannot reachend
1154 : */
1155 :
1156 : static void SilentComponentElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1157 :
1158 : /*
1159 : SilentComponentValue := SilentComponentElement [
1160 : 'BY' SilentConstExpression ]
1161 :
1162 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1163 :
1164 : cannot reachend
1165 : */
1166 :
1167 : static void SilentComponentValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1168 :
1169 : /*
1170 : SilentArraySetRecordValue := SilentComponentValue
1171 : { ',' SilentComponentValue }
1172 :
1173 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1174 :
1175 : cannot reachend
1176 : */
1177 :
1178 : static void SilentArraySetRecordValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1179 :
1180 : /*
1181 : SilentConstructor := '{'
1182 : % SilentBuildConstructorStart %
1183 : [ SilentArraySetRecordValue ]
1184 : '}'
1185 :
1186 : first symbols:lcbratok
1187 :
1188 : cannot reachend
1189 : */
1190 :
1191 : static void SilentConstructor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1192 :
1193 : /*
1194 : SilentConstSetOrQualidentOrFunction := SilentConstructor |
1195 : Qualident
1196 : [ SilentConstructor |
1197 : SilentActualParameters ]
1198 :
1199 : first symbols:identtok, lcbratok
1200 :
1201 : cannot reachend
1202 : */
1203 :
1204 : static void SilentConstSetOrQualidentOrFunction (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1205 :
1206 : /*
1207 : SilentActualParameters := '(' [ SilentExpList ]
1208 : ')'
1209 :
1210 : first symbols:lparatok
1211 :
1212 : cannot reachend
1213 : */
1214 :
1215 : static void SilentActualParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1216 :
1217 : /*
1218 : SilentExpList := SilentConstExpression { ',' SilentConstExpression }
1219 :
1220 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1221 :
1222 : cannot reachend
1223 : */
1224 :
1225 : static void SilentExpList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1226 :
1227 : /*
1228 : SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
1229 :
1230 : first symbols:oftok, packedsettok, settok
1231 :
1232 : cannot reachend
1233 : */
1234 :
1235 : static void SetType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1236 :
1237 : /*
1238 : PointerType := 'POINTER' 'TO' Type
1239 :
1240 : first symbols:pointertok
1241 :
1242 : cannot reachend
1243 : */
1244 :
1245 : static void PointerType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1246 :
1247 : /*
1248 : ProcedureType := 'PROCEDURE' [ FormalTypeList ]
1249 :
1250 : first symbols:proceduretok
1251 :
1252 : cannot reachend
1253 : */
1254 :
1255 : static void ProcedureType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1256 :
1257 : /*
1258 : FormalTypeList := '(' ( ')' FormalReturn |
1259 : ProcedureParameters ')'
1260 : FormalReturn )
1261 :
1262 : first symbols:lparatok
1263 :
1264 : cannot reachend
1265 : */
1266 :
1267 : static void FormalTypeList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1268 :
1269 : /*
1270 : FormalReturn := [ ':' OptReturnType ]
1271 :
1272 : first symbols:colontok
1273 :
1274 : reachend
1275 : */
1276 :
1277 : static void FormalReturn (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1278 :
1279 : /*
1280 : OptReturnType := '[' QualidentCheck ']' |
1281 : QualidentCheck
1282 :
1283 : first symbols:identtok, lsbratok
1284 :
1285 : cannot reachend
1286 : */
1287 :
1288 : static void OptReturnType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1289 :
1290 : /*
1291 : ProcedureParameters := ProcedureParameter { ','
1292 : ProcedureParameter }
1293 :
1294 : first symbols:identtok, arraytok, periodperiodperiodtok, vartok
1295 :
1296 : cannot reachend
1297 : */
1298 :
1299 : static void ProcedureParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1300 :
1301 : /*
1302 : ProcedureParameter := '...' | 'VAR' FormalType |
1303 : FormalType
1304 :
1305 : first symbols:arraytok, identtok, vartok, periodperiodperiodtok
1306 :
1307 : cannot reachend
1308 : */
1309 :
1310 : static void ProcedureParameter (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1311 :
1312 : /*
1313 : VarIdent :=
1314 : % VAR
1315 : Sym, Type: CARDINAL ;
1316 : on: BOOLEAN ; %
1317 :
1318 : % on := IsAutoPushOn() %
1319 :
1320 : % IF NOT on
1321 : THEN
1322 : PushAutoOn
1323 : END %
1324 : Ident
1325 : % IF on
1326 : THEN
1327 : PopTF(Sym, Type) ;
1328 : PushTF(Sym, Type) ;
1329 : PushTF(Sym, Type)
1330 : END %
1331 : [ '[' ConstExpression
1332 : % BuildVarAtAddress %
1333 : ']' ]
1334 : % PopNothing ;
1335 : PopAuto %
1336 :
1337 :
1338 : first symbols:identtok
1339 :
1340 : cannot reachend
1341 : */
1342 :
1343 : static void VarIdent (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1344 :
1345 : /*
1346 : VarIdentList := VarIdent
1347 : % VAR
1348 : on: BOOLEAN ;
1349 : n : CARDINAL ; %
1350 :
1351 : % on := IsAutoPushOn() ;
1352 : IF on
1353 : THEN
1354 : n := 1
1355 : END %
1356 : { ',' VarIdent
1357 : % IF on
1358 : THEN
1359 : INC(n)
1360 : END %
1361 : }
1362 : % IF on
1363 : THEN
1364 : PushT(n)
1365 : END %
1366 :
1367 :
1368 : first symbols:identtok
1369 :
1370 : cannot reachend
1371 : */
1372 :
1373 : static void VarIdentList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1374 :
1375 : /*
1376 : VariableDeclaration := VarIdentList ':'
1377 : % InclVar (BlockState) %
1378 : Type Alignment
1379 : % ExclVar (BlockState) %
1380 :
1381 :
1382 : first symbols:identtok
1383 :
1384 : cannot reachend
1385 : */
1386 :
1387 : static void VariableDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1388 :
1389 : /*
1390 : Designator := QualidentCheck
1391 : % CheckWithReference %
1392 : { SubDesignator }
1393 :
1394 : first symbols:identtok
1395 :
1396 : cannot reachend
1397 : */
1398 :
1399 : static void Designator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1400 :
1401 : /*
1402 : SubDesignator := '.'
1403 : % VAR Sym, Type, tok,
1404 : dotpostok: CARDINAL ;
1405 : name : Name ; %
1406 :
1407 : % dotpostok := GetTokenNo () -1 ;
1408 : PopTFtok (Sym, Type, tok) ;
1409 : Type := SkipType(Type) ;
1410 : PushTFtok(Sym, Type, tok) ;
1411 : IF Type=NulSym
1412 : THEN
1413 : IF IsModuleKnown(GetSymName(Sym))
1414 : THEN
1415 : MetaErrorT1 (tok, '{%1a} looks like a module which has not been globally imported (eg. suggest that you IMPORT {%1a}', Sym)
1416 : ELSE
1417 : IF IsUnknown (Sym)
1418 : THEN
1419 : MetaErrorT1 (tok, 'the qualifier {%1Ua} is unknown {%1&siD}', Sym) ;
1420 : UnknownReported (Sym)
1421 : ELSE
1422 : MetaErrorT1 (tok, "the type of {%1ad} is not a record (but {%1tad})", Sym)
1423 : END
1424 : END
1425 : ELSIF NOT IsRecord(Type)
1426 : THEN
1427 : IF IsUnknown (Type)
1428 : THEN
1429 : MetaErrorT1 (tok, 'the qualifier {%1Ua} is unknown {%1&siD}', Type) ;
1430 : UnknownReported (Type)
1431 : ELSE
1432 : MetaErrorT2 (tok, "the type of {%1ad} is not a record (but {%2ad}) and therefore it has no field", Sym, Type)
1433 : END
1434 : END ;
1435 : StartScope(Type) %
1436 : Ident
1437 : % PopTtok (name, tok) ;
1438 : Sym := GetRecordField (GetTokenNo () -1, Type, name) ;
1439 : Type := GetType (Sym) ;
1440 : PushTFtok (Sym, Type, tok) ;
1441 : EndScope ;
1442 : PushT (1) ;
1443 : BuildDesignatorRecord (dotpostok) %
1444 : | '[' ArrayExpList ']' |
1445 : '^'
1446 : % BuildDesignatorPointer (GetTokenNo () -1) %
1447 :
1448 :
1449 : first symbols:uparrowtok, lsbratok, periodtok
1450 :
1451 : cannot reachend
1452 : */
1453 :
1454 : static void SubDesignator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1455 :
1456 : /*
1457 : ArrayExpList := Expression
1458 : % BuildBooleanVariable %
1459 :
1460 : % BuildDesignatorArray %
1461 : { ',' Expression
1462 : % BuildBooleanVariable %
1463 :
1464 : % BuildDesignatorArray %
1465 : }
1466 :
1467 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1468 :
1469 : cannot reachend
1470 : */
1471 :
1472 : static void ArrayExpList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1473 :
1474 : /*
1475 : ExpList :=
1476 : % VAR n: CARDINAL ; %
1477 : Expression
1478 : % BuildBooleanVariable %
1479 :
1480 : % n := 1 %
1481 : { ',' Expression
1482 : % BuildBooleanVariable %
1483 :
1484 : % INC(n) %
1485 : }
1486 : % PushT(n) %
1487 :
1488 :
1489 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1490 :
1491 : cannot reachend
1492 : */
1493 :
1494 : static void ExpList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1495 :
1496 : /*
1497 : Expression :=
1498 : % VAR tokpos: CARDINAL ; %
1499 :
1500 : % PushAutoOn %
1501 : SimpleExpression [ Relation
1502 : % tokpos := GetTokenNo ()-1 %
1503 : SimpleExpression
1504 :
1505 : % BuildRelOp (tokpos) %
1506 : ]
1507 : % PopAuto %
1508 :
1509 :
1510 : first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1511 :
1512 : cannot reachend
1513 : */
1514 :
1515 : static void Expression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1516 :
1517 : /*
1518 : SimpleExpression := UnaryOrTerm { AddOperator Term
1519 :
1520 : % BuildBinaryOp %
1521 : }
1522 :
1523 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1524 :
1525 : cannot reachend
1526 : */
1527 :
1528 : static void SimpleExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1529 :
1530 : /*
1531 : UnaryOrTerm := '+'
1532 : % PushTtok(PlusTok, GetTokenNo() -1) %
1533 : Term
1534 : % BuildUnaryOp %
1535 : | '-'
1536 : % PushTtok(MinusTok, GetTokenNo() -1) %
1537 : Term
1538 : % BuildUnaryOp %
1539 : | Term
1540 :
1541 : first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1542 :
1543 : cannot reachend
1544 : */
1545 :
1546 : static void UnaryOrTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1547 :
1548 : /*
1549 : Term := Factor { MulOperator Factor
1550 : % BuildBinaryOp %
1551 : }
1552 :
1553 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
1554 :
1555 : cannot reachend
1556 : */
1557 :
1558 : static void Term (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1559 :
1560 : /*
1561 : Factor :=
1562 : % VAR tokpos: CARDINAL ; %
1563 : Number | string | SetOrDesignatorOrFunction |
1564 : '(' Expression ')' |
1565 : 'NOT'
1566 : % tokpos := GetTokenNo ()-1 %
1567 : ( Factor
1568 : % BuildNot (tokpos) %
1569 : | ConstAttribute )
1570 :
1571 : first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1572 :
1573 : cannot reachend
1574 : */
1575 :
1576 : static void Factor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1577 :
1578 : /*
1579 : SetOrDesignatorOrFunction :=
1580 : % VAR tokpos: CARDINAL ; %
1581 :
1582 : % tokpos := GetTokenNo () %
1583 : ( Qualident
1584 : % Assert (OperandTok (1) # UnknownTokenNo) %
1585 :
1586 : % CheckWithReference %
1587 :
1588 : % Assert (OperandTok (1) # UnknownTokenNo) %
1589 : [ Constructor |
1590 : SimpleDes
1591 : % Assert (OperandTok(1) # UnknownTokenNo) %
1592 : [ ActualParameters
1593 :
1594 : % IF IsInConstParameters ()
1595 : THEN
1596 : BuildConstFunctionCall
1597 : ELSE
1598 : BuildFunctionCall (FALSE)
1599 : END %
1600 : ] ] |
1601 :
1602 : % BuildTypeForConstructor (tokpos) %
1603 : Constructor )
1604 :
1605 : first symbols:lcbratok, identtok
1606 :
1607 : cannot reachend
1608 : */
1609 :
1610 : static void SetOrDesignatorOrFunction (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1611 :
1612 : /*
1613 : SimpleDes := { SubDesignator }
1614 :
1615 : first symbols:periodtok, lsbratok, uparrowtok
1616 :
1617 : reachend
1618 : */
1619 :
1620 : static void SimpleDes (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1621 :
1622 : /*
1623 : ActualParameters := '('
1624 : % BuildSizeCheckStart %
1625 : ( ExpList |
1626 : % BuildNulParam %
1627 : ) ')'
1628 :
1629 : first symbols:lparatok
1630 :
1631 : cannot reachend
1632 : */
1633 :
1634 : static void ActualParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1635 :
1636 : /*
1637 : ExitStatement := 'EXIT'
1638 : % BuildExit %
1639 :
1640 :
1641 : first symbols:exittok
1642 :
1643 : cannot reachend
1644 : */
1645 :
1646 : static void ExitStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1647 :
1648 : /*
1649 : ReturnStatement := 'RETURN'
1650 : % VAR tokno: CARDINAL ; %
1651 :
1652 : % tokno := GetTokenNo () -1 %
1653 : ( Expression |
1654 : % BuildNulExpression (tokno) %
1655 : )
1656 : % BuildReturn (tokno) %
1657 :
1658 :
1659 : first symbols:returntok
1660 :
1661 : cannot reachend
1662 : */
1663 :
1664 : static void ReturnStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1665 :
1666 : /*
1667 : Statement :=
1668 : % BuildStmtNote (0) %
1669 :
1670 : % PushAutoOn ; DisplayStack %
1671 : [ AssignmentOrProcedureCall |
1672 : IfStatement | CaseStatement |
1673 : WhileStatement |
1674 : RepeatStatement |
1675 : LoopStatement | ForStatement |
1676 : WithStatement | AsmStatement |
1677 : ExitStatement | ReturnStatement |
1678 : RetryStatement ]
1679 : % PopAuto ; %
1680 :
1681 :
1682 : first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
1683 :
1684 : reachend
1685 : */
1686 :
1687 : static void Statement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1688 :
1689 : /*
1690 : RetryStatement := 'RETRY'
1691 : % BuildRetry (GetTokenNo () -1) %
1692 :
1693 :
1694 : first symbols:retrytok
1695 :
1696 : cannot reachend
1697 : */
1698 :
1699 : static void RetryStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1700 :
1701 : /*
1702 : AssignmentOrProcedureCall :=
1703 : % VAR isFunc: BOOLEAN ;
1704 : tokno : CARDINAL ; %
1705 :
1706 : % DisplayStack %
1707 : Designator
1708 : % tokno := GetTokenNo () %
1709 : ( ':='
1710 : % PrintTokenNo (tokno) %
1711 : Expression
1712 : % BuildAssignment (tokno) %
1713 : |
1714 :
1715 : % isFunc := CheckBuildFunction() %
1716 : ( ActualParameters |
1717 :
1718 : % BuildNulParam in epsilon %
1719 : )
1720 : % IF isFunc
1721 : THEN
1722 : BuildFunctionCall (FALSE) ;
1723 : BuildAssignment (tokno)
1724 : ELSE
1725 : BuildProcedureCall (tokno - 1)
1726 : END %
1727 : )
1728 : % DisplayStack %
1729 :
1730 :
1731 : first symbols:identtok
1732 :
1733 : cannot reachend
1734 : */
1735 :
1736 : static void AssignmentOrProcedureCall (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1737 :
1738 : /*
1739 : StatementSequence := Statement { ';' Statement }
1740 :
1741 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1742 :
1743 : reachend
1744 : */
1745 :
1746 : static void StatementSequence (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1747 :
1748 : /*
1749 : IfStatement := 'IF' Expression 'THEN'
1750 : % BuildThenIf %
1751 :
1752 : % BuildStmtNote (-1) %
1753 : StatementSequence { 'ELSIF'
1754 : % BuildElsif1 %
1755 :
1756 : % BuildStmtNote (-1) %
1757 : Expression 'THEN'
1758 :
1759 : % BuildThenIf %
1760 :
1761 : % BuildStmtNote (-1) %
1762 : StatementSequence
1763 :
1764 : % BuildElsif2 %
1765 : } [ 'ELSE'
1766 : % BuildElse %
1767 :
1768 : % BuildStmtNote (-1) %
1769 : StatementSequence ]
1770 : 'END'
1771 : % BuildEndIf %
1772 :
1773 : % BuildStmtNote (-1) %
1774 :
1775 :
1776 : first symbols:iftok
1777 :
1778 : cannot reachend
1779 : */
1780 :
1781 : static void IfStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1782 :
1783 : /*
1784 : CaseStatement := 'CASE' Expression
1785 : % BuildCaseStart %
1786 : 'OF' Case { '|' Case } CaseEndStatement
1787 :
1788 : first symbols:casetok
1789 :
1790 : cannot reachend
1791 : */
1792 :
1793 : static void CaseStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1794 :
1795 : /*
1796 : CaseEndStatement := 'END'
1797 : % BuildStmtNote (-1) %
1798 :
1799 : % BuildCaseElse %
1800 :
1801 : % BuildCaseCheck %
1802 :
1803 : % BuildCaseEnd %
1804 : | 'ELSE'
1805 : % BuildStmtNote (-1) %
1806 :
1807 : % BuildCaseElse %
1808 :
1809 : % ElseCase (NulSym) %
1810 : StatementSequence
1811 : % BuildStmtNote (0) %
1812 : 'END'
1813 : % BuildCaseEnd %
1814 :
1815 :
1816 : first symbols:elsetok, endtok
1817 :
1818 : cannot reachend
1819 : */
1820 :
1821 : static void CaseEndStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1822 :
1823 : /*
1824 : Case := [
1825 : % BuildStmtNote (-1) %
1826 : CaseLabelList
1827 : % BuildCaseStartStatementSequence %
1828 : ':' StatementSequence
1829 : % BuildCaseEndStatementSequence %
1830 :
1831 : % EndCaseList %
1832 : ]
1833 :
1834 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1835 :
1836 : reachend
1837 : */
1838 :
1839 : static void Case (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1840 :
1841 : /*
1842 : CaseLabelList :=
1843 : % BeginCaseList(NulSym) %
1844 : CaseLabels { ','
1845 : % BuildCaseOr %
1846 : CaseLabels }
1847 :
1848 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1849 :
1850 : cannot reachend
1851 : */
1852 :
1853 : static void CaseLabelList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1854 :
1855 : /*
1856 : CaseLabels := ConstExpression ( '..' ConstExpression
1857 :
1858 : % BuildCaseRange ;
1859 : BuildCaseList %
1860 : |
1861 :
1862 : % BuildCaseEquality ; epsilon
1863 : BuildCaseList %
1864 : )
1865 :
1866 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1867 :
1868 : cannot reachend
1869 : */
1870 :
1871 : static void CaseLabels (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1872 :
1873 : /*
1874 : WhileStatement := 'WHILE'
1875 : % BuildWhile %
1876 :
1877 : % BuildStmtNote (0) %
1878 : Expression
1879 : % BuildStmtNote (0) %
1880 : 'DO'
1881 : % BuildDoWhile %
1882 : StatementSequence
1883 : % BuildStmtNote (0) %
1884 : 'END'
1885 : % DisplayStack ; BuildEndWhile (-1) %
1886 :
1887 :
1888 : first symbols:whiletok
1889 :
1890 : cannot reachend
1891 : */
1892 :
1893 : static void WhileStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1894 :
1895 : /*
1896 : RepeatStatement := 'REPEAT'
1897 : % BuildRepeat %
1898 : StatementSequence
1899 : % BuildStmtNote (0) %
1900 : 'UNTIL' Expression
1901 : % BuildUntil %
1902 :
1903 :
1904 : first symbols:repeattok
1905 :
1906 : cannot reachend
1907 : */
1908 :
1909 : static void RepeatStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1910 :
1911 : /*
1912 : ForStatement :=
1913 : % VAR endpostok: CARDINAL ; %
1914 :
1915 : % PushLineNo %
1916 : 'FOR' Ident ':=' Expression 'TO'
1917 : Expression ( 'BY' ConstExpression |
1918 :
1919 : % BuildPseudoBy epsilon %
1920 : )
1921 : % PushLineNo %
1922 :
1923 : % BuildStmtNote (0) %
1924 : 'DO'
1925 : % BuildForToByDo %
1926 : StatementSequence
1927 : % BuildStmtNote (0) %
1928 :
1929 : % endpostok := GetTokenNo () %
1930 : 'END'
1931 : % BuildEndFor (endpostok) %
1932 :
1933 :
1934 : first symbols:fortok
1935 :
1936 : cannot reachend
1937 : */
1938 :
1939 : static void ForStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1940 :
1941 : /*
1942 : LoopStatement := 'LOOP'
1943 : % BuildLoop %
1944 : StatementSequence
1945 : % BuildStmtNote (0) %
1946 : 'END'
1947 : % BuildEndLoop %
1948 :
1949 :
1950 : first symbols:looptok
1951 :
1952 : cannot reachend
1953 : */
1954 :
1955 : static void LoopStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1956 :
1957 : /*
1958 : WithStatement :=
1959 : % VAR
1960 : tok: CARDINAL ; %
1961 : 'WITH'
1962 : % tok := GetTokenNo () -1 %
1963 : Designator
1964 : % StartBuildWith (tok) %
1965 :
1966 : % BuildStmtNote (0) %
1967 : 'DO' StatementSequence
1968 : % BuildStmtNote (0) %
1969 : 'END'
1970 : % EndBuildWith %
1971 :
1972 :
1973 : first symbols:withtok
1974 :
1975 : cannot reachend
1976 : */
1977 :
1978 : static void WithStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1979 :
1980 : /*
1981 : ProcedureDeclaration :=
1982 : % VAR top: CARDINAL ; %
1983 :
1984 : % top := Top () %
1985 : ProcedureHeading ';' PostProcedureHeading
1986 :
1987 : % Assert (top = Top ()) %
1988 :
1989 :
1990 : first symbols:proceduretok
1991 :
1992 : cannot reachend
1993 : */
1994 :
1995 : static void ProcedureDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
1996 :
1997 : /*
1998 : PostProcedureHeading := ProperProcedure |
1999 : ForwardDeclaration
2000 :
2001 : first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok, forwardtok
2002 :
2003 : cannot reachend
2004 : */
2005 :
2006 : static void PostProcedureHeading (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2007 :
2008 : /*
2009 : ForwardDeclaration := 'FORWARD'
2010 : % EndBuildForward %
2011 :
2012 :
2013 : first symbols:forwardtok
2014 :
2015 : cannot reachend
2016 : */
2017 :
2018 : static void ForwardDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2019 :
2020 : /*
2021 : ProperProcedure := ProcedureBlock
2022 : % BuildProcedureEnd ;
2023 : PushAutoOn %
2024 : Ident
2025 : % EndBuildProcedure ;
2026 : PopAuto %
2027 :
2028 :
2029 : first symbols:moduletok, proceduretok, vartok, typetok, consttok, begintok, endtok
2030 :
2031 : cannot reachend
2032 : */
2033 :
2034 : static void ProperProcedure (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2035 :
2036 : /*
2037 : DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
2038 : '(' '('
2039 : % PushAutoOff %
2040 : Ident
2041 : % PopAuto %
2042 : ')' ')' |
2043 : '__INLINE__' ]
2044 :
2045 : first symbols:inlinetok, attributetok
2046 :
2047 : reachend
2048 : */
2049 :
2050 : static void DefineBuiltinProcedure (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2051 :
2052 : /*
2053 : ProcedureHeading := 'PROCEDURE'
2054 : % M2Error.DefaultProcedure %
2055 :
2056 : % PushAutoOn %
2057 : DefineBuiltinProcedure ( Ident
2058 :
2059 : % StartBuildProcedure ;
2060 : PushAutoOff %
2061 : [ FormalParameters ]
2062 : AttributeNoReturn
2063 :
2064 : % BuildProcedureHeading ;
2065 : PopAuto %
2066 : )
2067 :
2068 : % PopAuto %
2069 :
2070 :
2071 : first symbols:proceduretok
2072 :
2073 : cannot reachend
2074 : */
2075 :
2076 : static void ProcedureHeading (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2077 :
2078 : /*
2079 : Builtin := [ '__BUILTIN__' | '__INLINE__' ]
2080 :
2081 : first symbols:inlinetok, builtintok
2082 :
2083 : reachend
2084 : */
2085 :
2086 : static void Builtin (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2087 :
2088 : /*
2089 : DefProcedureHeading := 'PROCEDURE'
2090 : % M2Error.DefaultProcedure %
2091 :
2092 : % PushAutoOn %
2093 : Builtin ( Ident
2094 : % StartBuildProcedure ;
2095 : PushAutoOff %
2096 : [ DefFormalParameters ]
2097 : AttributeNoReturn
2098 :
2099 : % BuildProcedureHeading ;
2100 : PopAuto %
2101 : )
2102 : % PopAuto %
2103 :
2104 : % M2Error.LeaveErrorScope %
2105 :
2106 :
2107 : first symbols:proceduretok
2108 :
2109 : cannot reachend
2110 : */
2111 :
2112 : static void DefProcedureHeading (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2113 :
2114 : /*
2115 : AttributeNoReturn := [ '' ]
2116 :
2117 : first symbols:ldirectivetok
2118 :
2119 : reachend
2120 : */
2121 :
2122 : static void AttributeNoReturn (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2123 :
2124 : /*
2125 : AttributeUnused := [ '' ]
2126 :
2127 : first symbols:ldirectivetok
2128 :
2129 : reachend
2130 : */
2131 :
2132 : static void AttributeUnused (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2133 :
2134 : /*
2135 : ProcedureBlock :=
2136 : % BuildProcedureStart %
2137 : { Declaration }
2138 : % BuildProcedureBegin %
2139 : [ 'BEGIN'
2140 : % BuildStmtNote (-1) %
2141 : ProcedureBlockBody ]
2142 : % BuildStmtNote (0) %
2143 : 'END'
2144 :
2145 : first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
2146 :
2147 : cannot reachend
2148 : */
2149 :
2150 : static void ProcedureBlock (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2151 :
2152 : /*
2153 : Block := { Declaration }
2154 : % StartBuildInit (GetTokenNo ()) %
2155 : InitialBlock
2156 : % EndBuildInit (GetTokenNo ()) ;
2157 : StartBuildFinally (GetTokenNo ()) %
2158 : FinalBlock
2159 : % EndBuildFinally (GetTokenNo ()) %
2160 : 'END'
2161 :
2162 : first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
2163 :
2164 : cannot reachend
2165 : */
2166 :
2167 : static void Block (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2168 :
2169 : /*
2170 : InitialBlock := [ 'BEGIN'
2171 : % BuildStmtNote (-1) %
2172 : InitialBlockBody ]
2173 :
2174 : first symbols:begintok
2175 :
2176 : reachend
2177 : */
2178 :
2179 : static void InitialBlock (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2180 :
2181 : /*
2182 : FinalBlock := [ 'FINALLY'
2183 : % BuildStmtNote (-1) %
2184 : FinalBlockBody ]
2185 :
2186 : first symbols:finallytok
2187 :
2188 : reachend
2189 : */
2190 :
2191 : static void FinalBlock (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2192 :
2193 : /*
2194 : InitialBlockBody := NormalPart [ 'EXCEPT'
2195 : % BuildStmtNote (-1) %
2196 :
2197 : % BuildExceptInitial (GetTokenNo() -1) %
2198 : ExceptionalPart ]
2199 :
2200 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
2201 :
2202 : reachend
2203 : */
2204 :
2205 : static void InitialBlockBody (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2206 :
2207 : /*
2208 : FinalBlockBody := NormalPart [ 'EXCEPT'
2209 : % BuildStmtNote (-1) %
2210 :
2211 : % BuildExceptFinally (GetTokenNo() -1) %
2212 : ExceptionalPart ]
2213 :
2214 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
2215 :
2216 : reachend
2217 : */
2218 :
2219 : static void FinalBlockBody (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2220 :
2221 : /*
2222 : ProcedureBlockBody := NormalPart [ 'EXCEPT'
2223 : % BuildStmtNote (-1) %
2224 :
2225 : % BuildExceptProcedure (GetTokenNo() -1) %
2226 : ExceptionalPart ]
2227 :
2228 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
2229 :
2230 : reachend
2231 : */
2232 :
2233 : static void ProcedureBlockBody (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2234 :
2235 : /*
2236 : NormalPart := StatementSequence
2237 :
2238 : first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
2239 :
2240 : reachend
2241 : */
2242 :
2243 : static void NormalPart (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2244 :
2245 : /*
2246 : ExceptionalPart := StatementSequence
2247 : % BuildReThrow (GetTokenNo()) %
2248 :
2249 :
2250 : first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
2251 :
2252 : reachend
2253 : */
2254 :
2255 : static void ExceptionalPart (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2256 :
2257 : /*
2258 : Declaration := 'CONST' { ConstantDeclaration ';' } |
2259 : 'TYPE' { TypeDeclaration ';' } |
2260 : 'VAR' { VariableDeclaration ';' } |
2261 : ProcedureDeclaration ';' |
2262 : ModuleDeclaration ';'
2263 :
2264 : first symbols:moduletok, proceduretok, vartok, typetok, consttok
2265 :
2266 : cannot reachend
2267 : */
2268 :
2269 : static void Declaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2270 :
2271 : /*
2272 : DefFormalParameters := '(' [ DefMultiFPSection ]
2273 : ')' FormalReturn
2274 :
2275 : first symbols:lparatok
2276 :
2277 : cannot reachend
2278 : */
2279 :
2280 : static void DefFormalParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2281 :
2282 : /*
2283 : DefMultiFPSection := DefExtendedFP |
2284 : FPSection [ ';' DefMultiFPSection ]
2285 :
2286 : first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
2287 :
2288 : cannot reachend
2289 : */
2290 :
2291 : static void DefMultiFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2292 :
2293 : /*
2294 : FormalParameters := '(' [ MultiFPSection ] ')'
2295 : FormalReturn
2296 :
2297 : first symbols:lparatok
2298 :
2299 : cannot reachend
2300 : */
2301 :
2302 : static void FormalParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2303 :
2304 : /*
2305 : MultiFPSection := ExtendedFP | FPSection [ ';'
2306 : MultiFPSection ]
2307 :
2308 : first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
2309 :
2310 : cannot reachend
2311 : */
2312 :
2313 : static void MultiFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2314 :
2315 : /*
2316 : FPSection := NonVarFPSection |
2317 : VarFPSection
2318 :
2319 : first symbols:vartok, identtok
2320 :
2321 : cannot reachend
2322 : */
2323 :
2324 : static void FPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2325 :
2326 : /*
2327 : DefExtendedFP := DefOptArg | '...'
2328 :
2329 : first symbols:lsbratok, periodperiodperiodtok
2330 :
2331 : cannot reachend
2332 : */
2333 :
2334 : static void DefExtendedFP (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2335 :
2336 : /*
2337 : ExtendedFP := OptArg | '...'
2338 :
2339 : first symbols:lsbratok, periodperiodperiodtok
2340 :
2341 : cannot reachend
2342 : */
2343 :
2344 : static void ExtendedFP (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2345 :
2346 : /*
2347 : VarFPSection := 'VAR' IdentList ':' FormalType [
2348 : AttributeUnused ]
2349 :
2350 : first symbols:vartok
2351 :
2352 : cannot reachend
2353 : */
2354 :
2355 : static void VarFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2356 :
2357 : /*
2358 : NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
2359 :
2360 : first symbols:identtok
2361 :
2362 : cannot reachend
2363 : */
2364 :
2365 : static void NonVarFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2366 :
2367 : /*
2368 : OptArg := '[' Ident ':' FormalType [ '=' ConstExpression
2369 :
2370 : % BuildOptArgInitializer %
2371 : ] ']'
2372 :
2373 : first symbols:lsbratok
2374 :
2375 : cannot reachend
2376 : */
2377 :
2378 : static void OptArg (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2379 :
2380 : /*
2381 : DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
2382 :
2383 : % BuildOptArgInitializer %
2384 : ']'
2385 :
2386 : first symbols:lsbratok
2387 :
2388 : cannot reachend
2389 : */
2390 :
2391 : static void DefOptArg (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2392 :
2393 : /*
2394 : FormalType := { 'ARRAY' 'OF' } QualidentCheck
2395 :
2396 : first symbols:identtok, arraytok
2397 :
2398 : cannot reachend
2399 : */
2400 :
2401 : static void FormalType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2402 :
2403 : /*
2404 : ModuleDeclaration :=
2405 : % VAR modulet, namet: CARDINAL ; %
2406 :
2407 : % modulet := GetTokenNo () %
2408 : 'MODULE'
2409 : % M2Error.DefaultInnerModule %
2410 :
2411 : % PushAutoOn %
2412 : Ident
2413 : % StartBuildInnerModule %
2414 :
2415 : % BuildModuleStart (modulet) ;
2416 : PushAutoOff %
2417 : [ Priority ] ';' { Import }
2418 : [ Export ] Block
2419 : % PushAutoOn %
2420 :
2421 : % namet := GetTokenNo () %
2422 : Ident
2423 : % EndBuildInnerModule (namet) %
2424 :
2425 : % PopAuto ; PopAuto ; PopAuto %
2426 :
2427 :
2428 : first symbols:moduletok
2429 :
2430 : cannot reachend
2431 : */
2432 :
2433 : static void ModuleDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2434 :
2435 : /*
2436 : Priority := '['
2437 : % PushAutoOn %
2438 : ConstExpression
2439 : % BuildModulePriority ;
2440 : PopAuto %
2441 : ']'
2442 :
2443 : first symbols:lsbratok
2444 :
2445 : cannot reachend
2446 : */
2447 :
2448 : static void Priority (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2449 :
2450 : /*
2451 : Export := 'EXPORT' ( 'QUALIFIED' IdentList |
2452 : 'UNQUALIFIED' IdentList |
2453 : IdentList ) ';'
2454 :
2455 : first symbols:exporttok
2456 :
2457 : cannot reachend
2458 : */
2459 :
2460 : static void Export (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2461 :
2462 : /*
2463 : FromImport :=
2464 : % PushAutoOn %
2465 : 'FROM' Ident 'IMPORT' IdentList ';'
2466 :
2467 : % CheckImportListOuterModule %
2468 :
2469 : % PopAuto %
2470 :
2471 :
2472 : first symbols:fromtok
2473 :
2474 : cannot reachend
2475 : */
2476 :
2477 : static void FromImport (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2478 :
2479 : /*
2480 : WithoutFromImport :=
2481 : % PushAutoOff %
2482 : 'IMPORT' IdentList ';'
2483 : % PopAuto %
2484 :
2485 :
2486 : first symbols:importtok
2487 :
2488 : cannot reachend
2489 : */
2490 :
2491 : static void WithoutFromImport (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2492 :
2493 : /*
2494 : Import := FromImport | WithoutFromImport
2495 :
2496 : first symbols:importtok, fromtok
2497 :
2498 : cannot reachend
2499 : */
2500 :
2501 : static void Import (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2502 :
2503 : /*
2504 : DefinitionModule :=
2505 : % VAR deft, endt, namet: CARDINAL ; %
2506 :
2507 : % deft := GetTokenNo () %
2508 : 'DEFINITION'
2509 : % M2Error.DefaultDefinitionModule %
2510 : 'MODULE'
2511 : % PushAutoOn %
2512 : [ 'FOR' string ] Ident
2513 : % StartBuildDefFile (deft) ;
2514 : P3StartBuildDefModule ;
2515 : PushAutoOff %
2516 : ';' { Import } [ Export ]
2517 : { Definition }
2518 : % endt := GetTokenNo () %
2519 : 'END'
2520 : % PushAutoOn %
2521 :
2522 : % namet := GetTokenNo () %
2523 : Ident
2524 : % EndBuildFile (endt) ;
2525 : P3EndBuildDefModule (namet) %
2526 : '.'
2527 : % PopAuto ; PopAuto ; PopAuto %
2528 :
2529 :
2530 : first symbols:definitiontok
2531 :
2532 : cannot reachend
2533 : */
2534 :
2535 : static void DefinitionModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2536 :
2537 : /*
2538 : Definition := 'CONST' { ConstantDeclaration ';' } |
2539 : 'TYPE' { Ident ( ';' | '=' Type Alignment
2540 : ';' ) } |
2541 : 'VAR' { VariableDeclaration ';' } |
2542 : DefProcedureHeading ';'
2543 :
2544 : first symbols:proceduretok, vartok, typetok, consttok
2545 :
2546 : cannot reachend
2547 : */
2548 :
2549 : static void Definition (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2550 :
2551 : /*
2552 : AsmStatement :=
2553 : % VAR CurrentAsm: CARDINAL ;
2554 : tok: CARDINAL ; %
2555 :
2556 : % tok := GetTokenNo () %
2557 : 'ASM'
2558 : % PushAutoOn ;
2559 : PushT (0) ; operand count
2560 : PushT (MakeGnuAsm ())
2561 : %
2562 : [ 'VOLATILE'
2563 : % PopT (CurrentAsm) ;
2564 : PutGnuAsmVolatile (CurrentAsm) ;
2565 : PushT (CurrentAsm)
2566 : %
2567 : ] '(' AsmOperands
2568 : % PopNothing ; throw away interface sym
2569 : BuildAsm (tok) ;
2570 : PopNothing ; throw away count
2571 : PopAuto
2572 : %
2573 : ')'
2574 :
2575 : first symbols:asmtok
2576 :
2577 : cannot reachend
2578 : */
2579 :
2580 : static void AsmStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2581 :
2582 : /*
2583 : AsmOperands :=
2584 : % VAR CurrentAsm, count: CARDINAL ;
2585 : str: CARDINAL ;
2586 : %
2587 : ConstExpression
2588 : % PopT (str) ;
2589 : PopT (CurrentAsm) ;
2590 : Assert (IsGnuAsm (CurrentAsm) OR IsGnuAsmVolatile (CurrentAsm)) ;
2591 : PopT (count) ;
2592 : IF DebugAsm
2593 : THEN
2594 : printf1 ('1: count of asm operands: %d
2595 : ', count)
2596 : END ;
2597 : PushT (count) ;
2598 : adds the name/instruction for this asm
2599 : PutGnuAsm (CurrentAsm, str) ;
2600 : PushT (CurrentAsm) ;
2601 : PushT (NulSym) the InterfaceSym
2602 : %
2603 : ( AsmOperandSpec |
2604 :
2605 : % epsilon
2606 : PutGnuAsmSimple (CurrentAsm)
2607 : %
2608 : )
2609 :
2610 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
2611 :
2612 : cannot reachend
2613 : */
2614 :
2615 : static void AsmOperands (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2616 :
2617 : /*
2618 : AsmOperandSpec :=
2619 : % VAR CurrentAsm, outputs, inputs, trash, count: CARDINAL ;
2620 : %
2621 : ':' AsmOutputList
2622 : % PopT(outputs) ;
2623 : PopT(CurrentAsm) ;
2624 : Assert(IsGnuAsm(CurrentAsm) OR IsGnuAsmVolatile(CurrentAsm)) ;
2625 : PopT(count) ;
2626 : IF DebugAsm
2627 : THEN
2628 : printf1('2: output count of asm operands: %d
2629 : ', count)
2630 : END ;
2631 : PutGnuAsmOutput(CurrentAsm, outputs) ;
2632 : PushT(0) ; reset count
2633 : PushT(CurrentAsm) ;
2634 : PushT(NulSym) the InterfaceSym
2635 : %
2636 : [ ':' AsmInputList
2637 : % PopT(inputs) ;
2638 : PopT(CurrentAsm) ;
2639 : Assert(IsGnuAsm(CurrentAsm) OR IsGnuAsmVolatile(CurrentAsm)) ;
2640 : PopT(count) ;
2641 : IF DebugAsm
2642 : THEN
2643 : printf1('3: input count of asm operands: %d
2644 : ', count)
2645 : END ;
2646 : PutGnuAsmInput(CurrentAsm, inputs) ;
2647 : PushT(0) ; reset count
2648 : PushT(CurrentAsm) ;
2649 : PushT(NulSym) the InterfaceSym
2650 : %
2651 : [ ':' AsmTrashList
2652 : % PopT(trash) ;
2653 : PopT(CurrentAsm) ;
2654 : Assert(IsGnuAsm(CurrentAsm) OR IsGnuAsmVolatile(CurrentAsm)) ;
2655 : PopT(count) ;
2656 : IF DebugAsm
2657 : THEN
2658 : printf1('4: trash count of asm operands: %d
2659 : ', count)
2660 : END ;
2661 : PutGnuAsmTrash(CurrentAsm, trash) ;
2662 : PushT(0) ; reset count
2663 : PushT(CurrentAsm) ;
2664 : PushT(NulSym) the InterfaceSym
2665 : %
2666 : ] ]
2667 :
2668 : first symbols:colontok
2669 :
2670 : cannot reachend
2671 : */
2672 :
2673 : static void AsmOperandSpec (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2674 :
2675 : /*
2676 : AsmOutputList := [ AsmOutputElement ] { ',' AsmOutputElement }
2677 :
2678 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok, lsbratok, commatok
2679 :
2680 : reachend
2681 : */
2682 :
2683 : static void AsmOutputList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2684 :
2685 : /*
2686 : AsmInputList := [ AsmInputElement ] { ',' AsmInputElement }
2687 :
2688 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok, lsbratok, commatok
2689 :
2690 : reachend
2691 : */
2692 :
2693 : static void AsmInputList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2694 :
2695 : /*
2696 : NamedOperand := '[' Ident ']'
2697 :
2698 : first symbols:lsbratok
2699 :
2700 : cannot reachend
2701 : */
2702 :
2703 : static void NamedOperand (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2704 :
2705 : /*
2706 : AsmOperandName := ( NamedOperand |
2707 :
2708 : % IF IsAutoPushOn()
2709 : THEN
2710 : PushTF (NulName, identtok)
2711 : END
2712 : %
2713 : )
2714 :
2715 : first symbols:lsbratok
2716 :
2717 : reachend
2718 : */
2719 :
2720 : static void AsmOperandName (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2721 :
2722 : /*
2723 : AsmInputElement := AsmOperandName ConstExpression
2724 : '(' Expression
2725 : % BuildAsmElement (TRUE, FALSE)
2726 : %
2727 : ')'
2728 :
2729 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok, lsbratok
2730 :
2731 : cannot reachend
2732 : */
2733 :
2734 : static void AsmInputElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2735 :
2736 : /*
2737 : AsmOutputElement := AsmOperandName ConstExpression
2738 : '(' Expression
2739 : % BuildAsmElement (FALSE, TRUE)
2740 : %
2741 : ')'
2742 :
2743 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok, lsbratok
2744 :
2745 : cannot reachend
2746 : */
2747 :
2748 : static void AsmOutputElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2749 :
2750 : /*
2751 : AsmTrashList := [ ConstExpression
2752 : % BuildAsmTrash
2753 : %
2754 : ] { ',' ConstExpression
2755 : % BuildAsmTrash
2756 : %
2757 : }
2758 :
2759 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok, commatok
2760 :
2761 : reachend
2762 : */
2763 :
2764 : static void AsmTrashList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2);
2765 :
2766 0 : static void ErrorString (DynamicStrings_String s)
2767 : {
2768 0 : M2Error_ErrorStringAt (s, M2LexBuf_GetTokenNo ());
2769 0 : seenError = true;
2770 0 : }
2771 :
2772 0 : static void ErrorArray (const char *a_, unsigned int _a_high)
2773 : {
2774 0 : char a[_a_high+1];
2775 :
2776 : /* make a local copy of each unbounded array. */
2777 0 : memcpy (a, a_, _a_high+1);
2778 :
2779 0 : ErrorString (DynamicStrings_InitString ((const char *) a, _a_high));
2780 0 : }
2781 :
2782 :
2783 : /*
2784 : DescribeStop - issues a message explaining what tokens were expected
2785 : */
2786 :
2787 12 : static DynamicStrings_String DescribeStop (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
2788 : {
2789 12 : unsigned int n;
2790 12 : DynamicStrings_String str;
2791 12 : DynamicStrings_String message;
2792 :
2793 12 : n = 0;
2794 12 : message = DynamicStrings_InitString ((const char *) "", 0);
2795 12 : if ((((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2796 : {
2797 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%Kstring}", 10)));
2798 0 : n += 1;
2799 : }
2800 12 : if ((((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2801 : {
2802 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%Kreal number}", 15)));
2803 0 : n += 1;
2804 : }
2805 12 : if ((((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2806 : {
2807 6 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%Kidentifier}", 14)));
2808 6 : n += 1;
2809 : }
2810 12 : if ((((1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2811 : {
2812 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%Kinteger number}", 18)));
2813 0 : n += 1;
2814 : }
2815 12 : if ((((1 << (M2Reserved_inlinetok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2816 : {
2817 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K__INLINE__}", 14)));
2818 0 : n += 1;
2819 : }
2820 12 : if ((((1 << (M2Reserved_builtintok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2821 : {
2822 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K__BUILTIN__}", 15)));
2823 0 : n += 1;
2824 : }
2825 12 : if ((((1 << (M2Reserved_attributetok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2826 : {
2827 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K__ATTRIBUTE__}", 17)));
2828 0 : n += 1;
2829 : }
2830 12 : if ((((1 << (M2Reserved_filetok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2831 : {
2832 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K__FILE__}", 12)));
2833 0 : n += 1;
2834 : }
2835 12 : if ((((1 << (M2Reserved_linetok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2836 : {
2837 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K__LINE__}", 12)));
2838 0 : n += 1;
2839 : }
2840 12 : if ((((1 << (M2Reserved_datetok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2841 : {
2842 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K__DATE__}", 12)));
2843 0 : n += 1;
2844 : }
2845 12 : if ((((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2846 : {
2847 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K...}", 7)));
2848 0 : n += 1;
2849 : }
2850 12 : if ((((1 << (M2Reserved_volatiletok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2851 : {
2852 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KVOLATILE}", 12)));
2853 0 : n += 1;
2854 : }
2855 12 : if ((((1 << (M2Reserved_asmtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2856 : {
2857 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KASM}", 7)));
2858 0 : n += 1;
2859 : }
2860 12 : if ((((1 << (M2Reserved_withtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2861 : {
2862 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KWITH}", 8)));
2863 0 : n += 1;
2864 : }
2865 12 : if ((((1 << (M2Reserved_whiletok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2866 : {
2867 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KWHILE}", 9)));
2868 0 : n += 1;
2869 : }
2870 12 : if ((((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2871 : {
2872 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KVAR}", 7)));
2873 0 : n += 1;
2874 : }
2875 12 : if ((((1 << (M2Reserved_untiltok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2876 : {
2877 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KUNTIL}", 9)));
2878 0 : n += 1;
2879 : }
2880 12 : if ((((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2881 : {
2882 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KTYPE}", 8)));
2883 0 : n += 1;
2884 : }
2885 12 : if ((((1 << (M2Reserved_totok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2886 : {
2887 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KTO}", 6)));
2888 0 : n += 1;
2889 : }
2890 12 : if ((((1 << (M2Reserved_thentok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2891 : {
2892 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KTHEN}", 8)));
2893 0 : n += 1;
2894 : }
2895 12 : if ((((1 << (M2Reserved_settok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2896 : {
2897 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KSET}", 7)));
2898 0 : n += 1;
2899 : }
2900 12 : if ((((1 << (M2Reserved_returntok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2901 : {
2902 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KRETURN}", 10)));
2903 0 : n += 1;
2904 : }
2905 12 : if ((((1 << (M2Reserved_retrytok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2906 : {
2907 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KRETRY}", 9)));
2908 0 : n += 1;
2909 : }
2910 12 : if ((((1 << (M2Reserved_repeattok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2911 : {
2912 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KREPEAT}", 10)));
2913 0 : n += 1;
2914 : }
2915 12 : if ((((1 << (M2Reserved_remtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2916 : {
2917 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KREM}", 7)));
2918 0 : n += 1;
2919 : }
2920 12 : if ((((1 << (M2Reserved_recordtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2921 : {
2922 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KRECORD}", 10)));
2923 0 : n += 1;
2924 : }
2925 12 : if ((((1 << (M2Reserved_unqualifiedtok-M2Reserved_unqualifiedtok)) & (stopset2)) != 0))
2926 : {
2927 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KUNQUALIFIED}", 15)));
2928 0 : n += 1;
2929 : }
2930 12 : if ((((1 << (M2Reserved_qualifiedtok-M2Reserved_arraytok)) & (stopset1)) != 0))
2931 : {
2932 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KQUALIFIED}", 13)));
2933 0 : n += 1;
2934 : }
2935 12 : if ((((1 << (M2Reserved_proceduretok-M2Reserved_arraytok)) & (stopset1)) != 0))
2936 : {
2937 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KPROCEDURE}", 13)));
2938 0 : n += 1;
2939 : }
2940 12 : if ((((1 << (M2Reserved_pointertok-M2Reserved_arraytok)) & (stopset1)) != 0))
2941 : {
2942 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KPOINTER}", 11)));
2943 0 : n += 1;
2944 : }
2945 12 : if ((((1 << (M2Reserved_packedsettok-M2Reserved_arraytok)) & (stopset1)) != 0))
2946 : {
2947 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KPACKEDSET}", 13)));
2948 0 : n += 1;
2949 : }
2950 12 : if ((((1 << (M2Reserved_ortok-M2Reserved_arraytok)) & (stopset1)) != 0))
2951 : {
2952 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KOR}", 6)));
2953 0 : n += 1;
2954 : }
2955 12 : if ((((1 << (M2Reserved_oftok-M2Reserved_arraytok)) & (stopset1)) != 0))
2956 : {
2957 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KOF}", 6)));
2958 0 : n += 1;
2959 : }
2960 12 : if ((((1 << (M2Reserved_nottok-M2Reserved_arraytok)) & (stopset1)) != 0))
2961 : {
2962 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KNOT}", 7)));
2963 0 : n += 1;
2964 : }
2965 12 : if ((((1 << (M2Reserved_moduletok-M2Reserved_arraytok)) & (stopset1)) != 0))
2966 : {
2967 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KMODULE}", 10)));
2968 0 : n += 1;
2969 : }
2970 12 : if ((((1 << (M2Reserved_modtok-M2Reserved_arraytok)) & (stopset1)) != 0))
2971 : {
2972 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KMOD}", 7)));
2973 0 : n += 1;
2974 : }
2975 12 : if ((((1 << (M2Reserved_looptok-M2Reserved_arraytok)) & (stopset1)) != 0))
2976 : {
2977 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KLOOP}", 8)));
2978 0 : n += 1;
2979 : }
2980 12 : if ((((1 << (M2Reserved_intok-M2Reserved_arraytok)) & (stopset1)) != 0))
2981 : {
2982 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KIN}", 6)));
2983 0 : n += 1;
2984 : }
2985 12 : if ((((1 << (M2Reserved_importtok-M2Reserved_arraytok)) & (stopset1)) != 0))
2986 : {
2987 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KIMPORT}", 10)));
2988 0 : n += 1;
2989 : }
2990 12 : if ((((1 << (M2Reserved_implementationtok-M2Reserved_arraytok)) & (stopset1)) != 0))
2991 : {
2992 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KIMPLEMENTATION}", 18)));
2993 0 : n += 1;
2994 : }
2995 12 : if ((((1 << (M2Reserved_iftok-M2Reserved_arraytok)) & (stopset1)) != 0))
2996 : {
2997 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KIF}", 6)));
2998 0 : n += 1;
2999 : }
3000 12 : if ((((1 << (M2Reserved_fromtok-M2Reserved_arraytok)) & (stopset1)) != 0))
3001 : {
3002 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KFROM}", 8)));
3003 0 : n += 1;
3004 : }
3005 12 : if ((((1 << (M2Reserved_forwardtok-M2Reserved_arraytok)) & (stopset1)) != 0))
3006 : {
3007 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KFORWARD}", 11)));
3008 0 : n += 1;
3009 : }
3010 12 : if ((((1 << (M2Reserved_fortok-M2Reserved_arraytok)) & (stopset1)) != 0))
3011 : {
3012 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KFOR}", 7)));
3013 0 : n += 1;
3014 : }
3015 12 : if ((((1 << (M2Reserved_finallytok-M2Reserved_arraytok)) & (stopset1)) != 0))
3016 : {
3017 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KFINALLY}", 11)));
3018 0 : n += 1;
3019 : }
3020 12 : if ((((1 << (M2Reserved_exporttok-M2Reserved_arraytok)) & (stopset1)) != 0))
3021 : {
3022 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KEXPORT}", 10)));
3023 0 : n += 1;
3024 : }
3025 12 : if ((((1 << (M2Reserved_exittok-M2Reserved_arraytok)) & (stopset1)) != 0))
3026 : {
3027 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KEXIT}", 8)));
3028 0 : n += 1;
3029 : }
3030 12 : if ((((1 << (M2Reserved_excepttok-M2Reserved_arraytok)) & (stopset1)) != 0))
3031 : {
3032 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KEXCEPT}", 10)));
3033 0 : n += 1;
3034 : }
3035 12 : if ((((1 << (M2Reserved_endtok-M2Reserved_arraytok)) & (stopset1)) != 0))
3036 : {
3037 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KEND}", 7)));
3038 0 : n += 1;
3039 : }
3040 12 : if ((((1 << (M2Reserved_elsiftok-M2Reserved_arraytok)) & (stopset1)) != 0))
3041 : {
3042 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KELSIF}", 9)));
3043 0 : n += 1;
3044 : }
3045 12 : if ((((1 << (M2Reserved_elsetok-M2Reserved_arraytok)) & (stopset1)) != 0))
3046 : {
3047 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KELSE}", 8)));
3048 0 : n += 1;
3049 : }
3050 12 : if ((((1 << (M2Reserved_dotok-M2Reserved_arraytok)) & (stopset1)) != 0))
3051 : {
3052 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KDO}", 6)));
3053 0 : n += 1;
3054 : }
3055 12 : if ((((1 << (M2Reserved_divtok-M2Reserved_arraytok)) & (stopset1)) != 0))
3056 : {
3057 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KDIV}", 7)));
3058 0 : n += 1;
3059 : }
3060 12 : if ((((1 << (M2Reserved_definitiontok-M2Reserved_arraytok)) & (stopset1)) != 0))
3061 : {
3062 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KDEFINITION}", 14)));
3063 0 : n += 1;
3064 : }
3065 12 : if ((((1 << (M2Reserved_consttok-M2Reserved_arraytok)) & (stopset1)) != 0))
3066 : {
3067 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KCONST}", 9)));
3068 0 : n += 1;
3069 : }
3070 12 : if ((((1 << (M2Reserved_casetok-M2Reserved_arraytok)) & (stopset1)) != 0))
3071 : {
3072 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KCASE}", 8)));
3073 0 : n += 1;
3074 : }
3075 12 : if ((((1 << (M2Reserved_bytok-M2Reserved_arraytok)) & (stopset1)) != 0))
3076 : {
3077 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KBY}", 6)));
3078 0 : n += 1;
3079 : }
3080 12 : if ((((1 << (M2Reserved_begintok-M2Reserved_arraytok)) & (stopset1)) != 0))
3081 : {
3082 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KBEGIN}", 9)));
3083 0 : n += 1;
3084 : }
3085 12 : if ((((1 << (M2Reserved_arraytok-M2Reserved_arraytok)) & (stopset1)) != 0))
3086 : {
3087 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KARRAY}", 9)));
3088 0 : n += 1;
3089 : }
3090 12 : if ((((1 << (M2Reserved_andtok-M2Reserved_eoftok)) & (stopset0)) != 0))
3091 : {
3092 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%KAND}", 7)));
3093 0 : n += 1;
3094 : }
3095 12 : if ((((1 << (M2Reserved_colontok-M2Reserved_eoftok)) & (stopset0)) != 0))
3096 : {
3097 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K:}", 5)));
3098 0 : n += 1;
3099 : }
3100 12 : if ((((1 << (M2Reserved_periodperiodtok-M2Reserved_eoftok)) & (stopset0)) != 0))
3101 : {
3102 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K..}", 6)));
3103 0 : n += 1;
3104 : }
3105 12 : if ((((1 << (M2Reserved_rdirectivetok-M2Reserved_eoftok)) & (stopset0)) != 0))
3106 : {
3107 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K*>}", 6)));
3108 0 : n += 1;
3109 : }
3110 12 : if ((((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok)) & (stopset0)) != 0))
3111 : {
3112 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K<*}", 6)));
3113 0 : n += 1;
3114 : }
3115 12 : if ((((1 << (M2Reserved_greaterequaltok-M2Reserved_eoftok)) & (stopset0)) != 0))
3116 : {
3117 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K>=}", 6)));
3118 0 : n += 1;
3119 : }
3120 12 : if ((((1 << (M2Reserved_lessequaltok-M2Reserved_eoftok)) & (stopset0)) != 0))
3121 : {
3122 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K<=}", 6)));
3123 0 : n += 1;
3124 : }
3125 12 : if ((((1 << (M2Reserved_lessgreatertok-M2Reserved_eoftok)) & (stopset0)) != 0))
3126 : {
3127 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K<>}", 6)));
3128 0 : n += 1;
3129 : }
3130 12 : if ((((1 << (M2Reserved_hashtok-M2Reserved_eoftok)) & (stopset0)) != 0))
3131 : {
3132 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K#}", 5)));
3133 0 : n += 1;
3134 : }
3135 12 : if ((((1 << (M2Reserved_equaltok-M2Reserved_eoftok)) & (stopset0)) != 0))
3136 : {
3137 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K=}", 5)));
3138 0 : n += 1;
3139 : }
3140 12 : if ((((1 << (M2Reserved_uparrowtok-M2Reserved_eoftok)) & (stopset0)) != 0))
3141 : {
3142 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K^}", 5)));
3143 0 : n += 1;
3144 : }
3145 12 : if ((((1 << (M2Reserved_semicolontok-M2Reserved_eoftok)) & (stopset0)) != 0))
3146 : {
3147 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K;}", 5)));
3148 0 : n += 1;
3149 : }
3150 12 : if ((((1 << (M2Reserved_commatok-M2Reserved_eoftok)) & (stopset0)) != 0))
3151 : {
3152 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K,}", 5)));
3153 0 : n += 1;
3154 : }
3155 12 : if ((((1 << (M2Reserved_periodtok-M2Reserved_eoftok)) & (stopset0)) != 0))
3156 : {
3157 6 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K.}", 5)));
3158 6 : n += 1;
3159 : }
3160 12 : if ((((1 << (M2Reserved_ambersandtok-M2Reserved_eoftok)) & (stopset0)) != 0))
3161 : {
3162 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K&}", 5)));
3163 0 : n += 1;
3164 : }
3165 12 : if ((((1 << (M2Reserved_dividetok-M2Reserved_eoftok)) & (stopset0)) != 0))
3166 : {
3167 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K/}", 5)));
3168 0 : n += 1;
3169 : }
3170 12 : if ((((1 << (M2Reserved_timestok-M2Reserved_eoftok)) & (stopset0)) != 0))
3171 : {
3172 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K*}", 5)));
3173 0 : n += 1;
3174 : }
3175 12 : if ((((1 << (M2Reserved_minustok-M2Reserved_eoftok)) & (stopset0)) != 0))
3176 : {
3177 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K-}", 5)));
3178 0 : n += 1;
3179 : }
3180 12 : if ((((1 << (M2Reserved_plustok-M2Reserved_eoftok)) & (stopset0)) != 0))
3181 : {
3182 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K+}", 5)));
3183 0 : n += 1;
3184 : }
3185 12 : if ((((1 << (M2Reserved_doublequotestok-M2Reserved_eoftok)) & (stopset0)) != 0))
3186 : {
3187 0 : message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '`'), '"'), '\''), ',');
3188 0 : n += 1;
3189 : }
3190 12 : if ((((1 << (M2Reserved_singlequotetok-M2Reserved_eoftok)) & (stopset0)) != 0))
3191 : {
3192 0 : message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '"'), '\''), '"'), ',');
3193 0 : n += 1;
3194 : }
3195 12 : if ((((1 << (M2Reserved_greatertok-M2Reserved_eoftok)) & (stopset0)) != 0))
3196 : {
3197 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K>}", 5)));
3198 0 : n += 1;
3199 : }
3200 12 : if ((((1 << (M2Reserved_lesstok-M2Reserved_eoftok)) & (stopset0)) != 0))
3201 : {
3202 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K<}", 5)));
3203 0 : n += 1;
3204 : }
3205 12 : if ((((1 << (M2Reserved_rparatok-M2Reserved_eoftok)) & (stopset0)) != 0))
3206 : {
3207 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K)}", 5)));
3208 0 : n += 1;
3209 : }
3210 12 : if ((((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) & (stopset0)) != 0))
3211 : {
3212 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K(}", 5)));
3213 0 : n += 1;
3214 : }
3215 12 : if ((((1 << (M2Reserved_rcbratok-M2Reserved_eoftok)) & (stopset0)) != 0))
3216 : {
3217 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K%}}", 6)));
3218 0 : n += 1;
3219 : }
3220 12 : if ((((1 << (M2Reserved_lcbratok-M2Reserved_eoftok)) & (stopset0)) != 0))
3221 : {
3222 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K%{}", 6)));
3223 0 : n += 1;
3224 : }
3225 12 : if ((((1 << (M2Reserved_rsbratok-M2Reserved_eoftok)) & (stopset0)) != 0))
3226 : {
3227 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K]}", 5)));
3228 0 : n += 1;
3229 : }
3230 12 : if ((((1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) & (stopset0)) != 0))
3231 : {
3232 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K[}", 5)));
3233 0 : n += 1;
3234 : }
3235 12 : if ((((1 << (M2Reserved_bartok-M2Reserved_eoftok)) & (stopset0)) != 0))
3236 : {
3237 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K|}", 5)));
3238 0 : n += 1;
3239 : }
3240 12 : if ((((1 << (M2Reserved_becomestok-M2Reserved_eoftok)) & (stopset0)) != 0))
3241 : {
3242 0 : message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{%K:=}", 6)));
3243 0 : n += 1;
3244 : }
3245 12 : if ((((1 << (M2Reserved_eoftok-M2Reserved_eoftok)) & (stopset0)) != 0))
3246 : {} /* empty. */
3247 : /* eoftok has no token name (needed to generate error messages) */
3248 12 : if (n == 0)
3249 : {
3250 0 : str = DynamicStrings_InitString ((const char *) " syntax error", 13);
3251 0 : message = DynamicStrings_KillString (message);
3252 : }
3253 12 : else if (n == 1)
3254 : {
3255 : /* avoid dangling else. */
3256 12 : str = DynamicStrings_ConCat (message, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
3257 : }
3258 : else
3259 : {
3260 : /* avoid dangling else. */
3261 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message);
3262 0 : message = DynamicStrings_KillString (message);
3263 : }
3264 12 : return str;
3265 : /* static analysis guarentees a RETURN statement will be used before here. */
3266 : __builtin_unreachable ();
3267 : }
3268 :
3269 :
3270 : /*
3271 : DescribeError - issues a message explaining what tokens were expected
3272 : */
3273 :
3274 0 : static void DescribeError (void)
3275 : {
3276 0 : DynamicStrings_String str;
3277 :
3278 0 : str = DynamicStrings_InitString ((const char *) "", 0);
3279 0 : switch (M2LexBuf_currenttoken)
3280 : {
3281 0 : case M2Reserved_stringtok:
3282 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%Kstring}", 30), DynamicStrings_Mark (str));
3283 0 : break;
3284 :
3285 0 : case M2Reserved_realtok:
3286 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%Kreal number}", 35), DynamicStrings_Mark (str));
3287 0 : break;
3288 :
3289 0 : case M2Reserved_identtok:
3290 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%Kidentifier}", 34), DynamicStrings_Mark (str));
3291 0 : break;
3292 :
3293 0 : case M2Reserved_integertok:
3294 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%Kinteger number}", 38), DynamicStrings_Mark (str));
3295 0 : break;
3296 :
3297 0 : case M2Reserved_inlinetok:
3298 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K__INLINE__}", 34), DynamicStrings_Mark (str));
3299 0 : break;
3300 :
3301 0 : case M2Reserved_builtintok:
3302 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K__BUILTIN__}", 35), DynamicStrings_Mark (str));
3303 0 : break;
3304 :
3305 0 : case M2Reserved_attributetok:
3306 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K__ATTRIBUTE__}", 37), DynamicStrings_Mark (str));
3307 0 : break;
3308 :
3309 0 : case M2Reserved_filetok:
3310 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K__FILE__}", 32), DynamicStrings_Mark (str));
3311 0 : break;
3312 :
3313 0 : case M2Reserved_linetok:
3314 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K__LINE__}", 32), DynamicStrings_Mark (str));
3315 0 : break;
3316 :
3317 0 : case M2Reserved_datetok:
3318 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K__DATE__}", 32), DynamicStrings_Mark (str));
3319 0 : break;
3320 :
3321 0 : case M2Reserved_periodperiodperiodtok:
3322 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K...}", 27), DynamicStrings_Mark (str));
3323 0 : break;
3324 :
3325 0 : case M2Reserved_volatiletok:
3326 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KVOLATILE}", 32), DynamicStrings_Mark (str));
3327 0 : break;
3328 :
3329 0 : case M2Reserved_asmtok:
3330 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KASM}", 27), DynamicStrings_Mark (str));
3331 0 : break;
3332 :
3333 0 : case M2Reserved_withtok:
3334 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KWITH}", 28), DynamicStrings_Mark (str));
3335 0 : break;
3336 :
3337 0 : case M2Reserved_whiletok:
3338 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KWHILE}", 29), DynamicStrings_Mark (str));
3339 0 : break;
3340 :
3341 0 : case M2Reserved_vartok:
3342 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KVAR}", 27), DynamicStrings_Mark (str));
3343 0 : break;
3344 :
3345 0 : case M2Reserved_untiltok:
3346 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KUNTIL}", 29), DynamicStrings_Mark (str));
3347 0 : break;
3348 :
3349 0 : case M2Reserved_typetok:
3350 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KTYPE}", 28), DynamicStrings_Mark (str));
3351 0 : break;
3352 :
3353 0 : case M2Reserved_totok:
3354 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KTO}", 26), DynamicStrings_Mark (str));
3355 0 : break;
3356 :
3357 0 : case M2Reserved_thentok:
3358 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KTHEN}", 28), DynamicStrings_Mark (str));
3359 0 : break;
3360 :
3361 0 : case M2Reserved_settok:
3362 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KSET}", 27), DynamicStrings_Mark (str));
3363 0 : break;
3364 :
3365 0 : case M2Reserved_returntok:
3366 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KRETURN}", 30), DynamicStrings_Mark (str));
3367 0 : break;
3368 :
3369 0 : case M2Reserved_retrytok:
3370 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KRETRY}", 29), DynamicStrings_Mark (str));
3371 0 : break;
3372 :
3373 0 : case M2Reserved_repeattok:
3374 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KREPEAT}", 30), DynamicStrings_Mark (str));
3375 0 : break;
3376 :
3377 0 : case M2Reserved_remtok:
3378 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KREM}", 27), DynamicStrings_Mark (str));
3379 0 : break;
3380 :
3381 0 : case M2Reserved_recordtok:
3382 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KRECORD}", 30), DynamicStrings_Mark (str));
3383 0 : break;
3384 :
3385 0 : case M2Reserved_unqualifiedtok:
3386 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KUNQUALIFIED}", 35), DynamicStrings_Mark (str));
3387 0 : break;
3388 :
3389 0 : case M2Reserved_qualifiedtok:
3390 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KQUALIFIED}", 33), DynamicStrings_Mark (str));
3391 0 : break;
3392 :
3393 0 : case M2Reserved_proceduretok:
3394 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KPROCEDURE}", 33), DynamicStrings_Mark (str));
3395 0 : break;
3396 :
3397 0 : case M2Reserved_pointertok:
3398 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KPOINTER}", 31), DynamicStrings_Mark (str));
3399 0 : break;
3400 :
3401 0 : case M2Reserved_packedsettok:
3402 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KPACKEDSET}", 33), DynamicStrings_Mark (str));
3403 0 : break;
3404 :
3405 0 : case M2Reserved_ortok:
3406 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KOR}", 26), DynamicStrings_Mark (str));
3407 0 : break;
3408 :
3409 0 : case M2Reserved_oftok:
3410 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KOF}", 26), DynamicStrings_Mark (str));
3411 0 : break;
3412 :
3413 0 : case M2Reserved_nottok:
3414 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KNOT}", 27), DynamicStrings_Mark (str));
3415 0 : break;
3416 :
3417 0 : case M2Reserved_moduletok:
3418 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KMODULE}", 30), DynamicStrings_Mark (str));
3419 0 : break;
3420 :
3421 0 : case M2Reserved_modtok:
3422 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KMOD}", 27), DynamicStrings_Mark (str));
3423 0 : break;
3424 :
3425 0 : case M2Reserved_looptok:
3426 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KLOOP}", 28), DynamicStrings_Mark (str));
3427 0 : break;
3428 :
3429 0 : case M2Reserved_intok:
3430 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KIN}", 26), DynamicStrings_Mark (str));
3431 0 : break;
3432 :
3433 0 : case M2Reserved_importtok:
3434 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KIMPORT}", 30), DynamicStrings_Mark (str));
3435 0 : break;
3436 :
3437 0 : case M2Reserved_implementationtok:
3438 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KIMPLEMENTATION}", 38), DynamicStrings_Mark (str));
3439 0 : break;
3440 :
3441 0 : case M2Reserved_iftok:
3442 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KIF}", 26), DynamicStrings_Mark (str));
3443 0 : break;
3444 :
3445 0 : case M2Reserved_fromtok:
3446 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KFROM}", 28), DynamicStrings_Mark (str));
3447 0 : break;
3448 :
3449 0 : case M2Reserved_forwardtok:
3450 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KFORWARD}", 31), DynamicStrings_Mark (str));
3451 0 : break;
3452 :
3453 0 : case M2Reserved_fortok:
3454 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KFOR}", 27), DynamicStrings_Mark (str));
3455 0 : break;
3456 :
3457 0 : case M2Reserved_finallytok:
3458 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KFINALLY}", 31), DynamicStrings_Mark (str));
3459 0 : break;
3460 :
3461 0 : case M2Reserved_exporttok:
3462 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KEXPORT}", 30), DynamicStrings_Mark (str));
3463 0 : break;
3464 :
3465 0 : case M2Reserved_exittok:
3466 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KEXIT}", 28), DynamicStrings_Mark (str));
3467 0 : break;
3468 :
3469 0 : case M2Reserved_excepttok:
3470 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KEXCEPT}", 30), DynamicStrings_Mark (str));
3471 0 : break;
3472 :
3473 0 : case M2Reserved_endtok:
3474 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KEND}", 27), DynamicStrings_Mark (str));
3475 0 : break;
3476 :
3477 0 : case M2Reserved_elsiftok:
3478 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KELSIF}", 29), DynamicStrings_Mark (str));
3479 0 : break;
3480 :
3481 0 : case M2Reserved_elsetok:
3482 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KELSE}", 28), DynamicStrings_Mark (str));
3483 0 : break;
3484 :
3485 0 : case M2Reserved_dotok:
3486 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KDO}", 26), DynamicStrings_Mark (str));
3487 0 : break;
3488 :
3489 0 : case M2Reserved_divtok:
3490 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KDIV}", 27), DynamicStrings_Mark (str));
3491 0 : break;
3492 :
3493 0 : case M2Reserved_definitiontok:
3494 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KDEFINITION}", 34), DynamicStrings_Mark (str));
3495 0 : break;
3496 :
3497 0 : case M2Reserved_consttok:
3498 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KCONST}", 29), DynamicStrings_Mark (str));
3499 0 : break;
3500 :
3501 0 : case M2Reserved_casetok:
3502 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KCASE}", 28), DynamicStrings_Mark (str));
3503 0 : break;
3504 :
3505 0 : case M2Reserved_bytok:
3506 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KBY}", 26), DynamicStrings_Mark (str));
3507 0 : break;
3508 :
3509 0 : case M2Reserved_begintok:
3510 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KBEGIN}", 29), DynamicStrings_Mark (str));
3511 0 : break;
3512 :
3513 0 : case M2Reserved_arraytok:
3514 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KARRAY}", 29), DynamicStrings_Mark (str));
3515 0 : break;
3516 :
3517 0 : case M2Reserved_andtok:
3518 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%KAND}", 27), DynamicStrings_Mark (str));
3519 0 : break;
3520 :
3521 0 : case M2Reserved_colontok:
3522 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K:}", 25), DynamicStrings_Mark (str));
3523 0 : break;
3524 :
3525 0 : case M2Reserved_periodperiodtok:
3526 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K..}", 26), DynamicStrings_Mark (str));
3527 0 : break;
3528 :
3529 0 : case M2Reserved_rdirectivetok:
3530 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K*>}", 26), DynamicStrings_Mark (str));
3531 0 : break;
3532 :
3533 0 : case M2Reserved_ldirectivetok:
3534 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K<*}", 26), DynamicStrings_Mark (str));
3535 0 : break;
3536 :
3537 0 : case M2Reserved_greaterequaltok:
3538 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K>=}", 26), DynamicStrings_Mark (str));
3539 0 : break;
3540 :
3541 0 : case M2Reserved_lessequaltok:
3542 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K<=}", 26), DynamicStrings_Mark (str));
3543 0 : break;
3544 :
3545 0 : case M2Reserved_lessgreatertok:
3546 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K<>}", 26), DynamicStrings_Mark (str));
3547 0 : break;
3548 :
3549 0 : case M2Reserved_hashtok:
3550 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K#}", 25), DynamicStrings_Mark (str));
3551 0 : break;
3552 :
3553 0 : case M2Reserved_equaltok:
3554 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K=}", 25), DynamicStrings_Mark (str));
3555 0 : break;
3556 :
3557 0 : case M2Reserved_uparrowtok:
3558 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K^}", 25), DynamicStrings_Mark (str));
3559 0 : break;
3560 :
3561 0 : case M2Reserved_semicolontok:
3562 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K;}", 25), DynamicStrings_Mark (str));
3563 0 : break;
3564 :
3565 0 : case M2Reserved_commatok:
3566 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K,}", 25), DynamicStrings_Mark (str));
3567 0 : break;
3568 :
3569 0 : case M2Reserved_periodtok:
3570 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K.}", 25), DynamicStrings_Mark (str));
3571 0 : break;
3572 :
3573 0 : case M2Reserved_ambersandtok:
3574 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K&}", 25), DynamicStrings_Mark (str));
3575 0 : break;
3576 :
3577 0 : case M2Reserved_dividetok:
3578 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K/}", 25), DynamicStrings_Mark (str));
3579 0 : break;
3580 :
3581 0 : case M2Reserved_timestok:
3582 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K*}", 25), DynamicStrings_Mark (str));
3583 0 : break;
3584 :
3585 0 : case M2Reserved_minustok:
3586 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K-}", 25), DynamicStrings_Mark (str));
3587 0 : break;
3588 :
3589 0 : case M2Reserved_plustok:
3590 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K+}", 25), DynamicStrings_Mark (str));
3591 0 : break;
3592 :
3593 0 : case M2Reserved_doublequotestok:
3594 0 : str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str));
3595 0 : break;
3596 :
3597 0 : case M2Reserved_singlequotetok:
3598 0 : str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str));
3599 0 : break;
3600 :
3601 0 : case M2Reserved_greatertok:
3602 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K>}", 25), DynamicStrings_Mark (str));
3603 0 : break;
3604 :
3605 0 : case M2Reserved_lesstok:
3606 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K<}", 25), DynamicStrings_Mark (str));
3607 0 : break;
3608 :
3609 0 : case M2Reserved_rparatok:
3610 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K)}", 25), DynamicStrings_Mark (str));
3611 0 : break;
3612 :
3613 0 : case M2Reserved_lparatok:
3614 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K(}", 25), DynamicStrings_Mark (str));
3615 0 : break;
3616 :
3617 0 : case M2Reserved_rcbratok:
3618 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K%}}", 26), DynamicStrings_Mark (str));
3619 0 : break;
3620 :
3621 0 : case M2Reserved_lcbratok:
3622 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K%{}", 26), DynamicStrings_Mark (str));
3623 0 : break;
3624 :
3625 0 : case M2Reserved_rsbratok:
3626 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K]}", 25), DynamicStrings_Mark (str));
3627 0 : break;
3628 :
3629 0 : case M2Reserved_lsbratok:
3630 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K[}", 25), DynamicStrings_Mark (str));
3631 0 : break;
3632 :
3633 0 : case M2Reserved_bartok:
3634 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K|}", 25), DynamicStrings_Mark (str));
3635 0 : break;
3636 :
3637 0 : case M2Reserved_becomestok:
3638 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K:=}", 26), DynamicStrings_Mark (str));
3639 0 : break;
3640 :
3641 0 : case M2Reserved_eoftok:
3642 0 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {%K}", 24), DynamicStrings_Mark (str));
3643 0 : break;
3644 :
3645 :
3646 : default:
3647 : break;
3648 : }
3649 0 : ErrorString (str);
3650 0 : }
3651 :
3652 :
3653 : /*
3654 : SyntaxError - after a syntax error we skip all tokens up until we reach
3655 : a stop symbol.
3656 : */
3657 :
3658 0 : static void SyntaxError (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3659 : {
3660 0 : DescribeError ();
3661 0 : if (Debugging)
3662 : {
3663 : M2Printf_printf0 ((const char *) "\\nskipping token *** ", 21);
3664 : }
3665 : /* --fixme-- this assumes a 32 bit word size. */
3666 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)))))
3667 : {
3668 0 : M2LexBuf_GetToken ();
3669 : }
3670 0 : if (Debugging)
3671 : {
3672 : M2Printf_printf0 ((const char *) " ***\\n", 6);
3673 : }
3674 0 : }
3675 :
3676 :
3677 : /*
3678 : SyntaxCheck -
3679 : */
3680 :
3681 61226496 : static void SyntaxCheck (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3682 : {
3683 : /* --fixme-- this assumes a 32 bit word size. */
3684 61226496 : 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)))))
3685 : {
3686 0 : SyntaxError (stopset0, stopset1, stopset2);
3687 : }
3688 61226496 : }
3689 :
3690 :
3691 : /*
3692 : WarnMissingToken - generates a warning message about a missing token, t.
3693 : */
3694 :
3695 12 : static void WarnMissingToken (M2Reserved_toktype t)
3696 : {
3697 12 : P3Build_SetOfStop0 s0;
3698 12 : P3Build_SetOfStop1 s1;
3699 12 : P3Build_SetOfStop2 s2;
3700 12 : DynamicStrings_String str;
3701 :
3702 12 : s0 = (P3Build_SetOfStop0) 0;
3703 12 : s1 = (P3Build_SetOfStop1) 0;
3704 12 : s2 = (P3Build_SetOfStop2) 0;
3705 12 : if ( ((unsigned int) (t)) < 32)
3706 : {
3707 6 : s0 = (P3Build_SetOfStop0) ((1 << (t-M2Reserved_eoftok)));
3708 : }
3709 6 : else if ( ((unsigned int) (t)) < 64)
3710 : {
3711 : /* avoid dangling else. */
3712 0 : s1 = (P3Build_SetOfStop1) ((1 << (t-M2Reserved_arraytok)));
3713 : }
3714 : else
3715 : {
3716 : /* avoid dangling else. */
3717 6 : s2 = (P3Build_SetOfStop2) ((1 << (t-M2Reserved_unqualifiedtok)));
3718 : }
3719 12 : str = DescribeStop (s0, s1, s2);
3720 12 : str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error,", 13), DynamicStrings_Mark (str));
3721 12 : M2Error_ErrorStringAt (str, M2LexBuf_GetTokenNo ());
3722 12 : }
3723 :
3724 :
3725 : /*
3726 : MissingToken - generates a warning message about a missing token, t.
3727 : */
3728 :
3729 12 : static void MissingToken (M2Reserved_toktype t)
3730 : {
3731 12 : WarnMissingToken (t);
3732 12 : if ((((t != M2Reserved_identtok) && (t != M2Reserved_integertok)) && (t != M2Reserved_realtok)) && (t != M2Reserved_stringtok))
3733 : {
3734 6 : if (Debugging)
3735 : {
3736 : M2Printf_printf0 ((const char *) "inserting token\\n", 17);
3737 : }
3738 6 : M2LexBuf_InsertToken (t);
3739 : }
3740 12 : }
3741 :
3742 :
3743 : /*
3744 : CheckAndInsert -
3745 : */
3746 :
3747 0 : static bool CheckAndInsert (M2Reserved_toktype t, P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3748 : {
3749 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))))
3750 : {
3751 0 : WarnMissingToken (t);
3752 0 : M2LexBuf_InsertTokenAndRewind (t);
3753 0 : return true;
3754 : }
3755 : else
3756 : {
3757 : return false;
3758 : }
3759 : /* static analysis guarentees a RETURN statement will be used before here. */
3760 : __builtin_unreachable ();
3761 : }
3762 :
3763 :
3764 : /*
3765 : InStopSet
3766 : */
3767 :
3768 0 : static bool InStopSet (M2Reserved_toktype t, P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3769 : {
3770 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))))
3771 : {
3772 : return true;
3773 : }
3774 : else
3775 : {
3776 0 : return false;
3777 : }
3778 : /* static analysis guarentees a RETURN statement will be used before here. */
3779 : __builtin_unreachable ();
3780 : }
3781 :
3782 :
3783 : /*
3784 : PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
3785 : If it is not then it will insert a token providing the token
3786 : is one of ; ] ) } . OF END ,
3787 :
3788 : if the stopset contains <identtok> then we do not insert a token
3789 : */
3790 :
3791 0 : static void PeepToken (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3792 : {
3793 : /* and again (see above re: ORD)
3794 : */
3795 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))))
3796 : {
3797 : /* SyntaxCheck would fail since currentoken is not part of the stopset
3798 : we check to see whether any of currenttoken might be a commonly omitted token */
3799 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)))
3800 : {} /* empty. */
3801 : }
3802 0 : }
3803 :
3804 :
3805 : /*
3806 : Expect -
3807 : */
3808 :
3809 61226496 : static void Expect (M2Reserved_toktype t, P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3810 : {
3811 61226496 : if (M2LexBuf_currenttoken == t)
3812 : {
3813 : /* avoid dangling else. */
3814 61226484 : M2LexBuf_GetToken ();
3815 61226484 : if (Pass1)
3816 : {
3817 : PeepToken (stopset0, stopset1, stopset2);
3818 : }
3819 : }
3820 : else
3821 : {
3822 12 : MissingToken (t);
3823 : }
3824 61226496 : SyntaxCheck (stopset0, stopset1, stopset2);
3825 61226496 : }
3826 :
3827 :
3828 : /*
3829 : Ident - error checking varient of Ident
3830 : */
3831 :
3832 24189395 : static void Ident (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3833 : {
3834 24189395 : if (M2Quads_IsAutoPushOn ())
3835 : {
3836 : /* ; MetaErrorT0 (GetTokenNo(), "{%W}an ident") */
3837 13319143 : M2Quads_PushTFtok (NameKey_makekey (M2LexBuf_currentstring), static_cast<unsigned int> (M2Reserved_identtok), M2LexBuf_GetTokenNo ());
3838 : }
3839 24189395 : Expect (M2Reserved_identtok, stopset0, stopset1, stopset2);
3840 24189395 : }
3841 :
3842 :
3843 : /*
3844 : string -
3845 : */
3846 :
3847 70926 : static void string (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3848 : {
3849 70926 : if (M2Quads_IsAutoPushOn ())
3850 : {
3851 70926 : M2Quads_PushTFtok (NameKey_makekey (M2LexBuf_currentstring), static_cast<unsigned int> (M2Reserved_stringtok), M2LexBuf_GetTokenNo ());
3852 70926 : P2SymBuild_BuildString ();
3853 : }
3854 70926 : Expect (M2Reserved_stringtok, stopset0, stopset1, stopset2);
3855 70926 : }
3856 :
3857 :
3858 : /*
3859 : Integer -
3860 : */
3861 :
3862 281090 : static void Integer (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3863 : {
3864 281090 : if (M2Quads_IsAutoPushOn ())
3865 : {
3866 281090 : M2Quads_PushTFtok (NameKey_makekey (M2LexBuf_currentstring), static_cast<unsigned int> (M2Reserved_integertok), M2LexBuf_GetTokenNo ());
3867 281090 : P2SymBuild_BuildNumber ();
3868 : }
3869 281090 : Expect (M2Reserved_integertok, stopset0, stopset1, stopset2);
3870 281090 : }
3871 :
3872 :
3873 : /*
3874 : Real -
3875 : */
3876 :
3877 6658 : static void Real (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3878 : {
3879 6658 : if (M2Quads_IsAutoPushOn ())
3880 : {
3881 6658 : M2Quads_PushTFtok (NameKey_makekey (M2LexBuf_currentstring), static_cast<unsigned int> (M2Reserved_realtok), M2LexBuf_GetTokenNo ());
3882 6658 : P2SymBuild_BuildNumber ();
3883 : }
3884 6658 : Expect (M2Reserved_realtok, stopset0, stopset1, stopset2);
3885 6658 : }
3886 :
3887 :
3888 : /*
3889 : PushTFQualident - push the result of the Qualident
3890 : to the stack. It checks to see if init
3891 : is a procedure or proc type and if so
3892 : it does not push the return type.
3893 : */
3894 :
3895 8815783 : static void PushTFQualident (unsigned int tok, unsigned int tokstart, unsigned int init)
3896 : {
3897 8815783 : if (tok != tokstart)
3898 : {
3899 45747 : tok = M2LexBuf_MakeVirtualTok (tokstart, tokstart, tok);
3900 : }
3901 8815783 : if ((((SymbolTable_IsProcedure (init)) || (SymbolTable_IsProcType (init))) || (SymbolTable_IsModule (init))) || (SymbolTable_IsDefImp (init)))
3902 : {
3903 330174 : M2Quads_PushTtok (init, tok);
3904 330174 : M2Quads_Annotate ((const char *) "%1s(%1d)||qualident procedure/proctype", 38);
3905 : }
3906 : else
3907 : {
3908 8485609 : M2Quads_Annotate ((const char *) "%1s(%1d)|%1s(%1d)||qualident|type", 33);
3909 8485609 : M2Quads_PushTFtok (init, SymbolTable_GetType (init), tok);
3910 : }
3911 8815783 : }
3912 :
3913 :
3914 : /*
3915 : CheckModuleQualident - check to see if the beginning ident of the qualident is an
3916 : imported module.
3917 : */
3918 :
3919 8815783 : static void CheckModuleQualident (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3920 : {
3921 8815783 : NameKey_Name name;
3922 8815783 : unsigned int init;
3923 8815783 : unsigned int nextLevel;
3924 8815783 : unsigned int tok;
3925 8815783 : unsigned int tokstart;
3926 :
3927 8815783 : M2Quads_PopTtok (&name, &tokstart);
3928 8815783 : tok = tokstart;
3929 8815783 : init = SymbolTable_RequestSym (tok, name);
3930 8815783 : if (((SymbolTable_IsImported (SymbolTable_GetCurrentModule (), init)) && (SymbolTable_IsDefImp (init))) || (SymbolTable_IsModule (init)))
3931 : {
3932 91506 : while ((SymbolTable_IsDefImp (init)) || (SymbolTable_IsModule (init)))
3933 : {
3934 45759 : Expect (M2Reserved_periodtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
3935 45759 : SymbolTable_StartScope (init);
3936 45759 : Ident (stopset0, stopset1, stopset2);
3937 45759 : M2Quads_PopTtok (&name, &tok);
3938 45759 : nextLevel = SymbolTable_RequestSym (tok, name);
3939 45759 : SymbolTable_EndScope ();
3940 45759 : P3SymBuild_CheckCanBeImported (init, nextLevel);
3941 45759 : init = nextLevel;
3942 : }
3943 45747 : PushTFQualident (tok, tokstart, init);
3944 45747 : SymbolTable_PutIncluded (init);
3945 : }
3946 : else
3947 : {
3948 8770036 : PushTFQualident (tok, tokstart, init);
3949 : }
3950 8815783 : }
3951 :
3952 :
3953 : /*
3954 : FileUnit :=
3955 : % PushAutoOff %
3956 : ( DefinitionModule |
3957 : ImplementationOrProgramModule )
3958 : % PopAuto %
3959 :
3960 :
3961 : first symbols:implementationtok, moduletok, definitiontok
3962 :
3963 : cannot reachend
3964 : */
3965 :
3966 183766 : static void FileUnit (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
3967 : {
3968 183766 : M2Quads_PushAutoOff ();
3969 183766 : if (M2LexBuf_currenttoken == M2Reserved_definitiontok)
3970 : {
3971 167641 : DefinitionModule (stopset0, stopset1, stopset2);
3972 : }
3973 16125 : else if (((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_implementationtok-M2Reserved_arraytok)) | (1 << (M2Reserved_moduletok-M2Reserved_arraytok))))) != 0)))
3974 : {
3975 : /* avoid dangling else. */
3976 16125 : ImplementationOrProgramModule (stopset0, stopset1, stopset2);
3977 : }
3978 : else
3979 : {
3980 : /* avoid dangling else. */
3981 0 : ErrorArray ((const char *) "expecting one of: {%KIMPLEMENTATION} {%KMODULE} {%KDEFINITION}", 62);
3982 : }
3983 183550 : M2Quads_PopAuto ();
3984 183550 : }
3985 :
3986 :
3987 : /*
3988 : ProgramModule :=
3989 : % VAR modulet, endt, namet: CARDINAL ; %
3990 :
3991 : % modulet := GetTokenNo () %
3992 : 'MODULE'
3993 : % M2Error.DefaultProgramModule %
3994 :
3995 : % PushAutoOn %
3996 : Ident
3997 : % P3StartBuildProgModule %
3998 :
3999 : % StartBuildModFile (modulet) %
4000 :
4001 : % BuildModuleStart (modulet) %
4002 :
4003 : % PushAutoOff %
4004 : [ Priority ] ';'
4005 : % BuildScaffold (modulet,
4006 : GetCurrentModule ()) %
4007 : { Import } Block
4008 : % PushAutoOn %
4009 :
4010 : % endt := GetTokenNo () -1 %
4011 :
4012 : % namet := GetTokenNo () %
4013 : Ident
4014 : % EndBuildFile (endt) %
4015 :
4016 : % P3EndBuildProgModule (namet) %
4017 : '.'
4018 : % PopAuto ; PopAuto %
4019 :
4020 :
4021 : first symbols:moduletok
4022 :
4023 : cannot reachend
4024 : */
4025 :
4026 11714 : static void ProgramModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4027 : {
4028 11714 : unsigned int modulet;
4029 11714 : unsigned int endt;
4030 11714 : unsigned int namet;
4031 :
4032 11714 : modulet = M2LexBuf_GetTokenNo ();
4033 11714 : Expect (M2Reserved_moduletok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
4034 11714 : M2Error_DefaultProgramModule ();
4035 11714 : M2Quads_PushAutoOn ();
4036 11714 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2);
4037 11714 : P3SymBuild_P3StartBuildProgModule ();
4038 11714 : M2Quads_StartBuildModFile (modulet);
4039 11714 : M2Quads_BuildModuleStart (modulet);
4040 11714 : M2Quads_PushAutoOff ();
4041 11714 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
4042 : {
4043 12 : Priority (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
4044 : }
4045 11714 : Expect (M2Reserved_semicolontok, stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
4046 11714 : M2Quads_BuildScaffold (modulet, SymbolTable_GetCurrentModule ());
4047 37668 : while (((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_fromtok-M2Reserved_arraytok)) | (1 << (M2Reserved_importtok-M2Reserved_arraytok))))) != 0)))
4048 : {
4049 14240 : Import (stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok))));
4050 : }
4051 : /* while */
4052 11714 : Block (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
4053 11498 : M2Quads_PushAutoOn ();
4054 11498 : endt = (M2LexBuf_GetTokenNo ())-1;
4055 11498 : namet = M2LexBuf_GetTokenNo ();
4056 11498 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok))), stopset1, stopset2);
4057 11498 : M2Quads_EndBuildFile (endt);
4058 11498 : P3SymBuild_P3EndBuildProgModule (namet);
4059 11498 : Expect (M2Reserved_periodtok, stopset0, stopset1, stopset2);
4060 11498 : M2Quads_PopAuto ();
4061 11498 : M2Quads_PopAuto ();
4062 11498 : }
4063 :
4064 :
4065 : /*
4066 : ImplementationModule :=
4067 : % VAR modulet, endt, namet: CARDINAL ; %
4068 :
4069 : % modulet := GetTokenNo () %
4070 : 'IMPLEMENTATION'
4071 : % M2Error.DefaultImplementationModule %
4072 : 'MODULE'
4073 : % PushAutoOn %
4074 : Ident
4075 : % StartBuildModFile (modulet) %
4076 :
4077 : % P3StartBuildImpModule %
4078 :
4079 : % BuildModuleStart (modulet) %
4080 :
4081 : % PushAutoOff %
4082 : [ Priority ] ';'
4083 : % BuildScaffold (modulet,
4084 : GetCurrentModule ()) %
4085 : { Import } Block
4086 : % PushAutoOn %
4087 :
4088 : % endt := GetTokenNo () -1 %
4089 :
4090 : % namet := GetTokenNo () %
4091 : Ident
4092 : % EndBuildFile (endt) %
4093 :
4094 : % P3EndBuildImpModule (namet) %
4095 : '.'
4096 : % PopAuto ; PopAuto ; PopAuto %
4097 :
4098 :
4099 : first symbols:implementationtok
4100 :
4101 : cannot reachend
4102 : */
4103 :
4104 4411 : static void ImplementationModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4105 : {
4106 4411 : unsigned int modulet;
4107 4411 : unsigned int endt;
4108 4411 : unsigned int namet;
4109 :
4110 4411 : modulet = M2LexBuf_GetTokenNo ();
4111 4411 : Expect (M2Reserved_implementationtok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_moduletok-M2Reserved_arraytok))), stopset2);
4112 4411 : M2Error_DefaultImplementationModule ();
4113 4411 : Expect (M2Reserved_moduletok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
4114 4411 : M2Quads_PushAutoOn ();
4115 4411 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2);
4116 4411 : M2Quads_StartBuildModFile (modulet);
4117 4411 : P3SymBuild_P3StartBuildImpModule ();
4118 4411 : M2Quads_BuildModuleStart (modulet);
4119 4411 : M2Quads_PushAutoOff ();
4120 4411 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
4121 : {
4122 14 : Priority (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
4123 : }
4124 4411 : Expect (M2Reserved_semicolontok, stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
4125 4411 : M2Quads_BuildScaffold (modulet, SymbolTable_GetCurrentModule ());
4126 15468 : while (((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_fromtok-M2Reserved_arraytok)) | (1 << (M2Reserved_importtok-M2Reserved_arraytok))))) != 0)))
4127 : {
4128 6646 : Import (stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok))));
4129 : }
4130 : /* while */
4131 4411 : Block (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
4132 4411 : M2Quads_PushAutoOn ();
4133 4411 : endt = (M2LexBuf_GetTokenNo ())-1;
4134 4411 : namet = M2LexBuf_GetTokenNo ();
4135 4411 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok))), stopset1, stopset2);
4136 4411 : M2Quads_EndBuildFile (endt);
4137 4411 : P3SymBuild_P3EndBuildImpModule (namet);
4138 4411 : Expect (M2Reserved_periodtok, stopset0, stopset1, stopset2);
4139 4411 : M2Quads_PopAuto ();
4140 4411 : M2Quads_PopAuto ();
4141 4411 : M2Quads_PopAuto ();
4142 4411 : }
4143 :
4144 :
4145 : /*
4146 : ImplementationOrProgramModule :=
4147 : % PushAutoOff %
4148 : ( ImplementationModule |
4149 : ProgramModule )
4150 :
4151 : % PopAuto %
4152 :
4153 :
4154 : first symbols:moduletok, implementationtok
4155 :
4156 : cannot reachend
4157 : */
4158 :
4159 16125 : static void ImplementationOrProgramModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4160 : {
4161 16125 : M2Quads_PushAutoOff ();
4162 16125 : if (M2LexBuf_currenttoken == M2Reserved_implementationtok)
4163 : {
4164 4411 : ImplementationModule (stopset0, stopset1, stopset2);
4165 : }
4166 11714 : else if (M2LexBuf_currenttoken == M2Reserved_moduletok)
4167 : {
4168 : /* avoid dangling else. */
4169 11714 : ProgramModule (stopset0, stopset1, stopset2);
4170 : }
4171 : else
4172 : {
4173 : /* avoid dangling else. */
4174 0 : ErrorArray ((const char *) "expecting one of: {%KMODULE} {%KIMPLEMENTATION}", 47);
4175 : }
4176 15909 : M2Quads_PopAuto ();
4177 15909 : }
4178 :
4179 :
4180 : /*
4181 : Number := Integer | Real
4182 :
4183 : first symbols:realtok, integertok
4184 :
4185 : cannot reachend
4186 : */
4187 :
4188 287748 : static void Number (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4189 : {
4190 287748 : if (M2LexBuf_currenttoken == M2Reserved_integertok)
4191 : {
4192 281090 : Integer (stopset0, stopset1, stopset2);
4193 : }
4194 6658 : else if (M2LexBuf_currenttoken == M2Reserved_realtok)
4195 : {
4196 : /* avoid dangling else. */
4197 6658 : Real (stopset0, stopset1, stopset2);
4198 : }
4199 : else
4200 : {
4201 : /* avoid dangling else. */
4202 0 : ErrorArray ((const char *) "expecting one of: {%Kreal number} {%Kinteger number}", 52);
4203 : }
4204 287748 : }
4205 :
4206 :
4207 : /*
4208 : Qualident := Ident
4209 : % IF IsAutoPushOn()
4210 : THEN
4211 : CheckModuleQualident (stopset0, stopset1, stopset2)
4212 : ELSE just parse qualident %
4213 : { '.' Ident }
4214 : % END %
4215 :
4216 :
4217 : first symbols:identtok
4218 :
4219 : cannot reachend
4220 : */
4221 :
4222 8815783 : static void Qualident (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4223 : {
4224 8815783 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok))), stopset1, stopset2);
4225 8815783 : if (M2Quads_IsAutoPushOn ())
4226 : {
4227 8815783 : CheckModuleQualident (stopset0, stopset1, stopset2); /* just parse qualident */
4228 : }
4229 : else
4230 : {
4231 0 : while (M2LexBuf_currenttoken == M2Reserved_periodtok) /* just parse qualident */
4232 : {
4233 0 : Expect (M2Reserved_periodtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
4234 0 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok))), stopset1, stopset2);
4235 : }
4236 : /* while */
4237 : }
4238 8815783 : }
4239 :
4240 :
4241 : /*
4242 : QualidentCheck :=
4243 : % PushAutoOn %
4244 : Qualident
4245 : % PopAuto %
4246 :
4247 : % CheckQualident (OperandTok (1), BlockState, OperandT (1)) %
4248 :
4249 : % IF NOT IsAutoPushOn ()
4250 : THEN
4251 : PopNothing
4252 : END %
4253 :
4254 :
4255 : first symbols:identtok
4256 :
4257 : cannot reachend
4258 : */
4259 :
4260 8273969 : static void QualidentCheck (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4261 : {
4262 8273969 : M2Quads_PushAutoOn ();
4263 8273969 : Qualident (stopset0, stopset1, stopset2);
4264 8273969 : M2Quads_PopAuto ();
4265 8273969 : M2StateCheck_CheckQualident (M2Quads_OperandTok (1), BlockState, M2Quads_OperandT (1));
4266 8273945 : if (! (M2Quads_IsAutoPushOn ()))
4267 : {
4268 8059331 : M2Quads_PopNothing ();
4269 : }
4270 8273945 : }
4271 :
4272 :
4273 : /*
4274 : ConstantDeclaration :=
4275 : % VAR tokno: CARDINAL ; %
4276 :
4277 : % InclConst (BlockState) %
4278 :
4279 : % PushAutoOn %
4280 : ( Ident '='
4281 : % tokno := GetTokenNo () -1 %
4282 :
4283 : % BuildConst %
4284 : ConstExpression )
4285 : % BuildAssignConstant (tokno) %
4286 :
4287 : % PopAuto %
4288 :
4289 : % ExclConst (BlockState) %
4290 :
4291 :
4292 : first symbols:identtok
4293 :
4294 : cannot reachend
4295 : */
4296 :
4297 201527 : static void ConstantDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4298 : {
4299 201527 : unsigned int tokno;
4300 :
4301 201527 : M2StateCheck_InclConst (BlockState);
4302 201527 : M2Quads_PushAutoOn ();
4303 201527 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_equaltok-M2Reserved_eoftok))), stopset1, stopset2);
4304 201527 : Expect (M2Reserved_equaltok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4305 201527 : tokno = (M2LexBuf_GetTokenNo ())-1;
4306 201527 : P3SymBuild_BuildConst ();
4307 201527 : ConstExpression (stopset0, stopset1, stopset2);
4308 201527 : M2Quads_BuildAssignConstant (tokno);
4309 201527 : M2Quads_PopAuto ();
4310 201527 : M2StateCheck_ExclConst (BlockState);
4311 201527 : }
4312 :
4313 :
4314 : /*
4315 : ConstExpression :=
4316 : % VAR tokpos: CARDINAL ; %
4317 :
4318 : % PushInConstExpression %
4319 :
4320 : % PushAutoOn %
4321 : SimpleConstExpr [ Relation
4322 : % tokpos := GetTokenNo ()-1 %
4323 : SimpleConstExpr
4324 :
4325 : % BuildRelOp (tokpos) %
4326 : ]
4327 : % PopAuto %
4328 :
4329 : % PopInConstExpression %
4330 :
4331 :
4332 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4333 :
4334 : cannot reachend
4335 : */
4336 :
4337 266717 : static void ConstExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4338 : {
4339 266717 : unsigned int tokpos;
4340 :
4341 266717 : M2Quads_PushInConstExpression ();
4342 266717 : M2Quads_PushAutoOn ();
4343 266717 : SimpleConstExpr (stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_intok-M2Reserved_arraytok))), stopset2);
4344 266717 : if (((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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))
4345 : {
4346 42 : Relation (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4347 42 : tokpos = (M2LexBuf_GetTokenNo ())-1;
4348 42 : SimpleConstExpr (stopset0, stopset1, stopset2);
4349 42 : M2Quads_BuildRelOp (tokpos);
4350 : }
4351 266717 : M2Quads_PopAuto ();
4352 266717 : M2Quads_PopInConstExpression ();
4353 266717 : }
4354 :
4355 :
4356 : /*
4357 : Relation := '='
4358 : % PushTtok(EqualTok, GetTokenNo() -1) ;
4359 : RecordOp %
4360 : | '#'
4361 : % PushTtok(HashTok, GetTokenNo() -1) ;
4362 : RecordOp %
4363 : | '<>'
4364 : % PushTtok(LessGreaterTok, GetTokenNo() -1) ;
4365 : RecordOp %
4366 : | '<'
4367 : % PushTtok(LessTok, GetTokenNo() -1) %
4368 : | '<='
4369 : % PushTtok(LessEqualTok, GetTokenNo() -1) %
4370 : | '>'
4371 : % PushTtok(GreaterTok, GetTokenNo() -1) %
4372 : | '>='
4373 : % PushTtok(GreaterEqualTok, GetTokenNo() -1) %
4374 : | 'IN'
4375 : % PushTtok(InTok, GetTokenNo() -1) %
4376 :
4377 :
4378 : first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
4379 :
4380 : cannot reachend
4381 : */
4382 :
4383 60638 : static void Relation (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4384 : {
4385 60638 : if (M2LexBuf_currenttoken == M2Reserved_equaltok)
4386 : {
4387 23472 : Expect (M2Reserved_equaltok, stopset0, stopset1, stopset2);
4388 23472 : M2Quads_PushTtok (M2Reserved_EqualTok, (M2LexBuf_GetTokenNo ())-1);
4389 23472 : M2Quads_RecordOp ();
4390 : }
4391 : else if (M2LexBuf_currenttoken == M2Reserved_hashtok)
4392 : {
4393 : /* avoid dangling else. */
4394 13131 : Expect (M2Reserved_hashtok, stopset0, stopset1, stopset2);
4395 13131 : M2Quads_PushTtok (M2Reserved_HashTok, (M2LexBuf_GetTokenNo ())-1);
4396 13131 : M2Quads_RecordOp ();
4397 : }
4398 : else if (M2LexBuf_currenttoken == M2Reserved_lessgreatertok)
4399 : {
4400 : /* avoid dangling else. */
4401 84 : Expect (M2Reserved_lessgreatertok, stopset0, stopset1, stopset2);
4402 84 : M2Quads_PushTtok (M2Reserved_LessGreaterTok, (M2LexBuf_GetTokenNo ())-1);
4403 84 : M2Quads_RecordOp ();
4404 : }
4405 : else if (M2LexBuf_currenttoken == M2Reserved_lesstok)
4406 : {
4407 : /* avoid dangling else. */
4408 7659 : Expect (M2Reserved_lesstok, stopset0, stopset1, stopset2);
4409 7659 : M2Quads_PushTtok (M2Reserved_LessTok, (M2LexBuf_GetTokenNo ())-1);
4410 : }
4411 : else if (M2LexBuf_currenttoken == M2Reserved_lessequaltok)
4412 : {
4413 : /* avoid dangling else. */
4414 4784 : Expect (M2Reserved_lessequaltok, stopset0, stopset1, stopset2);
4415 4784 : M2Quads_PushTtok (M2Reserved_LessEqualTok, (M2LexBuf_GetTokenNo ())-1);
4416 : }
4417 : else if (M2LexBuf_currenttoken == M2Reserved_greatertok)
4418 : {
4419 : /* avoid dangling else. */
4420 6272 : Expect (M2Reserved_greatertok, stopset0, stopset1, stopset2);
4421 6272 : M2Quads_PushTtok (M2Reserved_GreaterTok, (M2LexBuf_GetTokenNo ())-1);
4422 : }
4423 : else if (M2LexBuf_currenttoken == M2Reserved_greaterequaltok)
4424 : {
4425 : /* avoid dangling else. */
4426 2706 : Expect (M2Reserved_greaterequaltok, stopset0, stopset1, stopset2);
4427 2706 : M2Quads_PushTtok (M2Reserved_GreaterEqualTok, (M2LexBuf_GetTokenNo ())-1);
4428 : }
4429 : else if (M2LexBuf_currenttoken == M2Reserved_intok)
4430 : {
4431 : /* avoid dangling else. */
4432 2530 : Expect (M2Reserved_intok, stopset0, stopset1, stopset2);
4433 2530 : M2Quads_PushTtok (M2Reserved_InTok, (M2LexBuf_GetTokenNo ())-1);
4434 : }
4435 : else
4436 : {
4437 : /* avoid dangling else. */
4438 0 : ErrorArray ((const char *) "expecting one of: {%KIN} {%K>=} {%K>} {%K<=} {%K<} {%K<>} {%K#} {%K=}", 69);
4439 : }
4440 60638 : }
4441 :
4442 :
4443 : /*
4444 : SimpleConstExpr := UnaryOrConstTerm { AddOperator
4445 : ConstTerm
4446 :
4447 : % BuildBinaryOp %
4448 : }
4449 :
4450 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4451 :
4452 : cannot reachend
4453 : */
4454 :
4455 266759 : static void SimpleConstExpr (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4456 : {
4457 266759 : UnaryOrConstTerm (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_ortok-M2Reserved_arraytok))), stopset2);
4458 535513 : while (((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok))))) != 0))) || (M2LexBuf_currenttoken == M2Reserved_ortok))
4459 : {
4460 1995 : AddOperator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4461 1995 : ConstTerm (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_ortok-M2Reserved_arraytok))), stopset2);
4462 1995 : M2Quads_BuildBinaryOp ();
4463 : }
4464 : /* while */
4465 266759 : }
4466 :
4467 :
4468 : /*
4469 : UnaryOrConstTerm := '+'
4470 : % PushTtok(PlusTok, GetTokenNo() -1) %
4471 : ConstTerm
4472 : % BuildUnaryOp %
4473 : | '-'
4474 : % PushTtok(MinusTok, GetTokenNo() -1) %
4475 : ConstTerm
4476 : % BuildUnaryOp %
4477 : | ConstTerm
4478 :
4479 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4480 :
4481 : cannot reachend
4482 : */
4483 :
4484 266759 : static void UnaryOrConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4485 : {
4486 266759 : if (M2LexBuf_currenttoken == M2Reserved_plustok)
4487 : {
4488 12 : Expect (M2Reserved_plustok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4489 12 : M2Quads_PushTtok (M2Reserved_PlusTok, (M2LexBuf_GetTokenNo ())-1);
4490 12 : ConstTerm (stopset0, stopset1, stopset2);
4491 12 : M2Quads_BuildUnaryOp ();
4492 : }
4493 266747 : else if (M2LexBuf_currenttoken == M2Reserved_minustok)
4494 : {
4495 : /* avoid dangling else. */
4496 16621 : Expect (M2Reserved_minustok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4497 16621 : M2Quads_PushTtok (M2Reserved_MinusTok, (M2LexBuf_GetTokenNo ())-1);
4498 16621 : ConstTerm (stopset0, stopset1, stopset2);
4499 16621 : M2Quads_BuildUnaryOp ();
4500 : }
4501 250126 : else if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
4502 : {
4503 : /* avoid dangling else. */
4504 250126 : ConstTerm (stopset0, stopset1, stopset2);
4505 : }
4506 : else
4507 : {
4508 : /* avoid dangling else. */
4509 0 : ErrorArray ((const char *) "expecting one of: {%KNOT} {%K(} {%Kinteger number} {%Kreal number} {%K__ATTRIBUTE__} {%Kidentifier} {%K%{} {%Kstring} {%K-} {%K+}", 129);
4510 : }
4511 266759 : }
4512 :
4513 :
4514 : /*
4515 : AddOperator := '+'
4516 : % PushTtok(PlusTok, GetTokenNo() -1) ;
4517 : RecordOp %
4518 : | '-'
4519 : % PushTtok(MinusTok, GetTokenNo() -1) ;
4520 : RecordOp %
4521 : | 'OR'
4522 : % PushTtok(OrTok, GetTokenNo() -1) ;
4523 : RecordOp %
4524 :
4525 :
4526 : first symbols:ortok, minustok, plustok
4527 :
4528 : cannot reachend
4529 : */
4530 :
4531 24330 : static void AddOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4532 : {
4533 24330 : if (M2LexBuf_currenttoken == M2Reserved_plustok)
4534 : {
4535 11746 : Expect (M2Reserved_plustok, stopset0, stopset1, stopset2);
4536 11746 : M2Quads_PushTtok (M2Reserved_PlusTok, (M2LexBuf_GetTokenNo ())-1);
4537 11746 : M2Quads_RecordOp ();
4538 : }
4539 12584 : else if (M2LexBuf_currenttoken == M2Reserved_minustok)
4540 : {
4541 : /* avoid dangling else. */
4542 8860 : Expect (M2Reserved_minustok, stopset0, stopset1, stopset2);
4543 8860 : M2Quads_PushTtok (M2Reserved_MinusTok, (M2LexBuf_GetTokenNo ())-1);
4544 8860 : M2Quads_RecordOp ();
4545 : }
4546 3724 : else if (M2LexBuf_currenttoken == M2Reserved_ortok)
4547 : {
4548 : /* avoid dangling else. */
4549 3724 : Expect (M2Reserved_ortok, stopset0, stopset1, stopset2);
4550 3724 : M2Quads_PushTtok (M2Reserved_OrTok, (M2LexBuf_GetTokenNo ())-1);
4551 3724 : M2Quads_RecordOp ();
4552 : }
4553 : else
4554 : {
4555 : /* avoid dangling else. */
4556 0 : ErrorArray ((const char *) "expecting one of: {%KOR} {%K-} {%K+}", 36);
4557 : }
4558 24330 : }
4559 :
4560 :
4561 : /*
4562 : ConstTerm := ConstFactor { MulOperator ConstFactor
4563 :
4564 : % BuildBinaryOp %
4565 : }
4566 :
4567 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
4568 :
4569 : cannot reachend
4570 : */
4571 :
4572 268754 : static void ConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4573 : {
4574 268754 : ConstFactor (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ambersandtok-M2Reserved_eoftok)) | (1 << (M2Reserved_andtok-M2Reserved_eoftok)) | (1 << (M2Reserved_dividetok-M2Reserved_eoftok)) | (1 << (M2Reserved_timestok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_modtok-M2Reserved_arraytok)) | (1 << (M2Reserved_divtok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_remtok-M2Reserved_unqualifiedtok))));
4575 543196 : while ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_divtok-M2Reserved_arraytok)) | (1 << (M2Reserved_modtok-M2Reserved_arraytok))))) != 0)))) || (M2LexBuf_currenttoken == M2Reserved_remtok))
4576 : {
4577 5688 : MulOperator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4578 5688 : ConstFactor (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_timestok-M2Reserved_eoftok)) | (1 << (M2Reserved_dividetok-M2Reserved_eoftok)) | (1 << (M2Reserved_andtok-M2Reserved_eoftok)) | (1 << (M2Reserved_ambersandtok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_divtok-M2Reserved_arraytok)) | (1 << (M2Reserved_modtok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_remtok-M2Reserved_unqualifiedtok))));
4579 5688 : M2Quads_BuildBinaryOp ();
4580 : }
4581 : /* while */
4582 268754 : }
4583 :
4584 :
4585 : /*
4586 : MulOperator := '*'
4587 : % PushTtok(TimesTok, GetTokenNo() -1) ;
4588 : RecordOp %
4589 : | '/'
4590 : % PushTtok(DivideTok, GetTokenNo() -1) ;
4591 : RecordOp %
4592 : | 'DIV'
4593 : % PushTtok(DivTok, GetTokenNo() -1) ;
4594 : RecordOp %
4595 : | 'MOD'
4596 : % PushTtok(ModTok, GetTokenNo() -1) ;
4597 : RecordOp %
4598 : | 'REM'
4599 : % PushTtok(RemTok, GetTokenNo() -1) ;
4600 : RecordOp %
4601 : | 'AND'
4602 : % PushTtok(AndTok, GetTokenNo() -1) ;
4603 : RecordOp %
4604 : | '&'
4605 : % PushTtok(AmbersandTok, GetTokenNo() -1) ;
4606 : RecordOp %
4607 :
4608 :
4609 : first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
4610 :
4611 : cannot reachend
4612 : */
4613 :
4614 23954 : static void MulOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4615 : {
4616 23954 : if (M2LexBuf_currenttoken == M2Reserved_timestok)
4617 : {
4618 4269 : Expect (M2Reserved_timestok, stopset0, stopset1, stopset2);
4619 4269 : M2Quads_PushTtok (M2Reserved_TimesTok, (M2LexBuf_GetTokenNo ())-1);
4620 4269 : M2Quads_RecordOp ();
4621 : }
4622 : else if (M2LexBuf_currenttoken == M2Reserved_dividetok)
4623 : {
4624 : /* avoid dangling else. */
4625 564 : Expect (M2Reserved_dividetok, stopset0, stopset1, stopset2);
4626 564 : M2Quads_PushTtok (M2Reserved_DivideTok, (M2LexBuf_GetTokenNo ())-1);
4627 564 : M2Quads_RecordOp ();
4628 : }
4629 : else if (M2LexBuf_currenttoken == M2Reserved_divtok)
4630 : {
4631 : /* avoid dangling else. */
4632 6821 : Expect (M2Reserved_divtok, stopset0, stopset1, stopset2);
4633 6821 : M2Quads_PushTtok (M2Reserved_DivTok, (M2LexBuf_GetTokenNo ())-1);
4634 6821 : M2Quads_RecordOp ();
4635 : }
4636 : else if (M2LexBuf_currenttoken == M2Reserved_modtok)
4637 : {
4638 : /* avoid dangling else. */
4639 2354 : Expect (M2Reserved_modtok, stopset0, stopset1, stopset2);
4640 2354 : M2Quads_PushTtok (M2Reserved_ModTok, (M2LexBuf_GetTokenNo ())-1);
4641 2354 : M2Quads_RecordOp ();
4642 : }
4643 : else if (M2LexBuf_currenttoken == M2Reserved_remtok)
4644 : {
4645 : /* avoid dangling else. */
4646 96 : Expect (M2Reserved_remtok, stopset0, stopset1, stopset2);
4647 96 : M2Quads_PushTtok (M2Reserved_RemTok, (M2LexBuf_GetTokenNo ())-1);
4648 96 : M2Quads_RecordOp ();
4649 : }
4650 : else if (M2LexBuf_currenttoken == M2Reserved_andtok)
4651 : {
4652 : /* avoid dangling else. */
4653 9850 : Expect (M2Reserved_andtok, stopset0, stopset1, stopset2);
4654 9850 : M2Quads_PushTtok (M2Reserved_AndTok, (M2LexBuf_GetTokenNo ())-1);
4655 9850 : M2Quads_RecordOp ();
4656 : }
4657 : else if (M2LexBuf_currenttoken == M2Reserved_ambersandtok)
4658 : {
4659 : /* avoid dangling else. */
4660 0 : Expect (M2Reserved_ambersandtok, stopset0, stopset1, stopset2);
4661 0 : M2Quads_PushTtok (M2Reserved_AmbersandTok, (M2LexBuf_GetTokenNo ())-1);
4662 0 : M2Quads_RecordOp ();
4663 : }
4664 : else
4665 : {
4666 : /* avoid dangling else. */
4667 0 : ErrorArray ((const char *) "expecting one of: {%K&} {%KAND} {%KREM} {%KMOD} {%KDIV} {%K/} {%K*}", 67);
4668 : }
4669 23954 : }
4670 :
4671 :
4672 : /*
4673 : ConstFactor :=
4674 : % VAR tokpos: CARDINAL ; %
4675 : Number | ConstString |
4676 : ConstSetOrQualidentOrFunction |
4677 : '(' ConstExpression ')' |
4678 : 'NOT'
4679 : % tokpos := GetTokenNo() -1 %
4680 : ConstFactor
4681 : % BuildNot (tokpos) %
4682 : | ConstAttribute
4683 :
4684 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
4685 :
4686 : cannot reachend
4687 : */
4688 :
4689 274442 : static void ConstFactor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4690 : {
4691 274442 : unsigned int tokpos;
4692 :
4693 274442 : if ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok))))) != 0)))
4694 : {
4695 187956 : Number (stopset0, stopset1, stopset2);
4696 : }
4697 86486 : else if (M2LexBuf_currenttoken == M2Reserved_stringtok)
4698 : {
4699 : /* avoid dangling else. */
4700 7601 : ConstString (stopset0, stopset1, stopset2);
4701 : }
4702 : else if ((M2LexBuf_currenttoken == M2Reserved_lcbratok) || (M2LexBuf_currenttoken == M2Reserved_identtok))
4703 : {
4704 : /* avoid dangling else. */
4705 47700 : ConstSetOrQualidentOrFunction (stopset0, stopset1, stopset2);
4706 : }
4707 : else if (M2LexBuf_currenttoken == M2Reserved_lparatok)
4708 : {
4709 : /* avoid dangling else. */
4710 87 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4711 87 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
4712 87 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
4713 : }
4714 : else if (M2LexBuf_currenttoken == M2Reserved_nottok)
4715 : {
4716 : /* avoid dangling else. */
4717 0 : Expect (M2Reserved_nottok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4718 0 : tokpos = (M2LexBuf_GetTokenNo ())-1;
4719 0 : ConstFactor (stopset0, stopset1, stopset2);
4720 0 : M2Quads_BuildNot (tokpos);
4721 : }
4722 : else if (M2LexBuf_currenttoken == M2Reserved_attributetok)
4723 : {
4724 : /* avoid dangling else. */
4725 31098 : ConstAttribute (stopset0, stopset1, stopset2);
4726 : }
4727 : else
4728 : {
4729 : /* avoid dangling else. */
4730 0 : ErrorArray ((const char *) "expecting one of: {%K__ATTRIBUTE__} {%KNOT} {%K(} {%Kidentifier} {%K%{} {%Kstring} {%Kinteger number} {%Kreal number}", 117);
4731 : }
4732 274442 : }
4733 :
4734 :
4735 : /*
4736 : ConstString := string
4737 :
4738 : first symbols:stringtok
4739 :
4740 : cannot reachend
4741 : */
4742 :
4743 7601 : static void ConstString (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4744 : {
4745 7601 : string (stopset0, stopset1, stopset2);
4746 7601 : }
4747 :
4748 :
4749 : /*
4750 : ComponentElement := ConstExpression ( '..' ConstExpression
4751 :
4752 : % PushTtok(PeriodPeriodTok, GetTokenNo() -1) %
4753 : |
4754 :
4755 : % PushT(NulTok) %
4756 : )
4757 :
4758 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4759 :
4760 : cannot reachend
4761 : */
4762 :
4763 26138 : static void ComponentElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4764 : {
4765 26138 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodperiodtok-M2Reserved_eoftok))), stopset1, stopset2);
4766 26138 : if (M2LexBuf_currenttoken == M2Reserved_periodperiodtok)
4767 : {
4768 242 : Expect (M2Reserved_periodperiodtok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4769 242 : ConstExpression (stopset0, stopset1, stopset2);
4770 242 : M2Quads_PushTtok (M2Reserved_PeriodPeriodTok, (M2LexBuf_GetTokenNo ())-1);
4771 : }
4772 : else
4773 : {
4774 25896 : M2Quads_PushT (M2Reserved_NulTok);
4775 : }
4776 26138 : }
4777 :
4778 :
4779 : /*
4780 : ComponentValue :=
4781 : % VAR tokpos: CARDINAL ; %
4782 : (
4783 : % tokpos := GetTokenNo () %
4784 : ComponentElement (
4785 : % tokpos := GetTokenNo () %
4786 : 'BY' ConstExpression
4787 :
4788 : % PushTtok (ByTok, tokpos) %
4789 : |
4790 :
4791 : % PushTtok (NulTok, tokpos) %
4792 : ) )
4793 :
4794 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4795 :
4796 : cannot reachend
4797 : */
4798 :
4799 26138 : static void ComponentValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4800 : {
4801 26138 : unsigned int tokpos;
4802 :
4803 26138 : tokpos = M2LexBuf_GetTokenNo ();
4804 26138 : ComponentElement (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_bytok-M2Reserved_arraytok))), stopset2);
4805 26138 : if (M2LexBuf_currenttoken == M2Reserved_bytok)
4806 : {
4807 30 : Expect (M2Reserved_bytok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4808 30 : tokpos = M2LexBuf_GetTokenNo ();
4809 30 : ConstExpression (stopset0, stopset1, stopset2);
4810 30 : M2Quads_PushTtok (M2Reserved_ByTok, tokpos);
4811 : }
4812 : else
4813 : {
4814 26108 : M2Quads_PushTtok (M2Reserved_NulTok, tokpos);
4815 : }
4816 26138 : }
4817 :
4818 :
4819 : /*
4820 : ArraySetRecordValue := ComponentValue
4821 : % BuildComponentValue %
4822 : { ','
4823 : % NextConstructorField %
4824 : ComponentValue
4825 : % BuildComponentValue %
4826 : }
4827 :
4828 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4829 :
4830 : cannot reachend
4831 : */
4832 :
4833 9986 : static void ArraySetRecordValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4834 : {
4835 9986 : ComponentValue (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
4836 9986 : M2Quads_BuildComponentValue ();
4837 36124 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
4838 : {
4839 16152 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4840 16152 : M2Quads_NextConstructorField ();
4841 16152 : ComponentValue (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
4842 16152 : M2Quads_BuildComponentValue ();
4843 : }
4844 : /* while */
4845 9986 : }
4846 :
4847 :
4848 : /*
4849 : Constructor :=
4850 : % VAR tokpos: CARDINAL ; %
4851 :
4852 : % DisplayStack %
4853 :
4854 : % InclConstructor (BlockState) %
4855 :
4856 : % CheckQualident (OperandTok (1), BlockState, OperandT (1)) %
4857 : '{'
4858 : % tokpos := GetTokenNo () -1 %
4859 :
4860 : % BuildConstructorStart (tokpos) %
4861 : [ ArraySetRecordValue ]
4862 : % BuildConstructorEnd (tokpos, GetTokenNo()) %
4863 : '}'
4864 : % ExclConstructor (BlockState) %
4865 :
4866 :
4867 : first symbols:lcbratok
4868 :
4869 : cannot reachend
4870 : */
4871 :
4872 11218 : static void Constructor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4873 : {
4874 11218 : unsigned int tokpos;
4875 :
4876 11218 : M2Quads_DisplayStack ();
4877 11218 : M2StateCheck_InclConstructor (BlockState);
4878 11218 : M2StateCheck_CheckQualident (M2Quads_OperandTok (1), BlockState, M2Quads_OperandT (1));
4879 11218 : Expect (M2Reserved_lcbratok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
4880 11218 : tokpos = (M2LexBuf_GetTokenNo ())-1;
4881 11218 : M2Quads_BuildConstructorStart (tokpos);
4882 11218 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
4883 : {
4884 9986 : ArraySetRecordValue (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rcbratok-M2Reserved_eoftok))), stopset1, stopset2);
4885 : }
4886 11218 : M2Quads_BuildConstructorEnd (tokpos, M2LexBuf_GetTokenNo ());
4887 11218 : Expect (M2Reserved_rcbratok, stopset0, stopset1, stopset2);
4888 11218 : M2StateCheck_ExclConstructor (BlockState);
4889 11218 : }
4890 :
4891 :
4892 : /*
4893 : ConstSetOrQualidentOrFunction :=
4894 : % VAR tokpos: CARDINAL ; %
4895 :
4896 : % tokpos := GetTokenNo () %
4897 : ( Qualident [ Constructor |
4898 : ConstActualParameters
4899 :
4900 : % BuildConstFunctionCall %
4901 : ] |
4902 :
4903 : % BuildTypeForConstructor (tokpos) %
4904 : Constructor )
4905 :
4906 : first symbols:lcbratok, identtok
4907 :
4908 : cannot reachend
4909 : */
4910 :
4911 47700 : static void ConstSetOrQualidentOrFunction (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4912 : {
4913 47700 : unsigned int tokpos;
4914 :
4915 47700 : tokpos = M2LexBuf_GetTokenNo ();
4916 47700 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
4917 : {
4918 : /* avoid dangling else. */
4919 47148 : Qualident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lcbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
4920 47148 : if ((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))))) != 0)))
4921 : {
4922 : /* avoid gcc warning by using compound statement even if not strictly necessary. */
4923 : /* seen optional [ | ] expression */
4924 7585 : if (M2LexBuf_currenttoken == M2Reserved_lcbratok)
4925 : {
4926 5858 : Constructor (stopset0, stopset1, stopset2);
4927 : }
4928 1727 : else if (M2LexBuf_currenttoken == M2Reserved_lparatok)
4929 : {
4930 : /* avoid dangling else. */
4931 1727 : ConstActualParameters (stopset0, stopset1, stopset2);
4932 1727 : M2Quads_BuildConstFunctionCall ();
4933 : }
4934 : else
4935 : {
4936 : /* avoid dangling else. */
4937 0 : ErrorArray ((const char *) "expecting one of: {%K(} {%K%{}", 30);
4938 : }
4939 : }
4940 : /* end of optional [ | ] expression */
4941 : }
4942 : else
4943 : {
4944 552 : M2Quads_BuildTypeForConstructor (tokpos);
4945 552 : Constructor (stopset0, stopset1, stopset2);
4946 : }
4947 47700 : }
4948 :
4949 :
4950 : /*
4951 : ConstActualParameters :=
4952 : % PushState (BlockState) %
4953 :
4954 : % InclConstFunc (BlockState) %
4955 :
4956 : % CheckQualident (OperandTok (1), BlockState, OperandT (1)) %
4957 :
4958 : % PushInConstParameters %
4959 : ActualParameters
4960 : % PopInConstParameters %
4961 :
4962 : % PopState (BlockState) %
4963 :
4964 :
4965 : first symbols:lparatok
4966 :
4967 : cannot reachend
4968 : */
4969 :
4970 1727 : static void ConstActualParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4971 : {
4972 1727 : M2StateCheck_PushState (&BlockState);
4973 1727 : M2StateCheck_InclConstFunc (BlockState);
4974 1727 : M2StateCheck_CheckQualident (M2Quads_OperandTok (1), BlockState, M2Quads_OperandT (1));
4975 1727 : M2Quads_PushInConstParameters ();
4976 1727 : ActualParameters (stopset0, stopset1, stopset2);
4977 1727 : M2Quads_PopInConstParameters ();
4978 1727 : M2StateCheck_PopState (&BlockState);
4979 1727 : }
4980 :
4981 :
4982 : /*
4983 : ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4984 : '(' '('
4985 : % PushAutoOn %
4986 : ConstAttributeExpression
4987 : % PopAuto %
4988 : ')' ')'
4989 :
4990 : first symbols:attributetok
4991 :
4992 : cannot reachend
4993 : */
4994 :
4995 31098 : static void ConstAttribute (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
4996 : {
4997 31098 : Expect (M2Reserved_attributetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_builtintok-M2Reserved_unqualifiedtok))));
4998 31098 : Expect (M2Reserved_builtintok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
4999 31098 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
5000 31098 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lesstok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5001 31098 : M2Quads_PushAutoOn ();
5002 31098 : ConstAttributeExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
5003 31098 : M2Quads_PopAuto ();
5004 31098 : Expect (M2Reserved_rparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
5005 31098 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
5006 31098 : }
5007 :
5008 :
5009 : /*
5010 : ConstAttributeExpression := Ident
5011 : % BuildBuiltinConst %
5012 : | '<' Qualident ','
5013 : Ident
5014 : % BuildBuiltinTypeInfo %
5015 : '>'
5016 :
5017 : first symbols:lesstok, identtok
5018 :
5019 : cannot reachend
5020 : */
5021 :
5022 31098 : static void ConstAttributeExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5023 : {
5024 31098 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
5025 : {
5026 30738 : Ident (stopset0, stopset1, stopset2);
5027 30738 : M2Quads_BuildBuiltinConst ();
5028 : }
5029 360 : else if (M2LexBuf_currenttoken == M2Reserved_lesstok)
5030 : {
5031 : /* avoid dangling else. */
5032 360 : Expect (M2Reserved_lesstok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5033 360 : Qualident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
5034 360 : Expect (M2Reserved_commatok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5035 360 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_greatertok-M2Reserved_eoftok))), stopset1, stopset2);
5036 360 : M2Quads_BuildBuiltinTypeInfo ();
5037 360 : Expect (M2Reserved_greatertok, stopset0, stopset1, stopset2);
5038 : }
5039 : else
5040 : {
5041 : /* avoid dangling else. */
5042 0 : ErrorArray ((const char *) "expecting one of: {%K<} {%Kidentifier}", 38);
5043 : }
5044 31098 : }
5045 :
5046 :
5047 : /*
5048 : ByteAlignment :=
5049 : % VAR tokpos: CARDINAL ; %
5050 : ''
5051 : % PopAuto %
5052 :
5053 :
5054 : first symbols:ldirectivetok
5055 :
5056 : cannot reachend
5057 : */
5058 :
5059 72 : static void ByteAlignment (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5060 : {
5061 72 : unsigned int tokpos;
5062 :
5063 72 : Expect (M2Reserved_ldirectivetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5064 72 : M2Quads_PushAutoOn ();
5065 72 : tokpos = M2LexBuf_GetTokenNo ();
5066 72 : AttributeExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rdirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
5067 72 : M2Quads_BuildAlignment (tokpos);
5068 72 : Expect (M2Reserved_rdirectivetok, stopset0, stopset1, stopset2);
5069 72 : M2Quads_PopAuto ();
5070 72 : }
5071 :
5072 :
5073 : /*
5074 : Alignment := [ ByteAlignment ]
5075 :
5076 : first symbols:ldirectivetok
5077 :
5078 : reachend
5079 : */
5080 :
5081 179080 : static void Alignment (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5082 : {
5083 0 : if (M2LexBuf_currenttoken == M2Reserved_ldirectivetok)
5084 : {
5085 72 : ByteAlignment (stopset0, stopset1, stopset2);
5086 : }
5087 0 : }
5088 :
5089 :
5090 : /*
5091 : TypeDeclaration :=
5092 : % InclType (BlockState) %
5093 : Ident '=' Type Alignment
5094 : % ExclType (BlockState) %
5095 :
5096 :
5097 : first symbols:identtok
5098 :
5099 : cannot reachend
5100 : */
5101 :
5102 8040 : static void TypeDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5103 : {
5104 8040 : M2StateCheck_InclType (BlockState);
5105 8040 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_equaltok-M2Reserved_eoftok))), stopset1, stopset2);
5106 8040 : Expect (M2Reserved_equaltok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_settok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_recordtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5107 8040 : Type (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
5108 8034 : Alignment (stopset0, stopset1, stopset2);
5109 8034 : M2StateCheck_ExclType (BlockState);
5110 8034 : }
5111 :
5112 :
5113 : /*
5114 : Type :=
5115 : % PushAutoOff %
5116 : ( SimpleType | ArrayType | RecordType |
5117 : SetType | PointerType |
5118 : ProcedureType )
5119 : % PopAuto %
5120 :
5121 :
5122 : first symbols:lparatok, lsbratok, proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok
5123 :
5124 : cannot reachend
5125 : */
5126 :
5127 298980 : static void Type (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5128 : {
5129 298980 : M2Quads_PushAutoOff ();
5130 298980 : if (((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))))) != 0))) || (M2LexBuf_currenttoken == M2Reserved_identtok))
5131 : {
5132 203631 : SimpleType (stopset0, stopset1, stopset2);
5133 : }
5134 95349 : else if (M2LexBuf_currenttoken == M2Reserved_arraytok)
5135 : {
5136 : /* avoid dangling else. */
5137 6433 : ArrayType (stopset0, stopset1, stopset2);
5138 : }
5139 88916 : else if (M2LexBuf_currenttoken == M2Reserved_recordtok)
5140 : {
5141 : /* avoid dangling else. */
5142 15592 : RecordType (stopset0, stopset1, stopset2);
5143 : }
5144 73324 : else if ((((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_packedsettok-M2Reserved_arraytok)) | (1 << (M2Reserved_oftok-M2Reserved_arraytok))))) != 0))) || (M2LexBuf_currenttoken == M2Reserved_settok))
5145 : {
5146 : /* avoid dangling else. */
5147 2061 : SetType (stopset0, stopset1, stopset2);
5148 : }
5149 71263 : else if (M2LexBuf_currenttoken == M2Reserved_pointertok)
5150 : {
5151 : /* avoid dangling else. */
5152 9853 : PointerType (stopset0, stopset1, stopset2);
5153 : }
5154 61410 : else if (M2LexBuf_currenttoken == M2Reserved_proceduretok)
5155 : {
5156 : /* avoid dangling else. */
5157 61410 : ProcedureType (stopset0, stopset1, stopset2);
5158 : }
5159 : else
5160 : {
5161 : /* avoid dangling else. */
5162 0 : ErrorArray ((const char *) "expecting one of: {%KPROCEDURE} {%KPOINTER} {%KSET} {%KPACKEDSET} {%KOF} {%KRECORD} {%KARRAY} {%Kidentifier} {%K(} {%K[}", 120);
5163 : }
5164 298956 : M2Quads_PopAuto ();
5165 298956 : }
5166 :
5167 :
5168 : /*
5169 : SimpleType := QualidentCheck [ SubrangeType ] |
5170 : Enumeration | SubrangeType
5171 :
5172 : first symbols:lsbratok, lparatok, identtok
5173 :
5174 : cannot reachend
5175 : */
5176 :
5177 212260 : static void SimpleType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5178 : {
5179 212260 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
5180 : {
5181 : /* avoid dangling else. */
5182 183071 : QualidentCheck (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2);
5183 183047 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
5184 : {
5185 18 : SubrangeType (stopset0, stopset1, stopset2);
5186 : }
5187 : }
5188 29189 : else if (M2LexBuf_currenttoken == M2Reserved_lparatok)
5189 : {
5190 : /* avoid dangling else. */
5191 20462 : Enumeration (stopset0, stopset1, stopset2);
5192 : }
5193 8727 : else if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
5194 : {
5195 : /* avoid dangling else. */
5196 8727 : SubrangeType (stopset0, stopset1, stopset2);
5197 : }
5198 : else
5199 : {
5200 : /* avoid dangling else. */
5201 0 : ErrorArray ((const char *) "expecting one of: {%K[} {%K(} {%Kidentifier}", 44);
5202 : }
5203 212236 : }
5204 :
5205 :
5206 : /*
5207 : Enumeration := '(' ( IdentList ) ')'
5208 :
5209 : first symbols:lparatok
5210 :
5211 : cannot reachend
5212 : */
5213 :
5214 20462 : static void Enumeration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5215 : {
5216 20462 : Expect (M2Reserved_lparatok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5217 20462 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
5218 20462 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
5219 20462 : }
5220 :
5221 :
5222 : /*
5223 : IdentList := Ident
5224 : % VAR
5225 : on: BOOLEAN ;
5226 : n : CARDINAL ; %
5227 :
5228 : % on := IsAutoPushOn() ;
5229 : IF on
5230 : THEN
5231 : n := 1
5232 : END %
5233 : { ',' Ident
5234 : % IF on
5235 : THEN
5236 : INC(n)
5237 : END %
5238 : }
5239 : % IF on
5240 : THEN
5241 : PushT(n)
5242 : END %
5243 :
5244 :
5245 : first symbols:identtok
5246 :
5247 : cannot reachend
5248 : */
5249 :
5250 5973436 : static void IdentList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5251 : {
5252 5973436 : bool on;
5253 5973436 : unsigned int n;
5254 :
5255 5973436 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
5256 5973436 : on = M2Quads_IsAutoPushOn ();
5257 5973436 : if (on)
5258 : {
5259 5973436 : n = 1;
5260 : }
5261 10383471 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
5262 : {
5263 4410035 : Expect (M2Reserved_commatok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5264 4410035 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
5265 4410035 : if (on)
5266 : {
5267 45080 : n += 1;
5268 : }
5269 : }
5270 : /* while */
5271 5973436 : if (on)
5272 : {
5273 125215 : M2Quads_PushT (n);
5274 : }
5275 5973436 : }
5276 :
5277 :
5278 : /*
5279 : SubrangeType := '[' ConstExpression '..' ConstExpression
5280 : ']'
5281 : % BuildSubrange ; %
5282 :
5283 :
5284 : first symbols:lsbratok
5285 :
5286 : cannot reachend
5287 : */
5288 :
5289 8745 : static void SubrangeType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5290 : {
5291 8745 : Expect (M2Reserved_lsbratok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5292 8745 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodperiodtok-M2Reserved_eoftok))), stopset1, stopset2);
5293 8745 : Expect (M2Reserved_periodperiodtok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5294 8745 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
5295 8745 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
5296 8745 : P3SymBuild_BuildSubrange ();
5297 8745 : }
5298 :
5299 :
5300 : /*
5301 : ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
5302 : 'OF' Type
5303 :
5304 : first symbols:arraytok
5305 :
5306 : cannot reachend
5307 : */
5308 :
5309 6433 : static void ArrayType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5310 : {
5311 6433 : Expect (M2Reserved_arraytok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5312 6433 : SimpleType (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2);
5313 13001 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
5314 : {
5315 135 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5316 135 : SimpleType (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2);
5317 : }
5318 : /* while */
5319 6433 : Expect (M2Reserved_oftok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_settok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_recordtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5320 6433 : Type (stopset0, stopset1, stopset2);
5321 6433 : }
5322 :
5323 :
5324 : /*
5325 : RecordType := 'RECORD' [ DefaultRecordAttributes ]
5326 : FieldListSequence 'END'
5327 :
5328 : first symbols:recordtok
5329 :
5330 : cannot reachend
5331 : */
5332 :
5333 15592 : static void RecordType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5334 : {
5335 15592 : Expect (M2Reserved_recordtok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok)) | (1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_casetok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5336 15592 : if (M2LexBuf_currenttoken == M2Reserved_ldirectivetok)
5337 : {
5338 36 : DefaultRecordAttributes (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_casetok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5339 : }
5340 15592 : FieldListSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
5341 15592 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
5342 15592 : }
5343 :
5344 :
5345 : /*
5346 : DefaultRecordAttributes := ''
5347 :
5348 : first symbols:ldirectivetok
5349 :
5350 : cannot reachend
5351 : */
5352 :
5353 36 : static void DefaultRecordAttributes (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5354 : {
5355 36 : Expect (M2Reserved_ldirectivetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5356 36 : M2Quads_PushAutoOn ();
5357 36 : AttributeExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rdirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
5358 36 : M2Quads_BuildDefaultFieldAlignment ();
5359 36 : M2Quads_PopAuto ();
5360 36 : Expect (M2Reserved_rdirectivetok, stopset0, stopset1, stopset2);
5361 36 : }
5362 :
5363 :
5364 : /*
5365 : RecordFieldPragma := [ '' ]
5366 :
5367 : first symbols:ldirectivetok
5368 :
5369 : reachend
5370 : */
5371 :
5372 103590 : static void RecordFieldPragma (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5373 : {
5374 103590 : if (M2LexBuf_currenttoken == M2Reserved_ldirectivetok)
5375 : {
5376 12 : Expect (M2Reserved_ldirectivetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5377 12 : FieldPragmaExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok)) | (1 << (M2Reserved_rdirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
5378 24 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
5379 : {
5380 0 : Expect (M2Reserved_commatok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5381 0 : FieldPragmaExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rdirectivetok-M2Reserved_eoftok)) | (1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
5382 : }
5383 : /* while */
5384 12 : Expect (M2Reserved_rdirectivetok, stopset0, stopset1, stopset2);
5385 : }
5386 103590 : }
5387 :
5388 :
5389 : /*
5390 : FieldPragmaExpression :=
5391 : % PushAutoOn %
5392 : Ident PragmaConstExpression
5393 :
5394 : % BuildPragmaField %
5395 :
5396 : % PopAuto %
5397 :
5398 :
5399 : first symbols:identtok
5400 :
5401 : cannot reachend
5402 : */
5403 :
5404 12 : static void FieldPragmaExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5405 : {
5406 12 : M2Quads_PushAutoOn ();
5407 12 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
5408 12 : PragmaConstExpression (stopset0, stopset1, stopset2);
5409 12 : M2Quads_BuildPragmaField ();
5410 12 : M2Quads_PopAuto ();
5411 12 : }
5412 :
5413 :
5414 : /*
5415 : PragmaConstExpression := ( '(' ConstExpression ')' |
5416 :
5417 : % PushT(NulSym) %
5418 :
5419 : % Annotate('NulSym||no pragma const') %
5420 : )
5421 :
5422 : first symbols:lparatok
5423 :
5424 : reachend
5425 : */
5426 :
5427 12 : static void PragmaConstExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5428 : {
5429 12 : if (M2LexBuf_currenttoken == M2Reserved_lparatok)
5430 : {
5431 12 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5432 12 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
5433 12 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
5434 : }
5435 : else
5436 : {
5437 0 : M2Quads_PushT (static_cast<unsigned int> (SymbolTable_NulSym));
5438 0 : M2Quads_Annotate ((const char *) "NulSym||no pragma const", 23);
5439 : }
5440 12 : }
5441 :
5442 :
5443 : /*
5444 : AttributeExpression := Ident '(' ConstExpression
5445 : ')'
5446 :
5447 : first symbols:identtok
5448 :
5449 : cannot reachend
5450 : */
5451 :
5452 108 : static void AttributeExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5453 : {
5454 108 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
5455 108 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5456 108 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
5457 108 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
5458 108 : }
5459 :
5460 :
5461 : /*
5462 : FieldListSequence := FieldListStatement { ';' FieldListStatement }
5463 :
5464 : first symbols:casetok, identtok, semicolontok
5465 :
5466 : reachend
5467 : */
5468 :
5469 16314 : static void FieldListSequence (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5470 : {
5471 16314 : FieldListStatement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
5472 135475 : while (M2LexBuf_currenttoken == M2Reserved_semicolontok)
5473 : {
5474 102847 : Expect (M2Reserved_semicolontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_casetok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5475 102847 : FieldListStatement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
5476 : }
5477 : /* while */
5478 16314 : }
5479 :
5480 :
5481 : /*
5482 : FieldListStatement := [ FieldList ]
5483 :
5484 : first symbols:identtok, casetok
5485 :
5486 : reachend
5487 : */
5488 :
5489 119161 : static void FieldListStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5490 : {
5491 119161 : if ((M2LexBuf_currenttoken == M2Reserved_casetok) || (M2LexBuf_currenttoken == M2Reserved_identtok))
5492 : {
5493 103894 : FieldList (stopset0, stopset1, stopset2);
5494 : }
5495 119161 : }
5496 :
5497 :
5498 : /*
5499 : FieldList := IdentList ':' Type RecordFieldPragma |
5500 : 'CASE'
5501 : % BeginVarient %
5502 : CaseTag 'OF' Varient { '|' Varient }
5503 : [ 'ELSE'
5504 : % ElseVarient %
5505 : FieldListSequence ] 'END'
5506 : % EndVarient %
5507 :
5508 :
5509 : first symbols:casetok, identtok
5510 :
5511 : cannot reachend
5512 : */
5513 :
5514 103894 : static void FieldList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5515 : {
5516 103894 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
5517 : {
5518 103590 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
5519 103590 : Expect (M2Reserved_colontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_settok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_recordtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5520 103590 : Type (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
5521 103590 : RecordFieldPragma (stopset0, stopset1, stopset2);
5522 : }
5523 304 : else if (M2LexBuf_currenttoken == M2Reserved_casetok)
5524 : {
5525 : /* avoid dangling else. */
5526 304 : Expect (M2Reserved_casetok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5527 304 : M2Quads_BeginVarient ();
5528 304 : CaseTag (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2);
5529 304 : Expect (M2Reserved_oftok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5530 304 : Varient (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_bartok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
5531 1272 : while (M2LexBuf_currenttoken == M2Reserved_bartok)
5532 : {
5533 664 : Expect (M2Reserved_bartok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5534 664 : Varient (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_bartok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_elsetok-M2Reserved_arraytok))), stopset2);
5535 : }
5536 : /* while */
5537 304 : if (M2LexBuf_currenttoken == M2Reserved_elsetok)
5538 : {
5539 114 : Expect (M2Reserved_elsetok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_casetok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5540 114 : M2Quads_ElseVarient ();
5541 114 : FieldListSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
5542 : }
5543 304 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
5544 304 : M2Quads_EndVarient ();
5545 : }
5546 : else
5547 : {
5548 : /* avoid dangling else. */
5549 0 : ErrorArray ((const char *) "expecting one of: {%KCASE} {%Kidentifier}", 41);
5550 : }
5551 103894 : }
5552 :
5553 :
5554 : /*
5555 : TagIdent := [ Ident ]
5556 :
5557 : first symbols:identtok
5558 :
5559 : reachend
5560 : */
5561 :
5562 304 : static void TagIdent (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5563 : {
5564 0 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
5565 : {
5566 262 : Ident (stopset0, stopset1, stopset2);
5567 : }
5568 0 : }
5569 :
5570 :
5571 : /*
5572 : CaseTag := TagIdent [ ':' QualidentCheck ]
5573 :
5574 : first symbols:colontok, identtok
5575 :
5576 : reachend
5577 : */
5578 :
5579 304 : static void CaseTag (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5580 : {
5581 304 : TagIdent (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
5582 304 : if (M2LexBuf_currenttoken == M2Reserved_colontok)
5583 : {
5584 292 : Expect (M2Reserved_colontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5585 292 : QualidentCheck (stopset0, stopset1, stopset2);
5586 : }
5587 304 : }
5588 :
5589 :
5590 : /*
5591 : Varient := [
5592 : % BeginVarientList %
5593 : VarientCaseLabelList ':' FieldListSequence
5594 :
5595 : % EndVarientList %
5596 : ]
5597 :
5598 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5599 :
5600 : reachend
5601 : */
5602 :
5603 968 : static void Varient (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5604 : {
5605 968 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
5606 : {
5607 608 : M2Quads_BeginVarientList ();
5608 608 : VarientCaseLabelList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
5609 608 : Expect (M2Reserved_colontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_casetok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
5610 608 : FieldListSequence (stopset0, stopset1, stopset2);
5611 608 : M2Quads_EndVarientList ();
5612 : }
5613 968 : }
5614 :
5615 :
5616 : /*
5617 : VarientCaseLabelList := VarientCaseLabels { ','
5618 : VarientCaseLabels }
5619 :
5620 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
5621 :
5622 : cannot reachend
5623 : */
5624 :
5625 608 : static void VarientCaseLabelList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5626 : {
5627 608 : VarientCaseLabels (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
5628 1258 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
5629 : {
5630 42 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5631 42 : VarientCaseLabels (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
5632 : }
5633 : /* while */
5634 608 : }
5635 :
5636 :
5637 : /*
5638 : VarientCaseLabels := ConstExpression ( '..' ConstExpression
5639 :
5640 : % AddVarientRange %
5641 : |
5642 :
5643 : % AddVarientEquality ; epsilon %
5644 : )
5645 :
5646 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5647 :
5648 : cannot reachend
5649 : */
5650 :
5651 650 : static void VarientCaseLabels (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5652 : {
5653 650 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodperiodtok-M2Reserved_eoftok))), stopset1, stopset2);
5654 650 : if (M2LexBuf_currenttoken == M2Reserved_periodperiodtok)
5655 : {
5656 0 : Expect (M2Reserved_periodperiodtok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5657 0 : ConstExpression (stopset0, stopset1, stopset2);
5658 0 : M2Quads_AddVarientRange ();
5659 : }
5660 : else
5661 : {
5662 650 : M2Quads_AddVarientEquality (); /* epsilon */
5663 : }
5664 : /* epsilon */
5665 650 : }
5666 :
5667 :
5668 : /*
5669 : SilentConstExpression :=
5670 : % PushAutoOff %
5671 : SilentSimpleConstExpr [
5672 : SilentRelation SilentSimpleConstExpr ]
5673 : % PopAuto %
5674 :
5675 :
5676 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
5677 :
5678 : cannot reachend
5679 : */
5680 :
5681 0 : static void SilentConstExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5682 : {
5683 0 : M2Quads_PushAutoOff ();
5684 0 : SilentSimpleConstExpr (stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_intok-M2Reserved_arraytok))), stopset2);
5685 0 : if (((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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))
5686 : {
5687 0 : SilentRelation (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5688 0 : SilentSimpleConstExpr (stopset0, stopset1, stopset2);
5689 : }
5690 0 : M2Quads_PopAuto ();
5691 0 : }
5692 :
5693 :
5694 : /*
5695 : SilentRelation := '=' | '#' | '<>' | '<' |
5696 : '<=' | '>' | '>=' | 'IN'
5697 :
5698 : first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
5699 :
5700 : cannot reachend
5701 : */
5702 :
5703 0 : static void SilentRelation (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5704 : {
5705 0 : if (M2LexBuf_currenttoken == M2Reserved_equaltok)
5706 : {
5707 0 : Expect (M2Reserved_equaltok, stopset0, stopset1, stopset2);
5708 : }
5709 : else if (M2LexBuf_currenttoken == M2Reserved_hashtok)
5710 : {
5711 : /* avoid dangling else. */
5712 0 : Expect (M2Reserved_hashtok, stopset0, stopset1, stopset2);
5713 : }
5714 : else if (M2LexBuf_currenttoken == M2Reserved_lessgreatertok)
5715 : {
5716 : /* avoid dangling else. */
5717 0 : Expect (M2Reserved_lessgreatertok, stopset0, stopset1, stopset2);
5718 : }
5719 : else if (M2LexBuf_currenttoken == M2Reserved_lesstok)
5720 : {
5721 : /* avoid dangling else. */
5722 0 : Expect (M2Reserved_lesstok, stopset0, stopset1, stopset2);
5723 : }
5724 : else if (M2LexBuf_currenttoken == M2Reserved_lessequaltok)
5725 : {
5726 : /* avoid dangling else. */
5727 0 : Expect (M2Reserved_lessequaltok, stopset0, stopset1, stopset2);
5728 : }
5729 : else if (M2LexBuf_currenttoken == M2Reserved_greatertok)
5730 : {
5731 : /* avoid dangling else. */
5732 0 : Expect (M2Reserved_greatertok, stopset0, stopset1, stopset2);
5733 : }
5734 : else if (M2LexBuf_currenttoken == M2Reserved_greaterequaltok)
5735 : {
5736 : /* avoid dangling else. */
5737 0 : Expect (M2Reserved_greaterequaltok, stopset0, stopset1, stopset2);
5738 : }
5739 : else if (M2LexBuf_currenttoken == M2Reserved_intok)
5740 : {
5741 : /* avoid dangling else. */
5742 0 : Expect (M2Reserved_intok, stopset0, stopset1, stopset2);
5743 : }
5744 : else
5745 : {
5746 : /* avoid dangling else. */
5747 0 : ErrorArray ((const char *) "expecting one of: {%KIN} {%K>=} {%K>} {%K<=} {%K<} {%K<>} {%K#} {%K=}", 69);
5748 : }
5749 0 : }
5750 :
5751 :
5752 : /*
5753 : SilentSimpleConstExpr := SilentUnaryOrConstTerm
5754 : { SilentAddOperator SilentConstTerm }
5755 :
5756 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5757 :
5758 : cannot reachend
5759 : */
5760 :
5761 0 : static void SilentSimpleConstExpr (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5762 : {
5763 0 : SilentUnaryOrConstTerm (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_ortok-M2Reserved_arraytok))), stopset2);
5764 0 : while (((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok))))) != 0))) || (M2LexBuf_currenttoken == M2Reserved_ortok))
5765 : {
5766 0 : SilentAddOperator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5767 0 : SilentConstTerm (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_ortok-M2Reserved_arraytok))), stopset2);
5768 : }
5769 : /* while */
5770 0 : }
5771 :
5772 :
5773 : /*
5774 : SilentUnaryOrConstTerm := '+' SilentConstTerm |
5775 : '-' SilentConstTerm |
5776 : SilentConstTerm
5777 :
5778 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
5779 :
5780 : cannot reachend
5781 : */
5782 :
5783 0 : static void SilentUnaryOrConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5784 : {
5785 0 : if (M2LexBuf_currenttoken == M2Reserved_plustok)
5786 : {
5787 0 : Expect (M2Reserved_plustok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5788 0 : SilentConstTerm (stopset0, stopset1, stopset2);
5789 : }
5790 0 : else if (M2LexBuf_currenttoken == M2Reserved_minustok)
5791 : {
5792 : /* avoid dangling else. */
5793 0 : Expect (M2Reserved_minustok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5794 0 : SilentConstTerm (stopset0, stopset1, stopset2);
5795 : }
5796 0 : else if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
5797 : {
5798 : /* avoid dangling else. */
5799 0 : SilentConstTerm (stopset0, stopset1, stopset2);
5800 : }
5801 : else
5802 : {
5803 : /* avoid dangling else. */
5804 0 : ErrorArray ((const char *) "expecting one of: {%KNOT} {%K(} {%Kinteger number} {%Kreal number} {%K__ATTRIBUTE__} {%K%{} {%Kidentifier} {%Kstring} {%K-} {%K+}", 129);
5805 : }
5806 0 : }
5807 :
5808 :
5809 : /*
5810 : SilentAddOperator := '+' | '-' | 'OR'
5811 :
5812 : first symbols:ortok, minustok, plustok
5813 :
5814 : cannot reachend
5815 : */
5816 :
5817 0 : static void SilentAddOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5818 : {
5819 0 : if (M2LexBuf_currenttoken == M2Reserved_plustok)
5820 : {
5821 0 : Expect (M2Reserved_plustok, stopset0, stopset1, stopset2);
5822 : }
5823 0 : else if (M2LexBuf_currenttoken == M2Reserved_minustok)
5824 : {
5825 : /* avoid dangling else. */
5826 0 : Expect (M2Reserved_minustok, stopset0, stopset1, stopset2);
5827 : }
5828 0 : else if (M2LexBuf_currenttoken == M2Reserved_ortok)
5829 : {
5830 : /* avoid dangling else. */
5831 0 : Expect (M2Reserved_ortok, stopset0, stopset1, stopset2);
5832 : }
5833 : else
5834 : {
5835 : /* avoid dangling else. */
5836 0 : ErrorArray ((const char *) "expecting one of: {%KOR} {%K-} {%K+}", 36);
5837 : }
5838 0 : }
5839 :
5840 :
5841 : /*
5842 : SilentConstTerm := SilentConstFactor { SilentMulOperator
5843 : SilentConstFactor }
5844 :
5845 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
5846 :
5847 : cannot reachend
5848 : */
5849 :
5850 0 : static void SilentConstTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5851 : {
5852 0 : SilentConstFactor (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ambersandtok-M2Reserved_eoftok)) | (1 << (M2Reserved_andtok-M2Reserved_eoftok)) | (1 << (M2Reserved_dividetok-M2Reserved_eoftok)) | (1 << (M2Reserved_timestok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_modtok-M2Reserved_arraytok)) | (1 << (M2Reserved_divtok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_remtok-M2Reserved_unqualifiedtok))));
5853 0 : while ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_divtok-M2Reserved_arraytok)) | (1 << (M2Reserved_modtok-M2Reserved_arraytok))))) != 0)))) || (M2LexBuf_currenttoken == M2Reserved_remtok))
5854 : {
5855 0 : SilentMulOperator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5856 0 : SilentConstFactor (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_timestok-M2Reserved_eoftok)) | (1 << (M2Reserved_dividetok-M2Reserved_eoftok)) | (1 << (M2Reserved_andtok-M2Reserved_eoftok)) | (1 << (M2Reserved_ambersandtok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_divtok-M2Reserved_arraytok)) | (1 << (M2Reserved_modtok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_remtok-M2Reserved_unqualifiedtok))));
5857 : }
5858 : /* while */
5859 0 : }
5860 :
5861 :
5862 : /*
5863 : SilentMulOperator := '*' | '/' | 'DIV' |
5864 : 'MOD' | 'REM' | 'AND' |
5865 : '&'
5866 :
5867 : first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
5868 :
5869 : cannot reachend
5870 : */
5871 :
5872 0 : static void SilentMulOperator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5873 : {
5874 0 : if (M2LexBuf_currenttoken == M2Reserved_timestok)
5875 : {
5876 0 : Expect (M2Reserved_timestok, stopset0, stopset1, stopset2);
5877 : }
5878 : else if (M2LexBuf_currenttoken == M2Reserved_dividetok)
5879 : {
5880 : /* avoid dangling else. */
5881 0 : Expect (M2Reserved_dividetok, stopset0, stopset1, stopset2);
5882 : }
5883 : else if (M2LexBuf_currenttoken == M2Reserved_divtok)
5884 : {
5885 : /* avoid dangling else. */
5886 0 : Expect (M2Reserved_divtok, stopset0, stopset1, stopset2);
5887 : }
5888 : else if (M2LexBuf_currenttoken == M2Reserved_modtok)
5889 : {
5890 : /* avoid dangling else. */
5891 0 : Expect (M2Reserved_modtok, stopset0, stopset1, stopset2);
5892 : }
5893 : else if (M2LexBuf_currenttoken == M2Reserved_remtok)
5894 : {
5895 : /* avoid dangling else. */
5896 0 : Expect (M2Reserved_remtok, stopset0, stopset1, stopset2);
5897 : }
5898 : else if (M2LexBuf_currenttoken == M2Reserved_andtok)
5899 : {
5900 : /* avoid dangling else. */
5901 0 : Expect (M2Reserved_andtok, stopset0, stopset1, stopset2);
5902 : }
5903 : else if (M2LexBuf_currenttoken == M2Reserved_ambersandtok)
5904 : {
5905 : /* avoid dangling else. */
5906 0 : Expect (M2Reserved_ambersandtok, stopset0, stopset1, stopset2);
5907 : }
5908 : else
5909 : {
5910 : /* avoid dangling else. */
5911 0 : ErrorArray ((const char *) "expecting one of: {%K&} {%KAND} {%KREM} {%KMOD} {%KDIV} {%K/} {%K*}", 67);
5912 : }
5913 0 : }
5914 :
5915 :
5916 : /*
5917 : SilentConstFactor := Number | SilentConstString |
5918 : SilentConstSetOrQualidentOrFunction |
5919 : '(' SilentConstExpression ')' |
5920 : 'NOT' SilentConstFactor |
5921 : SilentConstAttribute
5922 :
5923 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok
5924 :
5925 : cannot reachend
5926 : */
5927 :
5928 0 : static void SilentConstFactor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5929 : {
5930 0 : if ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok))))) != 0)))
5931 : {
5932 0 : Number (stopset0, stopset1, stopset2);
5933 : }
5934 0 : else if (M2LexBuf_currenttoken == M2Reserved_stringtok)
5935 : {
5936 : /* avoid dangling else. */
5937 0 : SilentConstString (stopset0, stopset1, stopset2);
5938 : }
5939 : else if ((M2LexBuf_currenttoken == M2Reserved_lcbratok) || (M2LexBuf_currenttoken == M2Reserved_identtok))
5940 : {
5941 : /* avoid dangling else. */
5942 0 : SilentConstSetOrQualidentOrFunction (stopset0, stopset1, stopset2);
5943 : }
5944 : else if (M2LexBuf_currenttoken == M2Reserved_lparatok)
5945 : {
5946 : /* avoid dangling else. */
5947 0 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5948 0 : SilentConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
5949 0 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
5950 : }
5951 : else if (M2LexBuf_currenttoken == M2Reserved_nottok)
5952 : {
5953 : /* avoid dangling else. */
5954 0 : Expect (M2Reserved_nottok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
5955 0 : SilentConstFactor (stopset0, stopset1, stopset2);
5956 : }
5957 : else if (M2LexBuf_currenttoken == M2Reserved_attributetok)
5958 : {
5959 : /* avoid dangling else. */
5960 0 : SilentConstAttribute (stopset0, stopset1, stopset2);
5961 : }
5962 : else
5963 : {
5964 : /* avoid dangling else. */
5965 0 : ErrorArray ((const char *) "expecting one of: {%K__ATTRIBUTE__} {%KNOT} {%K(} {%K%{} {%Kidentifier} {%Kstring} {%Kinteger number} {%Kreal number}", 117);
5966 : }
5967 0 : }
5968 :
5969 :
5970 : /*
5971 : SilentConstString := string
5972 :
5973 : first symbols:stringtok
5974 :
5975 : cannot reachend
5976 : */
5977 :
5978 0 : static void SilentConstString (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5979 : {
5980 0 : string (stopset0, stopset1, stopset2);
5981 0 : }
5982 :
5983 :
5984 : /*
5985 : SilentConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
5986 : '(' '(' SilentConstAttributeExpression
5987 : ')' ')'
5988 :
5989 : first symbols:attributetok
5990 :
5991 : cannot reachend
5992 : */
5993 :
5994 0 : static void SilentConstAttribute (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
5995 : {
5996 0 : Expect (M2Reserved_attributetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_builtintok-M2Reserved_unqualifiedtok))));
5997 0 : Expect (M2Reserved_builtintok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
5998 0 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
5999 0 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lesstok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6000 0 : SilentConstAttributeExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
6001 0 : Expect (M2Reserved_rparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
6002 0 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
6003 0 : }
6004 :
6005 :
6006 : /*
6007 : SilentConstAttributeExpression := Ident |
6008 : '<' Ident ','
6009 : SilentConstString
6010 : '>'
6011 :
6012 : first symbols:lesstok, identtok
6013 :
6014 : cannot reachend
6015 : */
6016 :
6017 0 : static void SilentConstAttributeExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6018 : {
6019 0 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
6020 : {
6021 0 : Ident (stopset0, stopset1, stopset2);
6022 : }
6023 0 : else if (M2LexBuf_currenttoken == M2Reserved_lesstok)
6024 : {
6025 : /* avoid dangling else. */
6026 0 : Expect (M2Reserved_lesstok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6027 0 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6028 0 : Expect (M2Reserved_commatok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok))));
6029 0 : SilentConstString (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_greatertok-M2Reserved_eoftok))), stopset1, stopset2);
6030 0 : Expect (M2Reserved_greatertok, stopset0, stopset1, stopset2);
6031 : }
6032 : else
6033 : {
6034 : /* avoid dangling else. */
6035 0 : ErrorArray ((const char *) "expecting one of: {%K<} {%Kidentifier}", 38);
6036 : }
6037 0 : }
6038 :
6039 :
6040 : /*
6041 : SilentComponentElement := SilentConstExpression
6042 : [ '..' SilentConstExpression ]
6043 :
6044 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6045 :
6046 : cannot reachend
6047 : */
6048 :
6049 0 : static void SilentComponentElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6050 : {
6051 0 : SilentConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodperiodtok-M2Reserved_eoftok))), stopset1, stopset2);
6052 0 : if (M2LexBuf_currenttoken == M2Reserved_periodperiodtok)
6053 : {
6054 0 : Expect (M2Reserved_periodperiodtok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
6055 0 : SilentConstExpression (stopset0, stopset1, stopset2);
6056 : }
6057 0 : }
6058 :
6059 :
6060 : /*
6061 : SilentComponentValue := SilentComponentElement [
6062 : 'BY' SilentConstExpression ]
6063 :
6064 : first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
6065 :
6066 : cannot reachend
6067 : */
6068 :
6069 0 : static void SilentComponentValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6070 : {
6071 0 : SilentComponentElement (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_bytok-M2Reserved_arraytok))), stopset2);
6072 0 : if (M2LexBuf_currenttoken == M2Reserved_bytok)
6073 : {
6074 0 : Expect (M2Reserved_bytok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
6075 0 : SilentConstExpression (stopset0, stopset1, stopset2);
6076 : }
6077 0 : }
6078 :
6079 :
6080 : /*
6081 : SilentArraySetRecordValue := SilentComponentValue
6082 : { ',' SilentComponentValue }
6083 :
6084 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6085 :
6086 : cannot reachend
6087 : */
6088 :
6089 0 : static void SilentArraySetRecordValue (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6090 : {
6091 0 : SilentComponentValue (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6092 0 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
6093 : {
6094 0 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
6095 0 : SilentComponentValue (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6096 : }
6097 : /* while */
6098 0 : }
6099 :
6100 :
6101 : /*
6102 : SilentConstructor := '{'
6103 : % SilentBuildConstructorStart %
6104 : [ SilentArraySetRecordValue ]
6105 : '}'
6106 :
6107 : first symbols:lcbratok
6108 :
6109 : cannot reachend
6110 : */
6111 :
6112 0 : static void SilentConstructor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6113 : {
6114 0 : Expect (M2Reserved_lcbratok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
6115 0 : M2Quads_SilentBuildConstructorStart ();
6116 0 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
6117 : {
6118 0 : SilentArraySetRecordValue (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rcbratok-M2Reserved_eoftok))), stopset1, stopset2);
6119 : }
6120 0 : Expect (M2Reserved_rcbratok, stopset0, stopset1, stopset2);
6121 0 : }
6122 :
6123 :
6124 : /*
6125 : SilentConstSetOrQualidentOrFunction := SilentConstructor |
6126 : Qualident
6127 : [ SilentConstructor |
6128 : SilentActualParameters ]
6129 :
6130 : first symbols:identtok, lcbratok
6131 :
6132 : cannot reachend
6133 : */
6134 :
6135 0 : static void SilentConstSetOrQualidentOrFunction (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6136 : {
6137 0 : if (M2LexBuf_currenttoken == M2Reserved_lcbratok)
6138 : {
6139 0 : SilentConstructor (stopset0, stopset1, stopset2);
6140 : }
6141 0 : else if (M2LexBuf_currenttoken == M2Reserved_identtok)
6142 : {
6143 : /* avoid dangling else. */
6144 0 : Qualident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lcbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
6145 0 : if ((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))))) != 0)))
6146 : {
6147 : /* avoid gcc warning by using compound statement even if not strictly necessary. */
6148 : /* seen optional [ | ] expression */
6149 0 : if (M2LexBuf_currenttoken == M2Reserved_lcbratok)
6150 : {
6151 0 : SilentConstructor (stopset0, stopset1, stopset2);
6152 : }
6153 0 : else if (M2LexBuf_currenttoken == M2Reserved_lparatok)
6154 : {
6155 : /* avoid dangling else. */
6156 0 : SilentActualParameters (stopset0, stopset1, stopset2);
6157 : }
6158 : else
6159 : {
6160 : /* avoid dangling else. */
6161 0 : ErrorArray ((const char *) "expecting one of: {%K(} {%K%{}", 30);
6162 : }
6163 : }
6164 : /* end of optional [ | ] expression */
6165 : }
6166 : else
6167 : {
6168 : /* avoid dangling else. */
6169 0 : ErrorArray ((const char *) "expecting one of: {%Kidentifier} {%K%{}", 39);
6170 : }
6171 0 : }
6172 :
6173 :
6174 : /*
6175 : SilentActualParameters := '(' [ SilentExpList ]
6176 : ')'
6177 :
6178 : first symbols:lparatok
6179 :
6180 : cannot reachend
6181 : */
6182 :
6183 0 : static void SilentActualParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6184 : {
6185 0 : Expect (M2Reserved_lparatok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
6186 0 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
6187 : {
6188 0 : SilentExpList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
6189 : }
6190 0 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
6191 0 : }
6192 :
6193 :
6194 : /*
6195 : SilentExpList := SilentConstExpression { ',' SilentConstExpression }
6196 :
6197 : first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6198 :
6199 : cannot reachend
6200 : */
6201 :
6202 0 : static void SilentExpList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6203 : {
6204 0 : SilentConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6205 0 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
6206 : {
6207 0 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
6208 0 : SilentConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6209 : }
6210 : /* while */
6211 0 : }
6212 :
6213 :
6214 : /*
6215 : SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
6216 :
6217 : first symbols:oftok, packedsettok, settok
6218 :
6219 : cannot reachend
6220 : */
6221 :
6222 2061 : static void SetType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6223 : {
6224 2061 : if (M2LexBuf_currenttoken == M2Reserved_settok)
6225 : {
6226 1919 : Expect (M2Reserved_settok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2);
6227 : }
6228 142 : else if (M2LexBuf_currenttoken == M2Reserved_packedsettok)
6229 : {
6230 : /* avoid dangling else. */
6231 142 : Expect (M2Reserved_packedsettok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2);
6232 : }
6233 : else
6234 : {
6235 : /* avoid dangling else. */
6236 0 : ErrorArray ((const char *) "expecting one of: {%KPACKEDSET} {%KSET}", 39);
6237 : }
6238 2061 : Expect (M2Reserved_oftok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6239 2061 : SimpleType (stopset0, stopset1, stopset2);
6240 2061 : }
6241 :
6242 :
6243 : /*
6244 : PointerType := 'POINTER' 'TO' Type
6245 :
6246 : first symbols:pointertok
6247 :
6248 : cannot reachend
6249 : */
6250 :
6251 9853 : static void PointerType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6252 : {
6253 9853 : Expect (M2Reserved_pointertok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_totok-M2Reserved_unqualifiedtok))));
6254 9853 : Expect (M2Reserved_totok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_settok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_recordtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6255 9853 : Type (stopset0, stopset1, stopset2);
6256 9853 : }
6257 :
6258 :
6259 : /*
6260 : ProcedureType := 'PROCEDURE' [ FormalTypeList ]
6261 :
6262 : first symbols:proceduretok
6263 :
6264 : cannot reachend
6265 : */
6266 :
6267 61410 : static void ProcedureType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6268 : {
6269 61410 : Expect (M2Reserved_proceduretok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
6270 61410 : if (M2LexBuf_currenttoken == M2Reserved_lparatok)
6271 : {
6272 45819 : FormalTypeList (stopset0, stopset1, stopset2);
6273 : }
6274 61410 : }
6275 :
6276 :
6277 : /*
6278 : FormalTypeList := '(' ( ')' FormalReturn |
6279 : ProcedureParameters ')'
6280 : FormalReturn )
6281 :
6282 : first symbols:lparatok
6283 :
6284 : cannot reachend
6285 : */
6286 :
6287 45819 : static void FormalTypeList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6288 : {
6289 45819 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6290 45819 : if (M2LexBuf_currenttoken == M2Reserved_rparatok)
6291 : {
6292 5736 : Expect (M2Reserved_rparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
6293 5736 : FormalReturn (stopset0, stopset1, stopset2);
6294 : }
6295 40083 : else if ((M2LexBuf_currenttoken == M2Reserved_arraytok) || ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))))) != 0))))
6296 : {
6297 : /* avoid dangling else. */
6298 40083 : ProcedureParameters (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
6299 40083 : Expect (M2Reserved_rparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
6300 40083 : FormalReturn (stopset0, stopset1, stopset2);
6301 : }
6302 : else
6303 : {
6304 : /* avoid dangling else. */
6305 0 : ErrorArray ((const char *) "expecting one of: {%KVAR} {%K...} {%KARRAY} {%Kidentifier} {%K)}", 64);
6306 : }
6307 45819 : }
6308 :
6309 :
6310 : /*
6311 : FormalReturn := [ ':' OptReturnType ]
6312 :
6313 : first symbols:colontok
6314 :
6315 : reachend
6316 : */
6317 :
6318 3349754 : static void FormalReturn (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6319 : {
6320 3349754 : if (M2LexBuf_currenttoken == M2Reserved_colontok)
6321 : {
6322 2147693 : Expect (M2Reserved_colontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6323 2147693 : OptReturnType (stopset0, stopset1, stopset2);
6324 : }
6325 3349754 : }
6326 :
6327 :
6328 : /*
6329 : OptReturnType := '[' QualidentCheck ']' |
6330 : QualidentCheck
6331 :
6332 : first symbols:identtok, lsbratok
6333 :
6334 : cannot reachend
6335 : */
6336 :
6337 2147693 : static void OptReturnType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6338 : {
6339 2147693 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
6340 : {
6341 132551 : Expect (M2Reserved_lsbratok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6342 132551 : QualidentCheck (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
6343 132551 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
6344 : }
6345 2015142 : else if (M2LexBuf_currenttoken == M2Reserved_identtok)
6346 : {
6347 : /* avoid dangling else. */
6348 2015142 : QualidentCheck (stopset0, stopset1, stopset2);
6349 : }
6350 : else
6351 : {
6352 : /* avoid dangling else. */
6353 0 : ErrorArray ((const char *) "expecting one of: {%Kidentifier} {%K[}", 38);
6354 : }
6355 2147693 : }
6356 :
6357 :
6358 : /*
6359 : ProcedureParameters := ProcedureParameter { ','
6360 : ProcedureParameter }
6361 :
6362 : first symbols:identtok, arraytok, periodperiodperiodtok, vartok
6363 :
6364 : cannot reachend
6365 : */
6366 :
6367 40083 : static void ProcedureParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6368 : {
6369 40083 : ProcedureParameter (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6370 126726 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
6371 : {
6372 46560 : Expect (M2Reserved_commatok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6373 46560 : ProcedureParameter (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6374 : }
6375 : /* while */
6376 40083 : }
6377 :
6378 :
6379 : /*
6380 : ProcedureParameter := '...' | 'VAR' FormalType |
6381 : FormalType
6382 :
6383 : first symbols:arraytok, identtok, vartok, periodperiodperiodtok
6384 :
6385 : cannot reachend
6386 : */
6387 :
6388 86643 : static void ProcedureParameter (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6389 : {
6390 86643 : if (M2LexBuf_currenttoken == M2Reserved_periodperiodperiodtok)
6391 : {
6392 0 : Expect (M2Reserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
6393 : }
6394 86643 : else if (M2LexBuf_currenttoken == M2Reserved_vartok)
6395 : {
6396 : /* avoid dangling else. */
6397 6582 : Expect (M2Reserved_vartok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6398 6582 : FormalType (stopset0, stopset1, stopset2);
6399 : }
6400 80061 : else if ((M2LexBuf_currenttoken == M2Reserved_arraytok) || (M2LexBuf_currenttoken == M2Reserved_identtok))
6401 : {
6402 : /* avoid dangling else. */
6403 80061 : FormalType (stopset0, stopset1, stopset2);
6404 : }
6405 : else
6406 : {
6407 : /* avoid dangling else. */
6408 0 : ErrorArray ((const char *) "expecting one of: {%KARRAY} {%Kidentifier} {%KVAR} {%K...}", 58);
6409 : }
6410 86643 : }
6411 :
6412 :
6413 : /*
6414 : VarIdent :=
6415 : % VAR
6416 : Sym, Type: CARDINAL ;
6417 : on: BOOLEAN ; %
6418 :
6419 : % on := IsAutoPushOn() %
6420 :
6421 : % IF NOT on
6422 : THEN
6423 : PushAutoOn
6424 : END %
6425 : Ident
6426 : % IF on
6427 : THEN
6428 : PopTF(Sym, Type) ;
6429 : PushTF(Sym, Type) ;
6430 : PushTF(Sym, Type)
6431 : END %
6432 : [ '[' ConstExpression
6433 : % BuildVarAtAddress %
6434 : ']' ]
6435 : % PopNothing ;
6436 : PopAuto %
6437 :
6438 :
6439 : first symbols:identtok
6440 :
6441 : cannot reachend
6442 : */
6443 :
6444 71819 : static void VarIdent (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6445 : {
6446 71819 : unsigned int Sym;
6447 71819 : unsigned int Type;
6448 71819 : bool on;
6449 :
6450 71819 : on = M2Quads_IsAutoPushOn ();
6451 71819 : if (! on)
6452 : {
6453 71819 : M2Quads_PushAutoOn ();
6454 : }
6455 71819 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2);
6456 71819 : if (on)
6457 : {
6458 0 : M2Quads_PopTF (&Sym, &Type);
6459 0 : M2Quads_PushTF (Sym, Type);
6460 0 : M2Quads_PushTF (Sym, Type);
6461 : }
6462 71819 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
6463 : {
6464 54 : Expect (M2Reserved_lsbratok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
6465 54 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
6466 54 : P3SymBuild_BuildVarAtAddress ();
6467 54 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
6468 : }
6469 71819 : M2Quads_PopNothing ();
6470 71819 : M2Quads_PopAuto ();
6471 71819 : }
6472 :
6473 :
6474 : /*
6475 : VarIdentList := VarIdent
6476 : % VAR
6477 : on: BOOLEAN ;
6478 : n : CARDINAL ; %
6479 :
6480 : % on := IsAutoPushOn() ;
6481 : IF on
6482 : THEN
6483 : n := 1
6484 : END %
6485 : { ',' VarIdent
6486 : % IF on
6487 : THEN
6488 : INC(n)
6489 : END %
6490 : }
6491 : % IF on
6492 : THEN
6493 : PushT(n)
6494 : END %
6495 :
6496 :
6497 : first symbols:identtok
6498 :
6499 : cannot reachend
6500 : */
6501 :
6502 48657 : static void VarIdentList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6503 : {
6504 48657 : bool on;
6505 48657 : unsigned int n;
6506 :
6507 48657 : VarIdent (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6508 48657 : on = M2Quads_IsAutoPushOn ();
6509 48657 : if (on)
6510 : {
6511 48657 : n = 1;
6512 : }
6513 71819 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
6514 : {
6515 23162 : Expect (M2Reserved_commatok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6516 23162 : VarIdent (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6517 23162 : if (on)
6518 : {
6519 0 : n += 1;
6520 : }
6521 : }
6522 : /* while */
6523 48657 : if (on)
6524 : {
6525 0 : M2Quads_PushT (n);
6526 : }
6527 48657 : }
6528 :
6529 :
6530 : /*
6531 : VariableDeclaration := VarIdentList ':'
6532 : % InclVar (BlockState) %
6533 : Type Alignment
6534 : % ExclVar (BlockState) %
6535 :
6536 :
6537 : first symbols:identtok
6538 :
6539 : cannot reachend
6540 : */
6541 :
6542 48657 : static void VariableDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6543 : {
6544 48657 : VarIdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
6545 48657 : Expect (M2Reserved_colontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_settok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_recordtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6546 48657 : M2StateCheck_InclVar (BlockState);
6547 48657 : Type (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
6548 48639 : Alignment (stopset0, stopset1, stopset2);
6549 48639 : M2StateCheck_ExclVar (BlockState);
6550 48639 : }
6551 :
6552 :
6553 : /*
6554 : Designator := QualidentCheck
6555 : % CheckWithReference %
6556 : { SubDesignator }
6557 :
6558 : first symbols:identtok
6559 :
6560 : cannot reachend
6561 : */
6562 :
6563 214614 : static void Designator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6564 : {
6565 214614 : QualidentCheck (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_uparrowtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_periodtok-M2Reserved_eoftok))), stopset1, stopset2);
6566 214614 : M2Quads_CheckWithReference ();
6567 456488 : while ((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_uparrowtok-M2Reserved_eoftok))))) != 0)))
6568 : {
6569 27275 : SubDesignator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_uparrowtok-M2Reserved_eoftok))), stopset1, stopset2);
6570 : }
6571 : /* while */
6572 214599 : }
6573 :
6574 :
6575 : /*
6576 : SubDesignator := '.'
6577 : % VAR Sym, Type, tok,
6578 : dotpostok: CARDINAL ;
6579 : name : Name ; %
6580 :
6581 : % dotpostok := GetTokenNo () -1 ;
6582 : PopTFtok (Sym, Type, tok) ;
6583 : Type := SkipType(Type) ;
6584 : PushTFtok(Sym, Type, tok) ;
6585 : IF Type=NulSym
6586 : THEN
6587 : IF IsModuleKnown(GetSymName(Sym))
6588 : THEN
6589 : MetaErrorT1 (tok, '{%1a} looks like a module which has not been globally imported (eg. suggest that you IMPORT {%1a}', Sym)
6590 : ELSE
6591 : IF IsUnknown (Sym)
6592 : THEN
6593 : MetaErrorT1 (tok, 'the qualifier {%1Ua} is unknown {%1&siD}', Sym) ;
6594 : UnknownReported (Sym)
6595 : ELSE
6596 : MetaErrorT1 (tok, "the type of {%1ad} is not a record (but {%1tad})", Sym)
6597 : END
6598 : END
6599 : ELSIF NOT IsRecord(Type)
6600 : THEN
6601 : IF IsUnknown (Type)
6602 : THEN
6603 : MetaErrorT1 (tok, 'the qualifier {%1Ua} is unknown {%1&siD}', Type) ;
6604 : UnknownReported (Type)
6605 : ELSE
6606 : MetaErrorT2 (tok, "the type of {%1ad} is not a record (but {%2ad}) and therefore it has no field", Sym, Type)
6607 : END
6608 : END ;
6609 : StartScope(Type) %
6610 : Ident
6611 : % PopTtok (name, tok) ;
6612 : Sym := GetRecordField (GetTokenNo () -1, Type, name) ;
6613 : Type := GetType (Sym) ;
6614 : PushTFtok (Sym, Type, tok) ;
6615 : EndScope ;
6616 : PushT (1) ;
6617 : BuildDesignatorRecord (dotpostok) %
6618 : | '[' ArrayExpList ']' |
6619 : '^'
6620 : % BuildDesignatorPointer (GetTokenNo () -1) %
6621 :
6622 :
6623 : first symbols:uparrowtok, lsbratok, periodtok
6624 :
6625 : cannot reachend
6626 : */
6627 :
6628 73329 : static void SubDesignator (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6629 : {
6630 73329 : unsigned int Sym;
6631 73329 : unsigned int Type;
6632 73329 : unsigned int tok;
6633 73329 : unsigned int dotpostok;
6634 73329 : NameKey_Name name;
6635 :
6636 73329 : if (M2LexBuf_currenttoken == M2Reserved_periodtok)
6637 : {
6638 27453 : Expect (M2Reserved_periodtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6639 27453 : dotpostok = (M2LexBuf_GetTokenNo ())-1;
6640 27453 : M2Quads_PopTFtok (&Sym, &Type, &tok);
6641 27453 : Type = SymbolTable_SkipType (Type);
6642 27453 : M2Quads_PushTFtok (Sym, Type, tok);
6643 27453 : if (Type == SymbolTable_NulSym)
6644 : {
6645 8 : if (M2Batch_IsModuleKnown (SymbolTable_GetSymName (Sym)))
6646 : {
6647 6 : M2MetaError_MetaErrorT1 (tok, (const char *) "{%1a} looks like a module which has not been globally imported (eg. suggest that you IMPORT {%1a}", 97, Sym);
6648 : }
6649 : else
6650 : {
6651 2 : if (SymbolTable_IsUnknown (Sym))
6652 : {
6653 2 : M2MetaError_MetaErrorT1 (tok, (const char *) "the qualifier {%1Ua} is unknown {%1&siD}", 40, Sym);
6654 2 : SymbolTable_UnknownReported (Sym);
6655 : }
6656 : else
6657 : {
6658 0 : M2MetaError_MetaErrorT1 (tok, (const char *) "the type of {%1ad} is not a record (but {%1tad})", 48, Sym);
6659 : }
6660 : }
6661 : }
6662 27445 : else if (! (SymbolTable_IsRecord (Type)))
6663 : {
6664 : /* avoid dangling else. */
6665 1 : if (SymbolTable_IsUnknown (Type))
6666 : {
6667 0 : M2MetaError_MetaErrorT1 (tok, (const char *) "the qualifier {%1Ua} is unknown {%1&siD}", 40, Type);
6668 0 : SymbolTable_UnknownReported (Type);
6669 : }
6670 : else
6671 : {
6672 1 : M2MetaError_MetaErrorT2 (tok, (const char *) "the type of {%1ad} is not a record (but {%2ad}) and therefore it has no field", 77, Sym, Type);
6673 : }
6674 : }
6675 27453 : SymbolTable_StartScope (Type);
6676 27444 : Ident (stopset0, stopset1, stopset2);
6677 27444 : M2Quads_PopTtok (&name, &tok);
6678 27444 : Sym = M2StackSpell_GetRecordField ((M2LexBuf_GetTokenNo ())-1, Type, name);
6679 27444 : Type = SymbolTable_GetType (Sym);
6680 27438 : M2Quads_PushTFtok (Sym, Type, tok);
6681 27438 : SymbolTable_EndScope ();
6682 27438 : M2Quads_PushT (static_cast<unsigned int> (1));
6683 27438 : M2Quads_BuildDesignatorRecord (dotpostok);
6684 : }
6685 45876 : else if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
6686 : {
6687 : /* avoid dangling else. */
6688 25593 : Expect (M2Reserved_lsbratok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6689 25593 : ArrayExpList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
6690 25587 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
6691 : }
6692 20283 : else if (M2LexBuf_currenttoken == M2Reserved_uparrowtok)
6693 : {
6694 : /* avoid dangling else. */
6695 20283 : Expect (M2Reserved_uparrowtok, stopset0, stopset1, stopset2);
6696 20283 : M2Quads_BuildDesignatorPointer ((M2LexBuf_GetTokenNo ())-1);
6697 : }
6698 : else
6699 : {
6700 : /* avoid dangling else. */
6701 0 : ErrorArray ((const char *) "expecting one of: {%K^} {%K[} {%K.}", 35);
6702 : }
6703 73308 : }
6704 :
6705 :
6706 : /*
6707 : ArrayExpList := Expression
6708 : % BuildBooleanVariable %
6709 :
6710 : % BuildDesignatorArray %
6711 : { ',' Expression
6712 : % BuildBooleanVariable %
6713 :
6714 : % BuildDesignatorArray %
6715 : }
6716 :
6717 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
6718 :
6719 : cannot reachend
6720 : */
6721 :
6722 25593 : static void ArrayExpList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6723 : {
6724 25593 : Expression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6725 25593 : M2Quads_BuildBooleanVariable ();
6726 25593 : M2Quads_BuildDesignatorArray ();
6727 51627 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
6728 : {
6729 447 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6730 447 : Expression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6731 447 : M2Quads_BuildBooleanVariable ();
6732 447 : M2Quads_BuildDesignatorArray ();
6733 : }
6734 : /* while */
6735 25587 : }
6736 :
6737 :
6738 : /*
6739 : ExpList :=
6740 : % VAR n: CARDINAL ; %
6741 : Expression
6742 : % BuildBooleanVariable %
6743 :
6744 : % n := 1 %
6745 : { ',' Expression
6746 : % BuildBooleanVariable %
6747 :
6748 : % INC(n) %
6749 : }
6750 : % PushT(n) %
6751 :
6752 :
6753 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
6754 :
6755 : cannot reachend
6756 : */
6757 :
6758 185880 : static void ExpList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6759 : {
6760 185880 : unsigned int n;
6761 :
6762 185880 : Expression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6763 185880 : M2Quads_BuildBooleanVariable ();
6764 185880 : n = 1;
6765 520238 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
6766 : {
6767 148478 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6768 148478 : Expression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
6769 148478 : M2Quads_BuildBooleanVariable ();
6770 148478 : n += 1;
6771 : }
6772 : /* while */
6773 185880 : M2Quads_PushT (n);
6774 185880 : }
6775 :
6776 :
6777 : /*
6778 : Expression :=
6779 : % VAR tokpos: CARDINAL ; %
6780 :
6781 : % PushAutoOn %
6782 : SimpleExpression [ Relation
6783 : % tokpos := GetTokenNo ()-1 %
6784 : SimpleExpression
6785 :
6786 : % BuildRelOp (tokpos) %
6787 : ]
6788 : % PopAuto %
6789 :
6790 :
6791 : first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
6792 :
6793 : cannot reachend
6794 : */
6795 :
6796 577237 : static void Expression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6797 : {
6798 577237 : unsigned int tokpos;
6799 :
6800 577237 : M2Quads_PushAutoOn ();
6801 577237 : SimpleExpression (stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_intok-M2Reserved_arraytok))), stopset2);
6802 577096 : if (((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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))
6803 : {
6804 60596 : Relation (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6805 60596 : tokpos = (M2LexBuf_GetTokenNo ())-1;
6806 60596 : SimpleExpression (stopset0, stopset1, stopset2);
6807 60596 : M2Quads_BuildRelOp (tokpos);
6808 : }
6809 577096 : M2Quads_PopAuto ();
6810 577096 : }
6811 :
6812 :
6813 : /*
6814 : SimpleExpression := UnaryOrTerm { AddOperator Term
6815 :
6816 : % BuildBinaryOp %
6817 : }
6818 :
6819 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
6820 :
6821 : cannot reachend
6822 : */
6823 :
6824 637833 : static void SimpleExpression (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6825 : {
6826 637833 : UnaryOrTerm (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_ortok-M2Reserved_arraytok))), stopset2);
6827 1297860 : while (((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok))))) != 0))) || (M2LexBuf_currenttoken == M2Reserved_ortok))
6828 : {
6829 22335 : AddOperator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6830 22335 : Term (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_ortok-M2Reserved_arraytok))), stopset2);
6831 22335 : M2Quads_BuildBinaryOp ();
6832 : }
6833 : /* while */
6834 637692 : }
6835 :
6836 :
6837 : /*
6838 : UnaryOrTerm := '+'
6839 : % PushTtok(PlusTok, GetTokenNo() -1) %
6840 : Term
6841 : % BuildUnaryOp %
6842 : | '-'
6843 : % PushTtok(MinusTok, GetTokenNo() -1) %
6844 : Term
6845 : % BuildUnaryOp %
6846 : | Term
6847 :
6848 : first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
6849 :
6850 : cannot reachend
6851 : */
6852 :
6853 637833 : static void UnaryOrTerm (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6854 : {
6855 637833 : if (M2LexBuf_currenttoken == M2Reserved_plustok)
6856 : {
6857 144 : Expect (M2Reserved_plustok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6858 144 : M2Quads_PushTtok (M2Reserved_PlusTok, (M2LexBuf_GetTokenNo ())-1);
6859 144 : Term (stopset0, stopset1, stopset2);
6860 144 : M2Quads_BuildUnaryOp ();
6861 : }
6862 637689 : else if (M2LexBuf_currenttoken == M2Reserved_minustok)
6863 : {
6864 : /* avoid dangling else. */
6865 4935 : Expect (M2Reserved_minustok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6866 4935 : M2Quads_PushTtok (M2Reserved_MinusTok, (M2LexBuf_GetTokenNo ())-1);
6867 4935 : Term (stopset0, stopset1, stopset2);
6868 4935 : M2Quads_BuildUnaryOp ();
6869 : }
6870 632754 : else if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))))) != 0))))
6871 : {
6872 : /* avoid dangling else. */
6873 632754 : Term (stopset0, stopset1, stopset2);
6874 : }
6875 : else
6876 : {
6877 : /* avoid dangling else. */
6878 0 : ErrorArray ((const char *) "expecting one of: {%KNOT} {%K(} {%Kstring} {%Kinteger number} {%Kreal number} {%Kidentifier} {%K%{} {%K-} {%K+}", 111);
6879 : }
6880 637800 : }
6881 :
6882 :
6883 : /*
6884 : Term := Factor { MulOperator Factor
6885 : % BuildBinaryOp %
6886 : }
6887 :
6888 : first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
6889 :
6890 : cannot reachend
6891 : */
6892 :
6893 660168 : static void Term (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6894 : {
6895 660168 : Factor (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ambersandtok-M2Reserved_eoftok)) | (1 << (M2Reserved_andtok-M2Reserved_eoftok)) | (1 << (M2Reserved_dividetok-M2Reserved_eoftok)) | (1 << (M2Reserved_timestok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_modtok-M2Reserved_arraytok)) | (1 << (M2Reserved_divtok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_remtok-M2Reserved_unqualifiedtok))));
6896 1338569 : while ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_divtok-M2Reserved_arraytok)) | (1 << (M2Reserved_modtok-M2Reserved_arraytok))))) != 0)))) || (M2LexBuf_currenttoken == M2Reserved_remtok))
6897 : {
6898 18266 : MulOperator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6899 18266 : Factor (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_timestok-M2Reserved_eoftok)) | (1 << (M2Reserved_dividetok-M2Reserved_eoftok)) | (1 << (M2Reserved_andtok-M2Reserved_eoftok)) | (1 << (M2Reserved_ambersandtok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_divtok-M2Reserved_arraytok)) | (1 << (M2Reserved_modtok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_remtok-M2Reserved_unqualifiedtok))));
6900 18266 : M2Quads_BuildBinaryOp ();
6901 : }
6902 : /* while */
6903 660135 : }
6904 :
6905 :
6906 : /*
6907 : Factor :=
6908 : % VAR tokpos: CARDINAL ; %
6909 : Number | string | SetOrDesignatorOrFunction |
6910 : '(' Expression ')' |
6911 : 'NOT'
6912 : % tokpos := GetTokenNo ()-1 %
6913 : ( Factor
6914 : % BuildNot (tokpos) %
6915 : | ConstAttribute )
6916 :
6917 : first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
6918 :
6919 : cannot reachend
6920 : */
6921 :
6922 683544 : static void Factor (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
6923 : {
6924 683544 : unsigned int tokpos;
6925 :
6926 683544 : if ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok))))) != 0)))
6927 : {
6928 99792 : Number (stopset0, stopset1, stopset2);
6929 : }
6930 583752 : else if (M2LexBuf_currenttoken == M2Reserved_stringtok)
6931 : {
6932 : /* avoid dangling else. */
6933 49949 : string (stopset0, stopset1, stopset2);
6934 : }
6935 533803 : else if ((M2LexBuf_currenttoken == M2Reserved_lcbratok) || (M2LexBuf_currenttoken == M2Reserved_identtok))
6936 : {
6937 : /* avoid dangling else. */
6938 494625 : SetOrDesignatorOrFunction (stopset0, stopset1, stopset2);
6939 : }
6940 39178 : else if (M2LexBuf_currenttoken == M2Reserved_lparatok)
6941 : {
6942 : /* avoid dangling else. */
6943 34068 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6944 34068 : Expression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
6945 34068 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
6946 : }
6947 5110 : else if (M2LexBuf_currenttoken == M2Reserved_nottok)
6948 : {
6949 : /* avoid dangling else. */
6950 5110 : Expect (M2Reserved_nottok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_attributetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
6951 5110 : tokpos = (M2LexBuf_GetTokenNo ())-1;
6952 5110 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))))) != 0))))
6953 : {
6954 5110 : Factor (stopset0, stopset1, stopset2);
6955 5110 : M2Quads_BuildNot (tokpos);
6956 : }
6957 0 : else if (M2LexBuf_currenttoken == M2Reserved_attributetok)
6958 : {
6959 : /* avoid dangling else. */
6960 0 : ConstAttribute (stopset0, stopset1, stopset2);
6961 : }
6962 : else
6963 : {
6964 : /* avoid dangling else. */
6965 0 : ErrorArray ((const char *) "expecting one of: {%K__ATTRIBUTE__} {%Kreal number} {%Kinteger number} {%Kstring} {%K(} {%KNOT} {%K%{} {%Kidentifier}", 117);
6966 : }
6967 : }
6968 : else
6969 : {
6970 : /* avoid dangling else. */
6971 0 : ErrorArray ((const char *) "expecting one of: {%KNOT} {%K(} {%Kidentifier} {%K%{} {%Kstring} {%Kinteger number} {%Kreal number}", 99);
6972 : }
6973 683511 : }
6974 :
6975 :
6976 : /*
6977 : SetOrDesignatorOrFunction :=
6978 : % VAR tokpos: CARDINAL ; %
6979 :
6980 : % tokpos := GetTokenNo () %
6981 : ( Qualident
6982 : % Assert (OperandTok (1) # UnknownTokenNo) %
6983 :
6984 : % CheckWithReference %
6985 :
6986 : % Assert (OperandTok (1) # UnknownTokenNo) %
6987 : [ Constructor |
6988 : SimpleDes
6989 : % Assert (OperandTok(1) # UnknownTokenNo) %
6990 : [ ActualParameters
6991 :
6992 : % IF IsInConstParameters ()
6993 : THEN
6994 : BuildConstFunctionCall
6995 : ELSE
6996 : BuildFunctionCall (FALSE)
6997 : END %
6998 : ] ] |
6999 :
7000 : % BuildTypeForConstructor (tokpos) %
7001 : Constructor )
7002 :
7003 : first symbols:lcbratok, identtok
7004 :
7005 : cannot reachend
7006 : */
7007 :
7008 494625 : static void SetOrDesignatorOrFunction (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7009 : {
7010 494625 : unsigned int tokpos;
7011 :
7012 494625 : tokpos = M2LexBuf_GetTokenNo ();
7013 494625 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
7014 : {
7015 : /* avoid dangling else. */
7016 494306 : Qualident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lcbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_periodtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_uparrowtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
7017 494306 : M2Debug_Assert ((M2Quads_OperandTok (1)) != M2LexBuf_UnknownTokenNo);
7018 494306 : M2Quads_CheckWithReference ();
7019 494306 : M2Debug_Assert ((M2Quads_OperandTok (1)) != M2LexBuf_UnknownTokenNo);
7020 494306 : if ((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_uparrowtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_periodtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))))) != 0)))
7021 : {
7022 : /* avoid gcc warning by using compound statement even if not strictly necessary. */
7023 : /* seen optional [ | ] expression */
7024 125672 : if (M2LexBuf_currenttoken == M2Reserved_lcbratok)
7025 : {
7026 4489 : Constructor (stopset0, stopset1, stopset2);
7027 : }
7028 121183 : else if ((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_uparrowtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_periodtok-M2Reserved_eoftok))))) != 0)))
7029 : {
7030 : /* avoid dangling else. */
7031 121183 : SimpleDes (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
7032 : /* Assert (OperandTok(1) # UnknownTokenNo) */
7033 121177 : if (M2LexBuf_currenttoken == M2Reserved_lparatok)
7034 : {
7035 93390 : ActualParameters (stopset0, stopset1, stopset2);
7036 93390 : if (M2Quads_IsInConstParameters ())
7037 : {
7038 48 : M2Quads_BuildConstFunctionCall ();
7039 : }
7040 : else
7041 : {
7042 93342 : M2Quads_BuildFunctionCall (false);
7043 : }
7044 : }
7045 : }
7046 : else
7047 : {
7048 : /* avoid dangling else. */
7049 0 : ErrorArray ((const char *) "expecting one of: {%K(} {%K^} {%K[} {%K.} {%K%{}", 48);
7050 : }
7051 : }
7052 : /* end of optional [ | ] expression */
7053 : }
7054 : else
7055 : {
7056 319 : M2Quads_BuildTypeForConstructor (tokpos);
7057 319 : Constructor (stopset0, stopset1, stopset2);
7058 : }
7059 494592 : }
7060 :
7061 :
7062 : /*
7063 : SimpleDes := { SubDesignator }
7064 :
7065 : first symbols:periodtok, lsbratok, uparrowtok
7066 :
7067 : reachend
7068 : */
7069 :
7070 121183 : static void SimpleDes (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7071 : {
7072 167231 : while ((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_uparrowtok-M2Reserved_eoftok))))) != 0)))
7073 : {
7074 46054 : SubDesignator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok)) | (1 << (M2Reserved_uparrowtok-M2Reserved_eoftok))), stopset1, stopset2);
7075 : }
7076 : /* while */
7077 121177 : }
7078 :
7079 :
7080 : /*
7081 : ActualParameters := '('
7082 : % BuildSizeCheckStart %
7083 : ( ExpList |
7084 : % BuildNulParam %
7085 : ) ')'
7086 :
7087 : first symbols:lparatok
7088 :
7089 : cannot reachend
7090 : */
7091 :
7092 189627 : static void ActualParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7093 : {
7094 189627 : Expect (M2Reserved_lparatok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7095 189627 : M2Quads_BuildSizeCheckStart ();
7096 189627 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))))) != 0))))
7097 : {
7098 185880 : ExpList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
7099 : }
7100 : else
7101 : {
7102 3747 : M2Quads_BuildNulParam ();
7103 : }
7104 189627 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
7105 189627 : }
7106 :
7107 :
7108 : /*
7109 : ExitStatement := 'EXIT'
7110 : % BuildExit %
7111 :
7112 :
7113 : first symbols:exittok
7114 :
7115 : cannot reachend
7116 : */
7117 :
7118 94 : static void ExitStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7119 : {
7120 0 : Expect (M2Reserved_exittok, stopset0, stopset1, stopset2);
7121 0 : M2Quads_BuildExit ();
7122 94 : }
7123 :
7124 :
7125 : /*
7126 : ReturnStatement := 'RETURN'
7127 : % VAR tokno: CARDINAL ; %
7128 :
7129 : % tokno := GetTokenNo () -1 %
7130 : ( Expression |
7131 : % BuildNulExpression (tokno) %
7132 : )
7133 : % BuildReturn (tokno) %
7134 :
7135 :
7136 : first symbols:returntok
7137 :
7138 : cannot reachend
7139 : */
7140 :
7141 23629 : static void ReturnStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7142 : {
7143 23629 : unsigned int tokno;
7144 :
7145 23629 : Expect (M2Reserved_returntok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7146 23629 : tokno = (M2LexBuf_GetTokenNo ())-1;
7147 23629 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))))) != 0))))
7148 : {
7149 22769 : Expression (stopset0, stopset1, stopset2);
7150 : }
7151 : else
7152 : {
7153 860 : M2Quads_BuildNulExpression (tokno);
7154 : }
7155 23629 : M2Quads_BuildReturn (tokno);
7156 23629 : }
7157 :
7158 :
7159 : /*
7160 : Statement :=
7161 : % BuildStmtNote (0) %
7162 :
7163 : % PushAutoOn ; DisplayStack %
7164 : [ AssignmentOrProcedureCall |
7165 : IfStatement | CaseStatement |
7166 : WhileStatement |
7167 : RepeatStatement |
7168 : LoopStatement | ForStatement |
7169 : WithStatement | AsmStatement |
7170 : ExitStatement | ReturnStatement |
7171 : RetryStatement ]
7172 : % PopAuto ; %
7173 :
7174 :
7175 : first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
7176 :
7177 : reachend
7178 : */
7179 :
7180 305280 : static void Statement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7181 : {
7182 305280 : M2Quads_BuildStmtNote (0);
7183 305280 : M2Quads_PushAutoOn ();
7184 305280 : M2Quads_DisplayStack ();
7185 305280 : if ((((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_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)) & ((P3Build_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))))
7186 : {
7187 : /* avoid gcc warning by using compound statement even if not strictly necessary. */
7188 : /* seen optional [ | ] expression */
7189 294813 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
7190 : {
7191 208193 : AssignmentOrProcedureCall (stopset0, stopset1, stopset2);
7192 : }
7193 : else if (M2LexBuf_currenttoken == M2Reserved_iftok)
7194 : {
7195 : /* avoid dangling else. */
7196 42535 : IfStatement (stopset0, stopset1, stopset2);
7197 : }
7198 : else if (M2LexBuf_currenttoken == M2Reserved_casetok)
7199 : {
7200 : /* avoid dangling else. */
7201 1015 : CaseStatement (stopset0, stopset1, stopset2);
7202 : }
7203 : else if (M2LexBuf_currenttoken == M2Reserved_whiletok)
7204 : {
7205 : /* avoid dangling else. */
7206 8101 : WhileStatement (stopset0, stopset1, stopset2);
7207 : }
7208 : else if (M2LexBuf_currenttoken == M2Reserved_repeattok)
7209 : {
7210 : /* avoid dangling else. */
7211 1463 : RepeatStatement (stopset0, stopset1, stopset2);
7212 : }
7213 : else if (M2LexBuf_currenttoken == M2Reserved_looptok)
7214 : {
7215 : /* avoid dangling else. */
7216 523 : LoopStatement (stopset0, stopset1, stopset2);
7217 : }
7218 : else if (M2LexBuf_currenttoken == M2Reserved_fortok)
7219 : {
7220 : /* avoid dangling else. */
7221 2644 : ForStatement (stopset0, stopset1, stopset2);
7222 : }
7223 : else if (M2LexBuf_currenttoken == M2Reserved_withtok)
7224 : {
7225 : /* avoid dangling else. */
7226 6421 : WithStatement (stopset0, stopset1, stopset2);
7227 : }
7228 : else if (M2LexBuf_currenttoken == M2Reserved_asmtok)
7229 : {
7230 : /* avoid dangling else. */
7231 27 : AsmStatement (stopset0, stopset1, stopset2);
7232 : }
7233 : else if (M2LexBuf_currenttoken == M2Reserved_exittok)
7234 : {
7235 : /* avoid dangling else. */
7236 94 : ExitStatement (stopset0, stopset1, stopset2);
7237 : }
7238 : else if (M2LexBuf_currenttoken == M2Reserved_returntok)
7239 : {
7240 : /* avoid dangling else. */
7241 23629 : ReturnStatement (stopset0, stopset1, stopset2);
7242 : }
7243 : else if (M2LexBuf_currenttoken == M2Reserved_retrytok)
7244 : {
7245 : /* avoid dangling else. */
7246 168 : RetryStatement (stopset0, stopset1, stopset2);
7247 : }
7248 : else
7249 : {
7250 : /* avoid dangling else. */
7251 0 : ErrorArray ((const char *) "expecting one of: {%KRETRY} {%KRETURN} {%KEXIT} {%KASM} {%KWITH} {%KFOR} {%KLOOP} {%KREPEAT} {%KWHILE} {%KCASE} {%KIF} {%Kidentifier}", 133);
7252 : }
7253 : }
7254 : /* end of optional [ | ] expression */
7255 305100 : M2Quads_PopAuto ();
7256 305100 : }
7257 :
7258 :
7259 : /*
7260 : RetryStatement := 'RETRY'
7261 : % BuildRetry (GetTokenNo () -1) %
7262 :
7263 :
7264 : first symbols:retrytok
7265 :
7266 : cannot reachend
7267 : */
7268 :
7269 168 : static void RetryStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7270 : {
7271 168 : Expect (M2Reserved_retrytok, stopset0, stopset1, stopset2);
7272 168 : M2Quads_BuildRetry ((M2LexBuf_GetTokenNo ())-1);
7273 168 : }
7274 :
7275 :
7276 : /*
7277 : AssignmentOrProcedureCall :=
7278 : % VAR isFunc: BOOLEAN ;
7279 : tokno : CARDINAL ; %
7280 :
7281 : % DisplayStack %
7282 : Designator
7283 : % tokno := GetTokenNo () %
7284 : ( ':='
7285 : % PrintTokenNo (tokno) %
7286 : Expression
7287 : % BuildAssignment (tokno) %
7288 : |
7289 :
7290 : % isFunc := CheckBuildFunction() %
7291 : ( ActualParameters |
7292 :
7293 : % BuildNulParam in epsilon %
7294 : )
7295 : % IF isFunc
7296 : THEN
7297 : BuildFunctionCall (FALSE) ;
7298 : BuildAssignment (tokno)
7299 : ELSE
7300 : BuildProcedureCall (tokno - 1)
7301 : END %
7302 : )
7303 : % DisplayStack %
7304 :
7305 :
7306 : first symbols:identtok
7307 :
7308 : cannot reachend
7309 : */
7310 :
7311 208193 : static void AssignmentOrProcedureCall (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7312 : {
7313 208193 : bool isFunc;
7314 208193 : unsigned int tokno;
7315 :
7316 208193 : M2Quads_DisplayStack ();
7317 208193 : Designator (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_becomestok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
7318 208178 : tokno = M2LexBuf_GetTokenNo ();
7319 208178 : if (M2LexBuf_currenttoken == M2Reserved_becomestok)
7320 : {
7321 98213 : Expect (M2Reserved_becomestok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7322 : /* PrintTokenNo (tokno) */
7323 98213 : Expression (stopset0, stopset1, stopset2);
7324 98081 : M2Quads_BuildAssignment (tokno);
7325 : }
7326 : else
7327 : {
7328 109965 : isFunc = M2Quads_CheckBuildFunction ();
7329 109965 : if (M2LexBuf_currenttoken == M2Reserved_lparatok)
7330 : {
7331 94510 : ActualParameters (stopset0, stopset1, stopset2);
7332 : }
7333 : else
7334 : {
7335 15455 : M2Quads_BuildNulParam (); /* in epsilon */
7336 : }
7337 109965 : if (isFunc)
7338 : {
7339 0 : M2Quads_BuildFunctionCall (false);
7340 0 : M2Quads_BuildAssignment (tokno);
7341 : }
7342 : else
7343 : {
7344 109965 : M2Quads_BuildProcedureCall (tokno-1);
7345 : }
7346 : }
7347 208034 : M2Quads_DisplayStack ();
7348 208034 : }
7349 :
7350 :
7351 : /*
7352 : StatementSequence := Statement { ';' Statement }
7353 :
7354 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
7355 :
7356 : reachend
7357 : */
7358 :
7359 137416 : static void StatementSequence (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7360 : {
7361 137416 : Statement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
7362 442516 : while (M2LexBuf_currenttoken == M2Reserved_semicolontok)
7363 : {
7364 167864 : Expect (M2Reserved_semicolontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7365 167864 : Statement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
7366 : }
7367 : /* while */
7368 137236 : }
7369 :
7370 :
7371 : /*
7372 : IfStatement := 'IF' Expression 'THEN'
7373 : % BuildThenIf %
7374 :
7375 : % BuildStmtNote (-1) %
7376 : StatementSequence { 'ELSIF'
7377 : % BuildElsif1 %
7378 :
7379 : % BuildStmtNote (-1) %
7380 : Expression 'THEN'
7381 :
7382 : % BuildThenIf %
7383 :
7384 : % BuildStmtNote (-1) %
7385 : StatementSequence
7386 :
7387 : % BuildElsif2 %
7388 : } [ 'ELSE'
7389 : % BuildElse %
7390 :
7391 : % BuildStmtNote (-1) %
7392 : StatementSequence ]
7393 : 'END'
7394 : % BuildEndIf %
7395 :
7396 : % BuildStmtNote (-1) %
7397 :
7398 :
7399 : first symbols:iftok
7400 :
7401 : cannot reachend
7402 : */
7403 :
7404 42535 : static void IfStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7405 : {
7406 42535 : Expect (M2Reserved_iftok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7407 42535 : Expression (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_thentok-M2Reserved_unqualifiedtok))));
7408 42526 : Expect (M2Reserved_thentok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7409 42526 : M2Quads_BuildThenIf ();
7410 42526 : M2Quads_BuildStmtNote (-1);
7411 42526 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_elsiftok-M2Reserved_arraytok)) | (1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7412 88406 : while (M2LexBuf_currenttoken == M2Reserved_elsiftok)
7413 : {
7414 3354 : Expect (M2Reserved_elsiftok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7415 3354 : M2Quads_BuildElsif1 ();
7416 3354 : M2Quads_BuildStmtNote (-1);
7417 3354 : Expression (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_thentok-M2Reserved_unqualifiedtok))));
7418 3354 : Expect (M2Reserved_thentok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7419 3354 : M2Quads_BuildThenIf ();
7420 3354 : M2Quads_BuildStmtNote (-1);
7421 3354 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_elsiftok-M2Reserved_arraytok))), stopset2);
7422 3354 : M2Quads_BuildElsif2 ();
7423 : }
7424 : /* while */
7425 42526 : if (M2LexBuf_currenttoken == M2Reserved_elsetok)
7426 : {
7427 15395 : Expect (M2Reserved_elsetok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7428 15395 : M2Quads_BuildElse ();
7429 15395 : M2Quads_BuildStmtNote (-1);
7430 15395 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7431 : }
7432 42526 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
7433 42526 : M2Quads_BuildEndIf ();
7434 42526 : M2Quads_BuildStmtNote (-1);
7435 42526 : }
7436 :
7437 :
7438 : /*
7439 : CaseStatement := 'CASE' Expression
7440 : % BuildCaseStart %
7441 : 'OF' Case { '|' Case } CaseEndStatement
7442 :
7443 : first symbols:casetok
7444 :
7445 : cannot reachend
7446 : */
7447 :
7448 1015 : static void CaseStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7449 : {
7450 1015 : Expect (M2Reserved_casetok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7451 1015 : Expression (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2);
7452 1015 : M2Quads_BuildCaseStart ();
7453 1015 : Expect (M2Reserved_oftok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
7454 1015 : Case (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_bartok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7455 5096 : while (M2LexBuf_currenttoken == M2Reserved_bartok)
7456 : {
7457 3066 : Expect (M2Reserved_bartok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_elsetok-M2Reserved_arraytok)) | (1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
7458 3066 : Case (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_bartok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_elsetok-M2Reserved_arraytok))), stopset2);
7459 : }
7460 : /* while */
7461 1015 : CaseEndStatement (stopset0, stopset1, stopset2);
7462 1015 : }
7463 :
7464 :
7465 : /*
7466 : CaseEndStatement := 'END'
7467 : % BuildStmtNote (-1) %
7468 :
7469 : % BuildCaseElse %
7470 :
7471 : % BuildCaseCheck %
7472 :
7473 : % BuildCaseEnd %
7474 : | 'ELSE'
7475 : % BuildStmtNote (-1) %
7476 :
7477 : % BuildCaseElse %
7478 :
7479 : % ElseCase (NulSym) %
7480 : StatementSequence
7481 : % BuildStmtNote (0) %
7482 : 'END'
7483 : % BuildCaseEnd %
7484 :
7485 :
7486 : first symbols:elsetok, endtok
7487 :
7488 : cannot reachend
7489 : */
7490 :
7491 1015 : static void CaseEndStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7492 : {
7493 1015 : if (M2LexBuf_currenttoken == M2Reserved_endtok)
7494 : {
7495 497 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
7496 497 : M2Quads_BuildStmtNote (-1);
7497 497 : M2Quads_BuildCaseElse ();
7498 497 : M2Quads_BuildCaseCheck ();
7499 497 : M2Quads_BuildCaseEnd ();
7500 : }
7501 518 : else if (M2LexBuf_currenttoken == M2Reserved_elsetok)
7502 : {
7503 : /* avoid dangling else. */
7504 518 : Expect (M2Reserved_elsetok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7505 518 : M2Quads_BuildStmtNote (-1);
7506 518 : M2Quads_BuildCaseElse ();
7507 518 : M2CaseList_ElseCase (SymbolTable_NulSym);
7508 518 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7509 518 : M2Quads_BuildStmtNote (0);
7510 518 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
7511 518 : M2Quads_BuildCaseEnd ();
7512 : }
7513 : else
7514 : {
7515 : /* avoid dangling else. */
7516 0 : ErrorArray ((const char *) "expecting one of: {%KELSE} {%KEND}", 34);
7517 : }
7518 1015 : }
7519 :
7520 :
7521 : /*
7522 : Case := [
7523 : % BuildStmtNote (-1) %
7524 : CaseLabelList
7525 : % BuildCaseStartStatementSequence %
7526 : ':' StatementSequence
7527 : % BuildCaseEndStatementSequence %
7528 :
7529 : % EndCaseList %
7530 : ]
7531 :
7532 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
7533 :
7534 : reachend
7535 : */
7536 :
7537 4081 : static void Case (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7538 : {
7539 4081 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
7540 : {
7541 3993 : M2Quads_BuildStmtNote (-1);
7542 3993 : CaseLabelList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
7543 3993 : M2Quads_BuildCaseStartStatementSequence ();
7544 3993 : Expect (M2Reserved_colontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7545 3993 : StatementSequence (stopset0, stopset1, stopset2);
7546 3993 : M2Quads_BuildCaseEndStatementSequence ();
7547 3993 : M2CaseList_EndCaseList ();
7548 : }
7549 4081 : }
7550 :
7551 :
7552 : /*
7553 : CaseLabelList :=
7554 : % BeginCaseList(NulSym) %
7555 : CaseLabels { ','
7556 : % BuildCaseOr %
7557 : CaseLabels }
7558 :
7559 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
7560 :
7561 : cannot reachend
7562 : */
7563 :
7564 3993 : static void CaseLabelList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7565 : {
7566 3993 : M2CaseList_BeginCaseList (SymbolTable_NulSym);
7567 3993 : CaseLabels (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
7568 8036 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
7569 : {
7570 50 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
7571 50 : M2Quads_BuildCaseOr ();
7572 50 : CaseLabels (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
7573 : }
7574 : /* while */
7575 3993 : }
7576 :
7577 :
7578 : /*
7579 : CaseLabels := ConstExpression ( '..' ConstExpression
7580 :
7581 : % BuildCaseRange ;
7582 : BuildCaseList %
7583 : |
7584 :
7585 : % BuildCaseEquality ; epsilon
7586 : BuildCaseList %
7587 : )
7588 :
7589 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
7590 :
7591 : cannot reachend
7592 : */
7593 :
7594 4043 : static void CaseLabels (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7595 : {
7596 4043 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodperiodtok-M2Reserved_eoftok))), stopset1, stopset2);
7597 4043 : if (M2LexBuf_currenttoken == M2Reserved_periodperiodtok)
7598 : {
7599 174 : Expect (M2Reserved_periodperiodtok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
7600 174 : ConstExpression (stopset0, stopset1, stopset2);
7601 174 : M2Quads_BuildCaseRange ();
7602 174 : M2Quads_BuildCaseList ();
7603 : }
7604 : else
7605 : {
7606 3869 : M2Quads_BuildCaseEquality (); /* epsilon */
7607 3869 : M2Quads_BuildCaseList (); /* epsilon */
7608 : }
7609 4043 : }
7610 :
7611 :
7612 : /*
7613 : WhileStatement := 'WHILE'
7614 : % BuildWhile %
7615 :
7616 : % BuildStmtNote (0) %
7617 : Expression
7618 : % BuildStmtNote (0) %
7619 : 'DO'
7620 : % BuildDoWhile %
7621 : StatementSequence
7622 : % BuildStmtNote (0) %
7623 : 'END'
7624 : % DisplayStack ; BuildEndWhile (-1) %
7625 :
7626 :
7627 : first symbols:whiletok
7628 :
7629 : cannot reachend
7630 : */
7631 :
7632 8101 : static void WhileStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7633 : {
7634 8101 : Expect (M2Reserved_whiletok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7635 8101 : M2Quads_BuildWhile ();
7636 8101 : M2Quads_BuildStmtNote (0);
7637 8101 : Expression (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_dotok-M2Reserved_arraytok))), stopset2);
7638 8101 : M2Quads_BuildStmtNote (0);
7639 8101 : Expect (M2Reserved_dotok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7640 8101 : M2Quads_BuildDoWhile ();
7641 8101 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7642 8101 : M2Quads_BuildStmtNote (0);
7643 8101 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
7644 8101 : M2Quads_DisplayStack ();
7645 8101 : M2Quads_BuildEndWhile (-1);
7646 8101 : }
7647 :
7648 :
7649 : /*
7650 : RepeatStatement := 'REPEAT'
7651 : % BuildRepeat %
7652 : StatementSequence
7653 : % BuildStmtNote (0) %
7654 : 'UNTIL' Expression
7655 : % BuildUntil %
7656 :
7657 :
7658 : first symbols:repeattok
7659 :
7660 : cannot reachend
7661 : */
7662 :
7663 1463 : static void RepeatStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7664 : {
7665 1463 : Expect (M2Reserved_repeattok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7666 1463 : M2Quads_BuildRepeat ();
7667 1463 : StatementSequence (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_untiltok-M2Reserved_unqualifiedtok))));
7668 1463 : M2Quads_BuildStmtNote (0);
7669 1463 : Expect (M2Reserved_untiltok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7670 1463 : Expression (stopset0, stopset1, stopset2);
7671 1463 : M2Quads_BuildUntil ();
7672 1463 : }
7673 :
7674 :
7675 : /*
7676 : ForStatement :=
7677 : % VAR endpostok: CARDINAL ; %
7678 :
7679 : % PushLineNo %
7680 : 'FOR' Ident ':=' Expression 'TO'
7681 : Expression ( 'BY' ConstExpression |
7682 :
7683 : % BuildPseudoBy epsilon %
7684 : )
7685 : % PushLineNo %
7686 :
7687 : % BuildStmtNote (0) %
7688 : 'DO'
7689 : % BuildForToByDo %
7690 : StatementSequence
7691 : % BuildStmtNote (0) %
7692 :
7693 : % endpostok := GetTokenNo () %
7694 : 'END'
7695 : % BuildEndFor (endpostok) %
7696 :
7697 :
7698 : first symbols:fortok
7699 :
7700 : cannot reachend
7701 : */
7702 :
7703 2644 : static void ForStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7704 : {
7705 2644 : unsigned int endpostok;
7706 :
7707 2644 : M2Quads_PushLineNo ();
7708 2644 : Expect (M2Reserved_fortok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7709 2644 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_becomestok-M2Reserved_eoftok))), stopset1, stopset2);
7710 2644 : Expect (M2Reserved_becomestok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7711 2644 : Expression (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_totok-M2Reserved_unqualifiedtok))));
7712 2644 : Expect (M2Reserved_totok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7713 2644 : Expression (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_bytok-M2Reserved_arraytok)) | (1 << (M2Reserved_dotok-M2Reserved_arraytok))), stopset2);
7714 2644 : if (M2LexBuf_currenttoken == M2Reserved_bytok)
7715 : {
7716 366 : Expect (M2Reserved_bytok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
7717 366 : ConstExpression (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_dotok-M2Reserved_arraytok))), stopset2);
7718 : }
7719 : else
7720 : {
7721 2278 : M2Quads_BuildPseudoBy (); /* epsilon */
7722 : }
7723 2644 : M2Quads_PushLineNo ();
7724 2644 : M2Quads_BuildStmtNote (0);
7725 2644 : Expect (M2Reserved_dotok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7726 2644 : M2Quads_BuildForToByDo ();
7727 2638 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7728 2638 : M2Quads_BuildStmtNote (0);
7729 2638 : endpostok = M2LexBuf_GetTokenNo ();
7730 2638 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
7731 2638 : M2Quads_BuildEndFor (endpostok);
7732 2638 : }
7733 :
7734 :
7735 : /*
7736 : LoopStatement := 'LOOP'
7737 : % BuildLoop %
7738 : StatementSequence
7739 : % BuildStmtNote (0) %
7740 : 'END'
7741 : % BuildEndLoop %
7742 :
7743 :
7744 : first symbols:looptok
7745 :
7746 : cannot reachend
7747 : */
7748 :
7749 523 : static void LoopStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7750 : {
7751 523 : Expect (M2Reserved_looptok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7752 523 : M2Quads_BuildLoop ();
7753 523 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7754 523 : M2Quads_BuildStmtNote (0);
7755 523 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
7756 523 : M2Quads_BuildEndLoop ();
7757 523 : }
7758 :
7759 :
7760 : /*
7761 : WithStatement :=
7762 : % VAR
7763 : tok: CARDINAL ; %
7764 : 'WITH'
7765 : % tok := GetTokenNo () -1 %
7766 : Designator
7767 : % StartBuildWith (tok) %
7768 :
7769 : % BuildStmtNote (0) %
7770 : 'DO' StatementSequence
7771 : % BuildStmtNote (0) %
7772 : 'END'
7773 : % EndBuildWith %
7774 :
7775 :
7776 : first symbols:withtok
7777 :
7778 : cannot reachend
7779 : */
7780 :
7781 6421 : static void WithStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7782 : {
7783 6421 : unsigned int tok;
7784 :
7785 6421 : Expect (M2Reserved_withtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7786 6421 : tok = (M2LexBuf_GetTokenNo ())-1;
7787 6421 : Designator (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_dotok-M2Reserved_arraytok))), stopset2);
7788 6421 : M2Quads_StartBuildWith (tok);
7789 6415 : M2Quads_BuildStmtNote (0);
7790 6415 : Expect (M2Reserved_dotok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
7791 6415 : StatementSequence (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
7792 6415 : M2Quads_BuildStmtNote (0);
7793 6415 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
7794 6415 : M2Quads_EndBuildWith ();
7795 6415 : }
7796 :
7797 :
7798 : /*
7799 : ProcedureDeclaration :=
7800 : % VAR top: CARDINAL ; %
7801 :
7802 : % top := Top () %
7803 : ProcedureHeading ';' PostProcedureHeading
7804 :
7805 : % Assert (top = Top ()) %
7806 :
7807 :
7808 : first symbols:proceduretok
7809 :
7810 : cannot reachend
7811 : */
7812 :
7813 39833 : static void ProcedureDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7814 : {
7815 39833 : unsigned int top;
7816 :
7817 39833 : top = M2Quads_Top ();
7818 39833 : ProcedureHeading (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
7819 39833 : Expect (M2Reserved_semicolontok, stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
7820 39833 : PostProcedureHeading (stopset0, stopset1, stopset2);
7821 39789 : M2Debug_Assert (top == (M2Quads_Top ()));
7822 39789 : }
7823 :
7824 :
7825 : /*
7826 : PostProcedureHeading := ProperProcedure |
7827 : ForwardDeclaration
7828 :
7829 : first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok, forwardtok
7830 :
7831 : cannot reachend
7832 : */
7833 :
7834 39833 : static void PostProcedureHeading (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7835 : {
7836 39833 : if ((((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_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)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))))) != 0))))
7837 : {
7838 39809 : ProperProcedure (stopset0, stopset1, stopset2);
7839 : }
7840 24 : else if (M2LexBuf_currenttoken == M2Reserved_forwardtok)
7841 : {
7842 : /* avoid dangling else. */
7843 48 : ForwardDeclaration (stopset0, stopset1, stopset2);
7844 : }
7845 : else
7846 : {
7847 : /* avoid dangling else. */
7848 0 : ErrorArray ((const char *) "expecting one of: {%KFORWARD} {%KEND} {%KBEGIN} {%KCONST} {%KTYPE} {%KVAR} {%KPROCEDURE} {%KMODULE}", 99);
7849 : }
7850 39789 : }
7851 :
7852 :
7853 : /*
7854 : ForwardDeclaration := 'FORWARD'
7855 : % EndBuildForward %
7856 :
7857 :
7858 : first symbols:forwardtok
7859 :
7860 : cannot reachend
7861 : */
7862 :
7863 24 : static void ForwardDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7864 : {
7865 24 : Expect (M2Reserved_forwardtok, stopset0, stopset1, stopset2);
7866 24 : P3SymBuild_EndBuildForward ();
7867 24 : }
7868 :
7869 :
7870 : /*
7871 : ProperProcedure := ProcedureBlock
7872 : % BuildProcedureEnd ;
7873 : PushAutoOn %
7874 : Ident
7875 : % EndBuildProcedure ;
7876 : PopAuto %
7877 :
7878 :
7879 : first symbols:moduletok, proceduretok, vartok, typetok, consttok, begintok, endtok
7880 :
7881 : cannot reachend
7882 : */
7883 :
7884 39809 : static void ProperProcedure (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7885 : {
7886 39809 : ProcedureBlock (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7887 39765 : M2Quads_BuildProcedureEnd ();
7888 39765 : M2Quads_PushAutoOn ();
7889 39765 : Ident (stopset0, stopset1, stopset2);
7890 39765 : P3SymBuild_EndBuildProcedure ();
7891 39765 : M2Quads_PopAuto ();
7892 39765 : }
7893 :
7894 :
7895 : /*
7896 : DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
7897 : '(' '('
7898 : % PushAutoOff %
7899 : Ident
7900 : % PopAuto %
7901 : ')' ')' |
7902 : '__INLINE__' ]
7903 :
7904 : first symbols:inlinetok, attributetok
7905 :
7906 : reachend
7907 : */
7908 :
7909 39833 : static void DefineBuiltinProcedure (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7910 : {
7911 39833 : if ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_inlinetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_attributetok-M2Reserved_unqualifiedtok))))) != 0)))
7912 : {
7913 : /* avoid gcc warning by using compound statement even if not strictly necessary. */
7914 : /* seen optional [ | ] expression */
7915 4540 : if (M2LexBuf_currenttoken == M2Reserved_attributetok)
7916 : {
7917 4540 : Expect (M2Reserved_attributetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_builtintok-M2Reserved_unqualifiedtok))));
7918 4540 : Expect (M2Reserved_builtintok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
7919 4540 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
7920 4540 : Expect (M2Reserved_lparatok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7921 4540 : M2Quads_PushAutoOff ();
7922 4540 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
7923 4540 : M2Quads_PopAuto ();
7924 4540 : Expect (M2Reserved_rparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
7925 4540 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
7926 : }
7927 0 : else if (M2LexBuf_currenttoken == M2Reserved_inlinetok)
7928 : {
7929 : /* avoid dangling else. */
7930 0 : Expect (M2Reserved_inlinetok, stopset0, stopset1, stopset2);
7931 : }
7932 : else
7933 : {
7934 : /* avoid dangling else. */
7935 0 : ErrorArray ((const char *) "expecting one of: {%K__INLINE__} {%K__ATTRIBUTE__}", 50);
7936 : }
7937 : }
7938 : /* end of optional [ | ] expression */
7939 39833 : }
7940 :
7941 :
7942 : /*
7943 : ProcedureHeading := 'PROCEDURE'
7944 : % M2Error.DefaultProcedure %
7945 :
7946 : % PushAutoOn %
7947 : DefineBuiltinProcedure ( Ident
7948 :
7949 : % StartBuildProcedure ;
7950 : PushAutoOff %
7951 : [ FormalParameters ]
7952 : AttributeNoReturn
7953 :
7954 : % BuildProcedureHeading ;
7955 : PopAuto %
7956 : )
7957 :
7958 : % PopAuto %
7959 :
7960 :
7961 : first symbols:proceduretok
7962 :
7963 : cannot reachend
7964 : */
7965 :
7966 39833 : static void ProcedureHeading (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7967 : {
7968 39833 : Expect (M2Reserved_proceduretok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_inlinetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_attributetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7969 39833 : M2Error_DefaultProcedure ();
7970 39833 : M2Quads_PushAutoOn ();
7971 39833 : DefineBuiltinProcedure (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
7972 39833 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
7973 39833 : P3SymBuild_StartBuildProcedure ();
7974 39833 : M2Quads_PushAutoOff ();
7975 39833 : if (M2LexBuf_currenttoken == M2Reserved_lparatok)
7976 : {
7977 34138 : FormalParameters (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
7978 : }
7979 39833 : AttributeNoReturn (stopset0, stopset1, stopset2);
7980 39833 : P3SymBuild_BuildProcedureHeading ();
7981 39833 : M2Quads_PopAuto ();
7982 39833 : M2Quads_PopAuto ();
7983 39833 : }
7984 :
7985 :
7986 : /*
7987 : Builtin := [ '__BUILTIN__' | '__INLINE__' ]
7988 :
7989 : first symbols:inlinetok, builtintok
7990 :
7991 : reachend
7992 : */
7993 :
7994 3379679 : static void Builtin (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
7995 : {
7996 3379679 : if ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_inlinetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_builtintok-M2Reserved_unqualifiedtok))))) != 0)))
7997 : {
7998 : /* avoid gcc warning by using compound statement even if not strictly necessary. */
7999 : /* seen optional [ | ] expression */
8000 448680 : if (M2LexBuf_currenttoken == M2Reserved_builtintok)
8001 : {
8002 448680 : Expect (M2Reserved_builtintok, stopset0, stopset1, stopset2);
8003 : }
8004 0 : else if (M2LexBuf_currenttoken == M2Reserved_inlinetok)
8005 : {
8006 : /* avoid dangling else. */
8007 0 : Expect (M2Reserved_inlinetok, stopset0, stopset1, stopset2);
8008 : }
8009 : else
8010 : {
8011 : /* avoid dangling else. */
8012 0 : ErrorArray ((const char *) "expecting one of: {%K__INLINE__} {%K__BUILTIN__}", 48);
8013 : }
8014 : }
8015 : /* end of optional [ | ] expression */
8016 3379679 : }
8017 :
8018 :
8019 : /*
8020 : DefProcedureHeading := 'PROCEDURE'
8021 : % M2Error.DefaultProcedure %
8022 :
8023 : % PushAutoOn %
8024 : Builtin ( Ident
8025 : % StartBuildProcedure ;
8026 : PushAutoOff %
8027 : [ DefFormalParameters ]
8028 : AttributeNoReturn
8029 :
8030 : % BuildProcedureHeading ;
8031 : PopAuto %
8032 : )
8033 : % PopAuto %
8034 :
8035 : % M2Error.LeaveErrorScope %
8036 :
8037 :
8038 : first symbols:proceduretok
8039 :
8040 : cannot reachend
8041 : */
8042 :
8043 3379679 : static void DefProcedureHeading (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8044 : {
8045 3379679 : Expect (M2Reserved_proceduretok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_inlinetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_builtintok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8046 3379679 : M2Error_DefaultProcedure ();
8047 3379679 : M2Quads_PushAutoOn ();
8048 3379679 : Builtin (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8049 3379679 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
8050 3379679 : P3SymBuild_StartBuildProcedure ();
8051 3379679 : M2Quads_PushAutoOff ();
8052 3379679 : if (M2LexBuf_currenttoken == M2Reserved_lparatok)
8053 : {
8054 3269797 : DefFormalParameters (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
8055 : }
8056 3379679 : AttributeNoReturn (stopset0, stopset1, stopset2);
8057 3379679 : P3SymBuild_BuildProcedureHeading ();
8058 3379679 : M2Quads_PopAuto ();
8059 3379679 : M2Quads_PopAuto ();
8060 3379679 : M2Error_LeaveErrorScope ();
8061 3379679 : }
8062 :
8063 :
8064 : /*
8065 : AttributeNoReturn := [ '' ]
8066 :
8067 : first symbols:ldirectivetok
8068 :
8069 : reachend
8070 : */
8071 :
8072 3419512 : static void AttributeNoReturn (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8073 : {
8074 3419512 : if (M2LexBuf_currenttoken == M2Reserved_ldirectivetok)
8075 : {
8076 476433 : Expect (M2Reserved_ldirectivetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8077 476433 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rdirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
8078 476433 : Expect (M2Reserved_rdirectivetok, stopset0, stopset1, stopset2);
8079 : }
8080 3419512 : }
8081 :
8082 :
8083 : /*
8084 : AttributeUnused := [ '' ]
8085 :
8086 : first symbols:ldirectivetok
8087 :
8088 : reachend
8089 : */
8090 :
8091 0 : static void AttributeUnused (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8092 : {
8093 0 : if (M2LexBuf_currenttoken == M2Reserved_ldirectivetok)
8094 : {
8095 0 : Expect (M2Reserved_ldirectivetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8096 0 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rdirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
8097 0 : Expect (M2Reserved_rdirectivetok, stopset0, stopset1, stopset2);
8098 : }
8099 0 : }
8100 :
8101 :
8102 : /*
8103 : ProcedureBlock :=
8104 : % BuildProcedureStart %
8105 : { Declaration }
8106 : % BuildProcedureBegin %
8107 : [ 'BEGIN'
8108 : % BuildStmtNote (-1) %
8109 : ProcedureBlockBody ]
8110 : % BuildStmtNote (0) %
8111 : 'END'
8112 :
8113 : first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
8114 :
8115 : cannot reachend
8116 : */
8117 :
8118 39809 : static void ProcedureBlock (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8119 : {
8120 39809 : M2Quads_BuildProcedureStart ();
8121 97682 : while ((((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_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)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))))) != 0))))
8122 : {
8123 18076 : Declaration (stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8124 : }
8125 : /* while */
8126 39797 : M2Quads_BuildProcedureBegin ();
8127 39797 : if (M2LexBuf_currenttoken == M2Reserved_begintok)
8128 : {
8129 39687 : Expect (M2Reserved_begintok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
8130 39687 : M2Quads_BuildStmtNote (-1);
8131 39687 : ProcedureBlockBody (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
8132 : }
8133 39765 : M2Quads_BuildStmtNote (0);
8134 39765 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
8135 39765 : }
8136 :
8137 :
8138 : /*
8139 : Block := { Declaration }
8140 : % StartBuildInit (GetTokenNo ()) %
8141 : InitialBlock
8142 : % EndBuildInit (GetTokenNo ()) ;
8143 : StartBuildFinally (GetTokenNo ()) %
8144 : FinalBlock
8145 : % EndBuildFinally (GetTokenNo ()) %
8146 : 'END'
8147 :
8148 : first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
8149 :
8150 : cannot reachend
8151 : */
8152 :
8153 16545 : static void Block (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8154 : {
8155 72773 : while ((((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_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)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))))) != 0))))
8156 : {
8157 56284 : Declaration (stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8158 : }
8159 : /* while */
8160 16489 : M2Quads_StartBuildInit (M2LexBuf_GetTokenNo ());
8161 16483 : InitialBlock (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_finallytok-M2Reserved_arraytok))), stopset2);
8162 16335 : M2Quads_EndBuildInit (M2LexBuf_GetTokenNo ());
8163 16335 : M2Quads_StartBuildFinally (M2LexBuf_GetTokenNo ());
8164 16329 : FinalBlock (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok))), stopset2);
8165 16329 : M2Quads_EndBuildFinally (M2LexBuf_GetTokenNo ());
8166 16329 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2);
8167 16329 : }
8168 :
8169 :
8170 : /*
8171 : InitialBlock := [ 'BEGIN'
8172 : % BuildStmtNote (-1) %
8173 : InitialBlockBody ]
8174 :
8175 : first symbols:begintok
8176 :
8177 : reachend
8178 : */
8179 :
8180 16483 : static void InitialBlock (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8181 : {
8182 16483 : if (M2LexBuf_currenttoken == M2Reserved_begintok)
8183 : {
8184 12503 : Expect (M2Reserved_begintok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
8185 12503 : M2Quads_BuildStmtNote (-1);
8186 12503 : InitialBlockBody (stopset0, stopset1, stopset2);
8187 : }
8188 16335 : }
8189 :
8190 :
8191 : /*
8192 : FinalBlock := [ 'FINALLY'
8193 : % BuildStmtNote (-1) %
8194 : FinalBlockBody ]
8195 :
8196 : first symbols:finallytok
8197 :
8198 : reachend
8199 : */
8200 :
8201 16329 : static void FinalBlock (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8202 : {
8203 16329 : if (M2LexBuf_currenttoken == M2Reserved_finallytok)
8204 : {
8205 78 : Expect (M2Reserved_finallytok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
8206 78 : M2Quads_BuildStmtNote (-1);
8207 78 : FinalBlockBody (stopset0, stopset1, stopset2);
8208 : }
8209 16329 : }
8210 :
8211 :
8212 : /*
8213 : InitialBlockBody := NormalPart [ 'EXCEPT'
8214 : % BuildStmtNote (-1) %
8215 :
8216 : % BuildExceptInitial (GetTokenNo() -1) %
8217 : ExceptionalPart ]
8218 :
8219 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
8220 :
8221 : reachend
8222 : */
8223 :
8224 12503 : static void InitialBlockBody (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8225 : {
8226 24858 : NormalPart (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_excepttok-M2Reserved_arraytok))), stopset2);
8227 12355 : if (M2LexBuf_currenttoken == M2Reserved_excepttok)
8228 : {
8229 54 : Expect (M2Reserved_excepttok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
8230 54 : M2Quads_BuildStmtNote (-1);
8231 54 : M2Quads_BuildExceptInitial ((M2LexBuf_GetTokenNo ())-1);
8232 54 : ExceptionalPart (stopset0, stopset1, stopset2);
8233 : }
8234 12355 : }
8235 :
8236 :
8237 : /*
8238 : FinalBlockBody := NormalPart [ 'EXCEPT'
8239 : % BuildStmtNote (-1) %
8240 :
8241 : % BuildExceptFinally (GetTokenNo() -1) %
8242 : ExceptionalPart ]
8243 :
8244 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
8245 :
8246 : reachend
8247 : */
8248 :
8249 78 : static void FinalBlockBody (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8250 : {
8251 156 : NormalPart (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_excepttok-M2Reserved_arraytok))), stopset2);
8252 78 : if (M2LexBuf_currenttoken == M2Reserved_excepttok)
8253 : {
8254 0 : Expect (M2Reserved_excepttok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
8255 0 : M2Quads_BuildStmtNote (-1);
8256 0 : M2Quads_BuildExceptFinally ((M2LexBuf_GetTokenNo ())-1);
8257 0 : ExceptionalPart (stopset0, stopset1, stopset2);
8258 : }
8259 78 : }
8260 :
8261 :
8262 : /*
8263 : ProcedureBlockBody := NormalPart [ 'EXCEPT'
8264 : % BuildStmtNote (-1) %
8265 :
8266 : % BuildExceptProcedure (GetTokenNo() -1) %
8267 : ExceptionalPart ]
8268 :
8269 : first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
8270 :
8271 : reachend
8272 : */
8273 :
8274 39687 : static void ProcedureBlockBody (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8275 : {
8276 79342 : NormalPart (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_excepttok-M2Reserved_arraytok))), stopset2);
8277 39655 : if (M2LexBuf_currenttoken == M2Reserved_excepttok)
8278 : {
8279 168 : Expect (M2Reserved_excepttok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_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))));
8280 168 : M2Quads_BuildStmtNote (-1);
8281 168 : M2Quads_BuildExceptProcedure ((M2LexBuf_GetTokenNo ())-1);
8282 168 : ExceptionalPart (stopset0, stopset1, stopset2);
8283 : }
8284 39655 : }
8285 :
8286 :
8287 : /*
8288 : NormalPart := StatementSequence
8289 :
8290 : first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
8291 :
8292 : reachend
8293 : */
8294 :
8295 52268 : static void NormalPart (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8296 : {
8297 52268 : StatementSequence (stopset0, stopset1, stopset2);
8298 0 : }
8299 :
8300 :
8301 : /*
8302 : ExceptionalPart := StatementSequence
8303 : % BuildReThrow (GetTokenNo()) %
8304 :
8305 :
8306 : first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
8307 :
8308 : reachend
8309 : */
8310 :
8311 222 : static void ExceptionalPart (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8312 : {
8313 222 : StatementSequence (stopset0, stopset1, stopset2);
8314 222 : M2Quads_BuildReThrow (M2LexBuf_GetTokenNo ());
8315 222 : }
8316 :
8317 :
8318 : /*
8319 : Declaration := 'CONST' { ConstantDeclaration ';' } |
8320 : 'TYPE' { TypeDeclaration ';' } |
8321 : 'VAR' { VariableDeclaration ';' } |
8322 : ProcedureDeclaration ';' |
8323 : ModuleDeclaration ';'
8324 :
8325 : first symbols:moduletok, proceduretok, vartok, typetok, consttok
8326 :
8327 : cannot reachend
8328 : */
8329 :
8330 74360 : static void Declaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8331 : {
8332 74360 : if (M2LexBuf_currenttoken == M2Reserved_consttok)
8333 : {
8334 2790 : Expect (M2Reserved_consttok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8335 11003 : while (M2LexBuf_currenttoken == M2Reserved_identtok)
8336 : {
8337 5423 : ConstantDeclaration (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8338 5423 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8339 : }
8340 : /* while */
8341 : }
8342 : else if (M2LexBuf_currenttoken == M2Reserved_typetok)
8343 : {
8344 : /* avoid dangling else. */
8345 4499 : Expect (M2Reserved_typetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8346 17032 : while (M2LexBuf_currenttoken == M2Reserved_identtok)
8347 : {
8348 8040 : TypeDeclaration (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8349 8034 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8350 : }
8351 : /* while */
8352 : }
8353 : else if (M2LexBuf_currenttoken == M2Reserved_vartok)
8354 : {
8355 : /* avoid dangling else. */
8356 26818 : Expect (M2Reserved_vartok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8357 97669 : while (M2LexBuf_currenttoken == M2Reserved_identtok)
8358 : {
8359 44051 : VariableDeclaration (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8360 44033 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8361 : }
8362 : /* while */
8363 : }
8364 : else if (M2LexBuf_currenttoken == M2Reserved_proceduretok)
8365 : {
8366 : /* avoid dangling else. */
8367 39833 : ProcedureDeclaration (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8368 39789 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2);
8369 : }
8370 : else if (M2LexBuf_currenttoken == M2Reserved_moduletok)
8371 : {
8372 : /* avoid dangling else. */
8373 420 : ModuleDeclaration (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8374 420 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2);
8375 : }
8376 : else
8377 : {
8378 : /* avoid dangling else. */
8379 0 : ErrorArray ((const char *) "expecting one of: {%KMODULE} {%KPROCEDURE} {%KVAR} {%KTYPE} {%KCONST}", 69);
8380 : }
8381 74292 : }
8382 :
8383 :
8384 : /*
8385 : DefFormalParameters := '(' [ DefMultiFPSection ]
8386 : ')' FormalReturn
8387 :
8388 : first symbols:lparatok
8389 :
8390 : cannot reachend
8391 : */
8392 :
8393 3269797 : static void DefFormalParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8394 : {
8395 3269797 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8396 3269797 : if ((M2LexBuf_currenttoken == M2Reserved_lsbratok) || ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))))) != 0))))
8397 : {
8398 3097887 : DefMultiFPSection (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
8399 : }
8400 3269797 : Expect (M2Reserved_rparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
8401 3269797 : FormalReturn (stopset0, stopset1, stopset2);
8402 3269797 : }
8403 :
8404 :
8405 : /*
8406 : DefMultiFPSection := DefExtendedFP |
8407 : FPSection [ ';' DefMultiFPSection ]
8408 :
8409 : first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
8410 :
8411 : cannot reachend
8412 : */
8413 :
8414 3097887 : static void DefMultiFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8415 : {
8416 5596674 : if ((M2LexBuf_currenttoken == M2Reserved_lsbratok) || (M2LexBuf_currenttoken == M2Reserved_periodperiodperiodtok))
8417 : {
8418 27103 : DefExtendedFP (stopset0, stopset1, stopset2);
8419 : }
8420 5569571 : else if ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))))) != 0)))
8421 : {
8422 : /* avoid dangling else. */
8423 5569571 : FPSection (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8424 5569571 : if (M2LexBuf_currenttoken == M2Reserved_semicolontok)
8425 : {
8426 2498787 : Expect (M2Reserved_semicolontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8427 2498787 : DefMultiFPSection (stopset0, stopset1, stopset2);
8428 : }
8429 : }
8430 : else
8431 : {
8432 : /* avoid dangling else. */
8433 0 : ErrorArray ((const char *) "expecting one of: {%Kidentifier} {%KVAR} {%K...} {%K[}", 54);
8434 : }
8435 3097887 : }
8436 :
8437 :
8438 : /*
8439 : FormalParameters := '(' [ MultiFPSection ] ')'
8440 : FormalReturn
8441 :
8442 : first symbols:lparatok
8443 :
8444 : cannot reachend
8445 : */
8446 :
8447 34138 : static void FormalParameters (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8448 : {
8449 34138 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8450 34138 : if ((M2LexBuf_currenttoken == M2Reserved_lsbratok) || ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))))) != 0))))
8451 : {
8452 32621 : MultiFPSection (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
8453 : }
8454 34138 : Expect (M2Reserved_rparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
8455 34138 : FormalReturn (stopset0, stopset1, stopset2);
8456 34138 : }
8457 :
8458 :
8459 : /*
8460 : MultiFPSection := ExtendedFP | FPSection [ ';'
8461 : MultiFPSection ]
8462 :
8463 : first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
8464 :
8465 : cannot reachend
8466 : */
8467 :
8468 32621 : static void MultiFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8469 : {
8470 56434 : if ((M2LexBuf_currenttoken == M2Reserved_lsbratok) || (M2LexBuf_currenttoken == M2Reserved_periodperiodperiodtok))
8471 : {
8472 54 : ExtendedFP (stopset0, stopset1, stopset2);
8473 : }
8474 56380 : else if ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))))) != 0)))
8475 : {
8476 : /* avoid dangling else. */
8477 56380 : FPSection (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8478 56380 : if (M2LexBuf_currenttoken == M2Reserved_semicolontok)
8479 : {
8480 23813 : Expect (M2Reserved_semicolontok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_periodperiodperiodtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8481 23813 : MultiFPSection (stopset0, stopset1, stopset2);
8482 : }
8483 : }
8484 : else
8485 : {
8486 : /* avoid dangling else. */
8487 0 : ErrorArray ((const char *) "expecting one of: {%Kidentifier} {%KVAR} {%K...} {%K[}", 54);
8488 : }
8489 32621 : }
8490 :
8491 :
8492 : /*
8493 : FPSection := NonVarFPSection |
8494 : VarFPSection
8495 :
8496 : first symbols:vartok, identtok
8497 :
8498 : cannot reachend
8499 : */
8500 :
8501 5625951 : static void FPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8502 : {
8503 5625951 : if (M2LexBuf_currenttoken == M2Reserved_identtok)
8504 : {
8505 5083115 : NonVarFPSection (stopset0, stopset1, stopset2);
8506 : }
8507 542836 : else if (M2LexBuf_currenttoken == M2Reserved_vartok)
8508 : {
8509 : /* avoid dangling else. */
8510 542836 : VarFPSection (stopset0, stopset1, stopset2);
8511 : }
8512 : else
8513 : {
8514 : /* avoid dangling else. */
8515 0 : ErrorArray ((const char *) "expecting one of: {%KVAR} {%Kidentifier}", 40);
8516 : }
8517 5625951 : }
8518 :
8519 :
8520 : /*
8521 : DefExtendedFP := DefOptArg | '...'
8522 :
8523 : first symbols:lsbratok, periodperiodperiodtok
8524 :
8525 : cannot reachend
8526 : */
8527 :
8528 27103 : static void DefExtendedFP (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8529 : {
8530 27103 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
8531 : {
8532 15651 : DefOptArg (stopset0, stopset1, stopset2);
8533 : }
8534 11452 : else if (M2LexBuf_currenttoken == M2Reserved_periodperiodperiodtok)
8535 : {
8536 : /* avoid dangling else. */
8537 11452 : Expect (M2Reserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
8538 : }
8539 : else
8540 : {
8541 : /* avoid dangling else. */
8542 0 : ErrorArray ((const char *) "expecting one of: {%K...} {%K[}", 31);
8543 : }
8544 27103 : }
8545 :
8546 :
8547 : /*
8548 : ExtendedFP := OptArg | '...'
8549 :
8550 : first symbols:lsbratok, periodperiodperiodtok
8551 :
8552 : cannot reachend
8553 : */
8554 :
8555 54 : static void ExtendedFP (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8556 : {
8557 54 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
8558 : {
8559 54 : OptArg (stopset0, stopset1, stopset2);
8560 : }
8561 0 : else if (M2LexBuf_currenttoken == M2Reserved_periodperiodperiodtok)
8562 : {
8563 : /* avoid dangling else. */
8564 0 : Expect (M2Reserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
8565 : }
8566 : else
8567 : {
8568 : /* avoid dangling else. */
8569 0 : ErrorArray ((const char *) "expecting one of: {%K...} {%K[}", 31);
8570 : }
8571 54 : }
8572 :
8573 :
8574 : /*
8575 : VarFPSection := 'VAR' IdentList ':' FormalType [
8576 : AttributeUnused ]
8577 :
8578 : first symbols:vartok
8579 :
8580 : cannot reachend
8581 : */
8582 :
8583 542836 : static void VarFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8584 : {
8585 542836 : Expect (M2Reserved_vartok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8586 542836 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
8587 542836 : Expect (M2Reserved_colontok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8588 542836 : FormalType (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
8589 542836 : if (M2LexBuf_currenttoken == M2Reserved_ldirectivetok)
8590 : {
8591 0 : AttributeUnused (stopset0, stopset1, stopset2);
8592 : }
8593 542836 : }
8594 :
8595 :
8596 : /*
8597 : NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
8598 :
8599 : first symbols:identtok
8600 :
8601 : cannot reachend
8602 : */
8603 :
8604 5083115 : static void NonVarFPSection (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8605 : {
8606 5083115 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
8607 5083115 : Expect (M2Reserved_colontok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8608 5083115 : FormalType (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok))), stopset1, stopset2);
8609 5083115 : if (M2LexBuf_currenttoken == M2Reserved_ldirectivetok)
8610 : {
8611 0 : AttributeUnused (stopset0, stopset1, stopset2);
8612 : }
8613 5083115 : }
8614 :
8615 :
8616 : /*
8617 : OptArg := '[' Ident ':' FormalType [ '=' ConstExpression
8618 :
8619 : % BuildOptArgInitializer %
8620 : ] ']'
8621 :
8622 : first symbols:lsbratok
8623 :
8624 : cannot reachend
8625 : */
8626 :
8627 54 : static void OptArg (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8628 : {
8629 54 : Expect (M2Reserved_lsbratok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8630 54 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
8631 54 : Expect (M2Reserved_colontok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8632 54 : FormalType (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_equaltok-M2Reserved_eoftok)) | (1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
8633 54 : if (M2LexBuf_currenttoken == M2Reserved_equaltok)
8634 : {
8635 44 : Expect (M2Reserved_equaltok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
8636 44 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
8637 44 : P3SymBuild_BuildOptArgInitializer ();
8638 : }
8639 54 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
8640 54 : }
8641 :
8642 :
8643 : /*
8644 : DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
8645 :
8646 : % BuildOptArgInitializer %
8647 : ']'
8648 :
8649 : first symbols:lsbratok
8650 :
8651 : cannot reachend
8652 : */
8653 :
8654 15651 : static void DefOptArg (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8655 : {
8656 15651 : Expect (M2Reserved_lsbratok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8657 15651 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
8658 15651 : Expect (M2Reserved_colontok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8659 15651 : FormalType (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_equaltok-M2Reserved_eoftok))), stopset1, stopset2);
8660 15651 : Expect (M2Reserved_equaltok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
8661 15651 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
8662 15651 : P3SymBuild_BuildOptArgInitializer ();
8663 15651 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
8664 15651 : }
8665 :
8666 :
8667 : /*
8668 : FormalType := { 'ARRAY' 'OF' } QualidentCheck
8669 :
8670 : first symbols:identtok, arraytok
8671 :
8672 : cannot reachend
8673 : */
8674 :
8675 5728299 : static void FormalType (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8676 : {
8677 6413931 : while (M2LexBuf_currenttoken == M2Reserved_arraytok)
8678 : {
8679 685632 : Expect (M2Reserved_arraytok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_oftok-M2Reserved_arraytok))), stopset2);
8680 685632 : Expect (M2Reserved_oftok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_arraytok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8681 : }
8682 : /* while */
8683 5728299 : QualidentCheck (stopset0, stopset1, stopset2);
8684 5728299 : }
8685 :
8686 :
8687 : /*
8688 : ModuleDeclaration :=
8689 : % VAR modulet, namet: CARDINAL ; %
8690 :
8691 : % modulet := GetTokenNo () %
8692 : 'MODULE'
8693 : % M2Error.DefaultInnerModule %
8694 :
8695 : % PushAutoOn %
8696 : Ident
8697 : % StartBuildInnerModule %
8698 :
8699 : % BuildModuleStart (modulet) ;
8700 : PushAutoOff %
8701 : [ Priority ] ';' { Import }
8702 : [ Export ] Block
8703 : % PushAutoOn %
8704 :
8705 : % namet := GetTokenNo () %
8706 : Ident
8707 : % EndBuildInnerModule (namet) %
8708 :
8709 : % PopAuto ; PopAuto ; PopAuto %
8710 :
8711 :
8712 : first symbols:moduletok
8713 :
8714 : cannot reachend
8715 : */
8716 :
8717 420 : static void ModuleDeclaration (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8718 : {
8719 420 : unsigned int modulet;
8720 420 : unsigned int namet;
8721 :
8722 420 : modulet = M2LexBuf_GetTokenNo ();
8723 420 : Expect (M2Reserved_moduletok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8724 420 : M2Error_DefaultInnerModule ();
8725 420 : M2Quads_PushAutoOn ();
8726 420 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1, stopset2);
8727 420 : P3SymBuild_StartBuildInnerModule ();
8728 420 : M2Quads_BuildModuleStart (modulet);
8729 420 : M2Quads_PushAutoOff ();
8730 420 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
8731 : {
8732 12 : Priority (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8733 : }
8734 420 : Expect (M2Reserved_semicolontok, stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8735 1068 : while (((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_fromtok-M2Reserved_arraytok)) | (1 << (M2Reserved_importtok-M2Reserved_arraytok))))) != 0)))
8736 : {
8737 228 : Import (stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok))));
8738 : }
8739 : /* while */
8740 420 : if (M2LexBuf_currenttoken == M2Reserved_exporttok)
8741 : {
8742 276 : Export (stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok))));
8743 : }
8744 420 : Block (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8745 420 : M2Quads_PushAutoOn ();
8746 420 : namet = M2LexBuf_GetTokenNo ();
8747 420 : Ident (stopset0, stopset1, stopset2);
8748 420 : P3SymBuild_EndBuildInnerModule (namet);
8749 420 : M2Quads_PopAuto ();
8750 420 : M2Quads_PopAuto ();
8751 420 : M2Quads_PopAuto ();
8752 420 : }
8753 :
8754 :
8755 : /*
8756 : Priority := '['
8757 : % PushAutoOn %
8758 : ConstExpression
8759 : % BuildModulePriority ;
8760 : PopAuto %
8761 : ']'
8762 :
8763 : first symbols:lsbratok
8764 :
8765 : cannot reachend
8766 : */
8767 :
8768 38 : static void Priority (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8769 : {
8770 38 : Expect (M2Reserved_lsbratok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
8771 38 : M2Quads_PushAutoOn ();
8772 38 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
8773 38 : M2Quads_BuildModulePriority ();
8774 38 : M2Quads_PopAuto ();
8775 38 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
8776 38 : }
8777 :
8778 :
8779 : /*
8780 : Export := 'EXPORT' ( 'QUALIFIED' IdentList |
8781 : 'UNQUALIFIED' IdentList |
8782 : IdentList ) ';'
8783 :
8784 : first symbols:exporttok
8785 :
8786 : cannot reachend
8787 : */
8788 :
8789 88653 : static void Export (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8790 : {
8791 88653 : Expect (M2Reserved_exporttok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_qualifiedtok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_unqualifiedtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8792 88653 : if (M2LexBuf_currenttoken == M2Reserved_qualifiedtok)
8793 : {
8794 76583 : Expect (M2Reserved_qualifiedtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8795 76583 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8796 : }
8797 12070 : else if (M2LexBuf_currenttoken == M2Reserved_unqualifiedtok)
8798 : {
8799 : /* avoid dangling else. */
8800 11794 : Expect (M2Reserved_unqualifiedtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8801 11794 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8802 : }
8803 276 : else if (M2LexBuf_currenttoken == M2Reserved_identtok)
8804 : {
8805 : /* avoid dangling else. */
8806 276 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8807 : }
8808 : else
8809 : {
8810 : /* avoid dangling else. */
8811 0 : ErrorArray ((const char *) "expecting one of: {%Kidentifier} {%KUNQUALIFIED} {%KQUALIFIED}", 62);
8812 : }
8813 88653 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2);
8814 88653 : }
8815 :
8816 :
8817 : /*
8818 : FromImport :=
8819 : % PushAutoOn %
8820 : 'FROM' Ident 'IMPORT' IdentList ';'
8821 :
8822 : % CheckImportListOuterModule %
8823 :
8824 : % PopAuto %
8825 :
8826 :
8827 : first symbols:fromtok
8828 :
8829 : cannot reachend
8830 : */
8831 :
8832 125215 : static void FromImport (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8833 : {
8834 125215 : M2Quads_PushAutoOn ();
8835 125215 : Expect (M2Reserved_fromtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8836 125215 : Ident (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_importtok-M2Reserved_arraytok))), stopset2);
8837 125215 : Expect (M2Reserved_importtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8838 125215 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8839 125215 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2);
8840 125215 : P3SymBuild_CheckImportListOuterModule ();
8841 125215 : M2Quads_PopAuto ();
8842 125215 : }
8843 :
8844 :
8845 : /*
8846 : WithoutFromImport :=
8847 : % PushAutoOff %
8848 : 'IMPORT' IdentList ';'
8849 : % PopAuto %
8850 :
8851 :
8852 : first symbols:importtok
8853 :
8854 : cannot reachend
8855 : */
8856 :
8857 9565 : static void WithoutFromImport (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8858 : {
8859 9565 : M2Quads_PushAutoOff ();
8860 9565 : Expect (M2Reserved_importtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8861 9565 : IdentList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8862 9565 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2);
8863 9565 : M2Quads_PopAuto ();
8864 9565 : }
8865 :
8866 :
8867 : /*
8868 : Import := FromImport | WithoutFromImport
8869 :
8870 : first symbols:importtok, fromtok
8871 :
8872 : cannot reachend
8873 : */
8874 :
8875 134780 : static void Import (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8876 : {
8877 134780 : if (M2LexBuf_currenttoken == M2Reserved_fromtok)
8878 : {
8879 125215 : FromImport (stopset0, stopset1, stopset2);
8880 : }
8881 9565 : else if (M2LexBuf_currenttoken == M2Reserved_importtok)
8882 : {
8883 : /* avoid dangling else. */
8884 9565 : WithoutFromImport (stopset0, stopset1, stopset2);
8885 : }
8886 : else
8887 : {
8888 : /* avoid dangling else. */
8889 0 : ErrorArray ((const char *) "expecting one of: {%KIMPORT} {%KFROM}", 37);
8890 : }
8891 134780 : }
8892 :
8893 :
8894 : /*
8895 : DefinitionModule :=
8896 : % VAR deft, endt, namet: CARDINAL ; %
8897 :
8898 : % deft := GetTokenNo () %
8899 : 'DEFINITION'
8900 : % M2Error.DefaultDefinitionModule %
8901 : 'MODULE'
8902 : % PushAutoOn %
8903 : [ 'FOR' string ] Ident
8904 : % StartBuildDefFile (deft) ;
8905 : P3StartBuildDefModule ;
8906 : PushAutoOff %
8907 : ';' { Import } [ Export ]
8908 : { Definition }
8909 : % endt := GetTokenNo () %
8910 : 'END'
8911 : % PushAutoOn %
8912 :
8913 : % namet := GetTokenNo () %
8914 : Ident
8915 : % EndBuildFile (endt) ;
8916 : P3EndBuildDefModule (namet) %
8917 : '.'
8918 : % PopAuto ; PopAuto ; PopAuto %
8919 :
8920 :
8921 : first symbols:definitiontok
8922 :
8923 : cannot reachend
8924 : */
8925 :
8926 167641 : static void DefinitionModule (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8927 : {
8928 167641 : unsigned int deft;
8929 167641 : unsigned int endt;
8930 167641 : unsigned int namet;
8931 :
8932 167641 : deft = M2LexBuf_GetTokenNo ();
8933 167641 : Expect (M2Reserved_definitiontok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_moduletok-M2Reserved_arraytok))), stopset2);
8934 167641 : M2Error_DefaultDefinitionModule ();
8935 167641 : Expect (M2Reserved_moduletok, stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_fortok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8936 167641 : M2Quads_PushAutoOn ();
8937 167641 : if (M2LexBuf_currenttoken == M2Reserved_fortok)
8938 : {
8939 13376 : Expect (M2Reserved_fortok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok))));
8940 13376 : string (stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8941 : }
8942 167641 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8943 167641 : M2Quads_StartBuildDefFile (deft);
8944 167641 : P3SymBuild_P3StartBuildDefModule ();
8945 167641 : M2Quads_PushAutoOff ();
8946 167641 : Expect (M2Reserved_semicolontok, stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok))));
8947 448948 : while (((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_fromtok-M2Reserved_arraytok)) | (1 << (M2Reserved_importtok-M2Reserved_arraytok))))) != 0)))
8948 : {
8949 113666 : Import (stopset0, stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8950 : }
8951 : /* while */
8952 167641 : if (M2LexBuf_currenttoken == M2Reserved_exporttok)
8953 : {
8954 88377 : Export (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_consttok-M2Reserved_arraytok)) | (1 << (M2Reserved_proceduretok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8955 : }
8956 3661499 : while ((((M2LexBuf_currenttoken >= M2Reserved_arraytok) && (M2LexBuf_currenttoken < M2Reserved_unqualifiedtok)) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_arraytok)) & ((P3Build_SetOfStop1) ((1 << (M2Reserved_consttok-M2Reserved_arraytok)) | (1 << (M2Reserved_proceduretok-M2Reserved_arraytok))))) != 0))) || ((M2LexBuf_currenttoken >= M2Reserved_unqualifiedtok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_unqualifiedtok)) & ((P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))))) != 0))))
8957 : {
8958 3493858 : Definition (stopset0, stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_endtok-M2Reserved_arraytok)) | (1 << (M2Reserved_consttok-M2Reserved_arraytok)) | (1 << (M2Reserved_proceduretok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_typetok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_vartok-M2Reserved_unqualifiedtok))));
8959 : }
8960 : /* while */
8961 167641 : endt = M2LexBuf_GetTokenNo ();
8962 167641 : Expect (M2Reserved_endtok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8963 167641 : M2Quads_PushAutoOn ();
8964 167641 : namet = M2LexBuf_GetTokenNo ();
8965 167641 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_periodtok-M2Reserved_eoftok))), stopset1, stopset2);
8966 167641 : M2Quads_EndBuildFile (endt);
8967 167641 : P3SymBuild_P3EndBuildDefModule (namet);
8968 167641 : Expect (M2Reserved_periodtok, stopset0, stopset1, stopset2);
8969 167641 : M2Quads_PopAuto ();
8970 167641 : M2Quads_PopAuto ();
8971 167641 : M2Quads_PopAuto ();
8972 167641 : }
8973 :
8974 :
8975 : /*
8976 : Definition := 'CONST' { ConstantDeclaration ';' } |
8977 : 'TYPE' { Ident ( ';' | '=' Type Alignment
8978 : ';' ) } |
8979 : 'VAR' { VariableDeclaration ';' } |
8980 : DefProcedureHeading ';'
8981 :
8982 : first symbols:proceduretok, vartok, typetok, consttok
8983 :
8984 : cannot reachend
8985 : */
8986 :
8987 3493858 : static void Definition (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
8988 : {
8989 3493858 : if (M2LexBuf_currenttoken == M2Reserved_consttok)
8990 : {
8991 25150 : Expect (M2Reserved_consttok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8992 246404 : while (M2LexBuf_currenttoken == M2Reserved_identtok)
8993 : {
8994 196104 : ConstantDeclaration (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
8995 196104 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
8996 : }
8997 : /* while */
8998 : }
8999 3468708 : else if (M2LexBuf_currenttoken == M2Reserved_typetok)
9000 : {
9001 : /* avoid dangling else. */
9002 85235 : Expect (M2Reserved_typetok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9003 322566 : while (M2LexBuf_currenttoken == M2Reserved_identtok)
9004 : {
9005 152096 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok)) | (1 << (M2Reserved_equaltok-M2Reserved_eoftok))), stopset1, stopset2);
9006 152096 : if (M2LexBuf_currenttoken == M2Reserved_semicolontok)
9007 : {
9008 29689 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9009 : }
9010 122407 : else if (M2LexBuf_currenttoken == M2Reserved_equaltok)
9011 : {
9012 : /* avoid dangling else. */
9013 122407 : Expect (M2Reserved_equaltok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lsbratok-M2Reserved_eoftok))), stopset1|(P3Build_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|(P3Build_SetOfStop2) ((1 << (M2Reserved_settok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_recordtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9014 122407 : Type (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_ldirectivetok-M2Reserved_eoftok)) | (1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
9015 122407 : Alignment (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
9016 122407 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9017 : }
9018 : else
9019 : {
9020 : /* avoid dangling else. */
9021 0 : ErrorArray ((const char *) "expecting one of: {%K=} {%K;}", 29);
9022 : }
9023 : }
9024 : /* while */
9025 : }
9026 3383473 : else if (M2LexBuf_currenttoken == M2Reserved_vartok)
9027 : {
9028 : /* avoid dangling else. */
9029 3794 : Expect (M2Reserved_vartok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9030 12194 : while (M2LexBuf_currenttoken == M2Reserved_identtok)
9031 : {
9032 4606 : VariableDeclaration (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
9033 4606 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9034 : }
9035 : /* while */
9036 : }
9037 3379679 : else if (M2LexBuf_currenttoken == M2Reserved_proceduretok)
9038 : {
9039 : /* avoid dangling else. */
9040 3379679 : DefProcedureHeading (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_semicolontok-M2Reserved_eoftok))), stopset1, stopset2);
9041 3379679 : Expect (M2Reserved_semicolontok, stopset0, stopset1, stopset2);
9042 : }
9043 : else
9044 : {
9045 : /* avoid dangling else. */
9046 0 : ErrorArray ((const char *) "expecting one of: {%KPROCEDURE} {%KVAR} {%KTYPE} {%KCONST}", 58);
9047 : }
9048 3493858 : }
9049 :
9050 :
9051 : /*
9052 : AsmStatement :=
9053 : % VAR CurrentAsm: CARDINAL ;
9054 : tok: CARDINAL ; %
9055 :
9056 : % tok := GetTokenNo () %
9057 : 'ASM'
9058 : % PushAutoOn ;
9059 : PushT (0) ; operand count
9060 : PushT (MakeGnuAsm ())
9061 : %
9062 : [ 'VOLATILE'
9063 : % PopT (CurrentAsm) ;
9064 : PutGnuAsmVolatile (CurrentAsm) ;
9065 : PushT (CurrentAsm)
9066 : %
9067 : ] '(' AsmOperands
9068 : % PopNothing ; throw away interface sym
9069 : BuildAsm (tok) ;
9070 : PopNothing ; throw away count
9071 : PopAuto
9072 : %
9073 : ')'
9074 :
9075 : first symbols:asmtok
9076 :
9077 : cannot reachend
9078 : */
9079 :
9080 27 : static void AsmStatement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9081 : {
9082 27 : unsigned int CurrentAsm;
9083 27 : unsigned int tok;
9084 :
9085 27 : tok = M2LexBuf_GetTokenNo ();
9086 27 : Expect (M2Reserved_asmtok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_volatiletok-M2Reserved_unqualifiedtok))));
9087 27 : M2Quads_PushAutoOn ();
9088 27 : M2Quads_PushT (static_cast<unsigned int> (0)); /* operand count */
9089 27 : M2Quads_PushT (SymbolTable_MakeGnuAsm ()); /* operand count */
9090 27 : if (M2LexBuf_currenttoken == M2Reserved_volatiletok)
9091 : {
9092 15 : Expect (M2Reserved_volatiletok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
9093 15 : M2Quads_PopT (&CurrentAsm);
9094 15 : SymbolTable_PutGnuAsmVolatile (CurrentAsm);
9095 15 : M2Quads_PushT (CurrentAsm);
9096 : }
9097 27 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9098 27 : AsmOperands (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
9099 27 : M2Quads_PopNothing (); /* throw away interface sym */
9100 27 : M2Quads_BuildAsm (tok); /* throw away interface sym */
9101 27 : M2Quads_PopNothing (); /* throw away count */
9102 27 : M2Quads_PopAuto (); /* throw away count */
9103 27 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
9104 27 : }
9105 :
9106 :
9107 : /*
9108 : AsmOperands :=
9109 : % VAR CurrentAsm, count: CARDINAL ;
9110 : str: CARDINAL ;
9111 : %
9112 : ConstExpression
9113 : % PopT (str) ;
9114 : PopT (CurrentAsm) ;
9115 : Assert (IsGnuAsm (CurrentAsm) OR IsGnuAsmVolatile (CurrentAsm)) ;
9116 : PopT (count) ;
9117 : IF DebugAsm
9118 : THEN
9119 : printf1 ('1: count of asm operands: %d
9120 : ', count)
9121 : END ;
9122 : PushT (count) ;
9123 : adds the name/instruction for this asm
9124 : PutGnuAsm (CurrentAsm, str) ;
9125 : PushT (CurrentAsm) ;
9126 : PushT (NulSym) the InterfaceSym
9127 : %
9128 : ( AsmOperandSpec |
9129 :
9130 : % epsilon
9131 : PutGnuAsmSimple (CurrentAsm)
9132 : %
9133 : )
9134 :
9135 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
9136 :
9137 : cannot reachend
9138 : */
9139 :
9140 27 : static void AsmOperands (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9141 : {
9142 27 : unsigned int CurrentAsm;
9143 27 : unsigned int count;
9144 27 : unsigned int str;
9145 :
9146 27 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
9147 27 : M2Quads_PopT (&str);
9148 27 : M2Quads_PopT (&CurrentAsm);
9149 54 : M2Debug_Assert ((SymbolTable_IsGnuAsm (CurrentAsm)) || (SymbolTable_IsGnuAsmVolatile (CurrentAsm)));
9150 27 : M2Quads_PopT (&count);
9151 27 : if (DebugAsm)
9152 : {
9153 : M2Printf_printf1 ((const char *) "1: count of asm operands: %d\\n", 30, (const unsigned char *) &count, (sizeof (count)-1));
9154 : }
9155 27 : M2Quads_PushT (count);
9156 : /* adds the name/instruction for this asm */
9157 27 : SymbolTable_PutGnuAsm (CurrentAsm, str);
9158 27 : M2Quads_PushT (CurrentAsm);
9159 27 : M2Quads_PushT (static_cast<unsigned int> (SymbolTable_NulSym)); /* the InterfaceSym */
9160 27 : if (M2LexBuf_currenttoken == M2Reserved_colontok)
9161 : {
9162 21 : AsmOperandSpec (stopset0, stopset1, stopset2);
9163 : }
9164 : else
9165 : {
9166 : /* epsilon */
9167 6 : SymbolTable_PutGnuAsmSimple (CurrentAsm);
9168 : }
9169 27 : }
9170 :
9171 :
9172 : /*
9173 : AsmOperandSpec :=
9174 : % VAR CurrentAsm, outputs, inputs, trash, count: CARDINAL ;
9175 : %
9176 : ':' AsmOutputList
9177 : % PopT(outputs) ;
9178 : PopT(CurrentAsm) ;
9179 : Assert(IsGnuAsm(CurrentAsm) OR IsGnuAsmVolatile(CurrentAsm)) ;
9180 : PopT(count) ;
9181 : IF DebugAsm
9182 : THEN
9183 : printf1('2: output count of asm operands: %d
9184 : ', count)
9185 : END ;
9186 : PutGnuAsmOutput(CurrentAsm, outputs) ;
9187 : PushT(0) ; reset count
9188 : PushT(CurrentAsm) ;
9189 : PushT(NulSym) the InterfaceSym
9190 : %
9191 : [ ':' AsmInputList
9192 : % PopT(inputs) ;
9193 : PopT(CurrentAsm) ;
9194 : Assert(IsGnuAsm(CurrentAsm) OR IsGnuAsmVolatile(CurrentAsm)) ;
9195 : PopT(count) ;
9196 : IF DebugAsm
9197 : THEN
9198 : printf1('3: input count of asm operands: %d
9199 : ', count)
9200 : END ;
9201 : PutGnuAsmInput(CurrentAsm, inputs) ;
9202 : PushT(0) ; reset count
9203 : PushT(CurrentAsm) ;
9204 : PushT(NulSym) the InterfaceSym
9205 : %
9206 : [ ':' AsmTrashList
9207 : % PopT(trash) ;
9208 : PopT(CurrentAsm) ;
9209 : Assert(IsGnuAsm(CurrentAsm) OR IsGnuAsmVolatile(CurrentAsm)) ;
9210 : PopT(count) ;
9211 : IF DebugAsm
9212 : THEN
9213 : printf1('4: trash count of asm operands: %d
9214 : ', count)
9215 : END ;
9216 : PutGnuAsmTrash(CurrentAsm, trash) ;
9217 : PushT(0) ; reset count
9218 : PushT(CurrentAsm) ;
9219 : PushT(NulSym) the InterfaceSym
9220 : %
9221 : ] ]
9222 :
9223 : first symbols:colontok
9224 :
9225 : cannot reachend
9226 : */
9227 :
9228 21 : static void AsmOperandSpec (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9229 : {
9230 21 : unsigned int CurrentAsm;
9231 21 : unsigned int outputs;
9232 21 : unsigned int inputs;
9233 21 : unsigned int trash;
9234 21 : unsigned int count;
9235 :
9236 21 : Expect (M2Reserved_colontok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9237 21 : AsmOutputList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
9238 21 : M2Quads_PopT (&outputs);
9239 21 : M2Quads_PopT (&CurrentAsm);
9240 42 : M2Debug_Assert ((SymbolTable_IsGnuAsm (CurrentAsm)) || (SymbolTable_IsGnuAsmVolatile (CurrentAsm)));
9241 21 : M2Quads_PopT (&count);
9242 21 : if (DebugAsm)
9243 : {
9244 : M2Printf_printf1 ((const char *) "2: output count of asm operands: %d\\n", 37, (const unsigned char *) &count, (sizeof (count)-1));
9245 : }
9246 21 : SymbolTable_PutGnuAsmOutput (CurrentAsm, outputs);
9247 21 : M2Quads_PushT (static_cast<unsigned int> (0)); /* reset count */
9248 21 : M2Quads_PushT (CurrentAsm); /* reset count */
9249 21 : M2Quads_PushT (static_cast<unsigned int> (SymbolTable_NulSym)); /* the InterfaceSym */
9250 21 : if (M2LexBuf_currenttoken == M2Reserved_colontok)
9251 : {
9252 15 : Expect (M2Reserved_colontok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9253 15 : AsmInputList (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_colontok-M2Reserved_eoftok))), stopset1, stopset2);
9254 15 : M2Quads_PopT (&inputs);
9255 15 : M2Quads_PopT (&CurrentAsm);
9256 30 : M2Debug_Assert ((SymbolTable_IsGnuAsm (CurrentAsm)) || (SymbolTable_IsGnuAsmVolatile (CurrentAsm)));
9257 15 : M2Quads_PopT (&count);
9258 15 : if (DebugAsm)
9259 : {
9260 : M2Printf_printf1 ((const char *) "3: input count of asm operands: %d\\n", 36, (const unsigned char *) &count, (sizeof (count)-1));
9261 : }
9262 15 : SymbolTable_PutGnuAsmInput (CurrentAsm, inputs);
9263 15 : M2Quads_PushT (static_cast<unsigned int> (0)); /* reset count */
9264 15 : M2Quads_PushT (CurrentAsm); /* reset count */
9265 15 : M2Quads_PushT (static_cast<unsigned int> (SymbolTable_NulSym)); /* the InterfaceSym */
9266 15 : if (M2LexBuf_currenttoken == M2Reserved_colontok)
9267 : {
9268 9 : Expect (M2Reserved_colontok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9269 9 : AsmTrashList (stopset0, stopset1, stopset2);
9270 9 : M2Quads_PopT (&trash);
9271 9 : M2Quads_PopT (&CurrentAsm);
9272 18 : M2Debug_Assert ((SymbolTable_IsGnuAsm (CurrentAsm)) || (SymbolTable_IsGnuAsmVolatile (CurrentAsm)));
9273 9 : M2Quads_PopT (&count);
9274 9 : if (DebugAsm)
9275 : {
9276 : M2Printf_printf1 ((const char *) "4: trash count of asm operands: %d\\n", 36, (const unsigned char *) &count, (sizeof (count)-1));
9277 : }
9278 9 : SymbolTable_PutGnuAsmTrash (CurrentAsm, trash);
9279 9 : M2Quads_PushT (static_cast<unsigned int> (0)); /* reset count */
9280 9 : M2Quads_PushT (CurrentAsm); /* reset count */
9281 9 : M2Quads_PushT (static_cast<unsigned int> (SymbolTable_NulSym)); /* the InterfaceSym */
9282 : }
9283 : }
9284 21 : }
9285 :
9286 :
9287 : /*
9288 : AsmOutputList := [ AsmOutputElement ] { ',' AsmOutputElement }
9289 :
9290 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok, lsbratok, commatok
9291 :
9292 : reachend
9293 : */
9294 :
9295 21 : static void AsmOutputList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9296 : {
9297 21 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
9298 : {
9299 15 : AsmOutputElement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
9300 : }
9301 21 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
9302 : {
9303 0 : Expect (M2Reserved_commatok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9304 0 : AsmOutputElement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
9305 : }
9306 : /* while */
9307 21 : }
9308 :
9309 :
9310 : /*
9311 : AsmInputList := [ AsmInputElement ] { ',' AsmInputElement }
9312 :
9313 : first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok, lsbratok, commatok
9314 :
9315 : reachend
9316 : */
9317 :
9318 15 : static void AsmInputList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9319 : {
9320 15 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
9321 : {
9322 15 : AsmInputElement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
9323 : }
9324 18 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
9325 : {
9326 3 : Expect (M2Reserved_commatok, stopset0|(P3Build_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|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9327 3 : AsmInputElement (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
9328 : }
9329 : /* while */
9330 15 : }
9331 :
9332 :
9333 : /*
9334 : NamedOperand := '[' Ident ']'
9335 :
9336 : first symbols:lsbratok
9337 :
9338 : cannot reachend
9339 : */
9340 :
9341 6 : static void NamedOperand (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9342 : {
9343 6 : Expect (M2Reserved_lsbratok, stopset0, stopset1, stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9344 6 : Ident (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rsbratok-M2Reserved_eoftok))), stopset1, stopset2);
9345 6 : Expect (M2Reserved_rsbratok, stopset0, stopset1, stopset2);
9346 6 : }
9347 :
9348 :
9349 : /*
9350 : AsmOperandName := ( NamedOperand |
9351 :
9352 : % IF IsAutoPushOn()
9353 : THEN
9354 : PushTF (NulName, identtok)
9355 : END
9356 : %
9357 : )
9358 :
9359 : first symbols:lsbratok
9360 :
9361 : reachend
9362 : */
9363 :
9364 33 : static void AsmOperandName (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9365 : {
9366 33 : if (M2LexBuf_currenttoken == M2Reserved_lsbratok)
9367 : {
9368 6 : NamedOperand (stopset0, stopset1, stopset2);
9369 : }
9370 : else
9371 : {
9372 27 : if (M2Quads_IsAutoPushOn ())
9373 : {
9374 27 : M2Quads_PushTF (static_cast<unsigned int> (NameKey_NulName), static_cast<unsigned int> (M2Reserved_identtok));
9375 : }
9376 : }
9377 33 : }
9378 :
9379 :
9380 : /*
9381 : AsmInputElement := AsmOperandName ConstExpression
9382 : '(' Expression
9383 : % BuildAsmElement (TRUE, FALSE)
9384 : %
9385 : ')'
9386 :
9387 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok, lsbratok
9388 :
9389 : cannot reachend
9390 : */
9391 :
9392 18 : static void AsmInputElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9393 : {
9394 18 : AsmOperandName (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9395 18 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
9396 18 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9397 18 : Expression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
9398 18 : M2Quads_BuildAsmElement (true, false);
9399 18 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
9400 18 : }
9401 :
9402 :
9403 : /*
9404 : AsmOutputElement := AsmOperandName ConstExpression
9405 : '(' Expression
9406 : % BuildAsmElement (FALSE, TRUE)
9407 : %
9408 : ')'
9409 :
9410 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok, lsbratok
9411 :
9412 : cannot reachend
9413 : */
9414 :
9415 15 : static void AsmOutputElement (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9416 : {
9417 15 : AsmOperandName (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9418 15 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_lparatok-M2Reserved_eoftok))), stopset1, stopset2);
9419 15 : Expect (M2Reserved_lparatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_SetOfStop2) ((1 << (M2Reserved_stringtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_integertok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_realtok-M2Reserved_unqualifiedtok)) | (1 << (M2Reserved_identtok-M2Reserved_unqualifiedtok))));
9420 15 : Expression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_rparatok-M2Reserved_eoftok))), stopset1, stopset2);
9421 15 : M2Quads_BuildAsmElement (false, true);
9422 15 : Expect (M2Reserved_rparatok, stopset0, stopset1, stopset2);
9423 15 : }
9424 :
9425 :
9426 : /*
9427 : AsmTrashList := [ ConstExpression
9428 : % BuildAsmTrash
9429 : %
9430 : ] { ',' ConstExpression
9431 : % BuildAsmTrash
9432 : %
9433 : }
9434 :
9435 : first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok, commatok
9436 :
9437 : reachend
9438 : */
9439 :
9440 9 : static void AsmTrashList (P3Build_SetOfStop0 stopset0, P3Build_SetOfStop1 stopset1, P3Build_SetOfStop2 stopset2)
9441 : {
9442 9 : if ((((M2LexBuf_currenttoken < M2Reserved_arraytok) && ((((1 << (M2LexBuf_currenttoken-M2Reserved_eoftok)) & ((P3Build_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)) & ((P3Build_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))))
9443 : {
9444 3 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
9445 3 : M2Quads_BuildAsmTrash ();
9446 : }
9447 9 : while (M2LexBuf_currenttoken == M2Reserved_commatok)
9448 : {
9449 0 : Expect (M2Reserved_commatok, stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_minustok-M2Reserved_eoftok)) | (1 << (M2Reserved_plustok-M2Reserved_eoftok)) | (1 << (M2Reserved_lparatok-M2Reserved_eoftok)) | (1 << (M2Reserved_lcbratok-M2Reserved_eoftok))), stopset1|(P3Build_SetOfStop1) ((1 << (M2Reserved_nottok-M2Reserved_arraytok))), stopset2|(P3Build_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))));
9450 0 : ConstExpression (stopset0|(P3Build_SetOfStop0) ((1 << (M2Reserved_commatok-M2Reserved_eoftok))), stopset1, stopset2);
9451 0 : M2Quads_BuildAsmTrash ();
9452 : }
9453 : /* while */
9454 9 : }
9455 :
9456 :
9457 : /*
9458 : CompilationUnit - returns TRUE if the input was correct enough to parse
9459 : in future passes.
9460 : */
9461 :
9462 183766 : extern "C" bool P3Build_CompilationUnit (void)
9463 : {
9464 183766 : seenError = false;
9465 183766 : FileUnit ((P3Build_SetOfStop0) ((1 << (M2Reserved_eoftok-M2Reserved_eoftok))), (P3Build_SetOfStop1) 0, (P3Build_SetOfStop2) 0);
9466 183550 : return ! seenError;
9467 : /* static analysis guarentees a RETURN statement will be used before here. */
9468 : __builtin_unreachable ();
9469 : }
9470 :
9471 15972 : extern "C" void _M2_P3Build_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
9472 : {
9473 15972 : BlockState = M2StateCheck_InitState ();
9474 15972 : }
9475 :
9476 0 : extern "C" void _M2_P3Build_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
9477 : {
9478 0 : }
|