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