Daily bump.
[official-gcc.git] / gcc / m2 / mc-boot / Gmcp3.cc
blobaa8b7338d13a68e20f52cda99ce78902ae527cd8
1 /* do not edit automatically generated by mc from mcp3. */
2 /* output from mc-3.bnf, automatically generated do not edit.
4 Copyright (C) 2015-2025 Free Software Foundation, Inc.
5 Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
7 This file is part of GNU Modula-2.
9 GNU Modula-2 is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GNU Modula-2 is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GNU Modula-2; see the file COPYING. If not,
21 see <https://www.gnu.org/licenses/>. */
23 #include "config.h"
24 #include "system.h"
25 #include <stdbool.h>
26 # if !defined (PROC_D)
27 # define PROC_D
28 typedef void (*PROC_t) (void);
29 typedef struct { PROC_t proc; } PROC;
30 # endif
32 # if !defined (TRUE)
33 # define TRUE (1==1)
34 # endif
36 # if !defined (FALSE)
37 # define FALSE (1==0)
38 # endif
40 #if defined(__cplusplus)
41 # undef NULL
42 # define NULL 0
43 #endif
44 #define _mcp3_C
46 #include "Gmcp3.h"
47 # include "GDynamicStrings.h"
48 # include "GmcError.h"
49 # include "GnameKey.h"
50 # include "GmcPrintf.h"
51 # include "GmcDebug.h"
52 # include "GmcReserved.h"
53 # include "GmcMetaError.h"
54 # include "GmcStack.h"
55 # include "GmcLexBuf.h"
56 # include "Gdecl.h"
58 # define Pass1 false
59 # define Debugging false
60 typedef unsigned int mcp3_stop0;
62 typedef unsigned int mcp3_SetOfStop0;
64 typedef unsigned int mcp3_stop1;
66 typedef unsigned int mcp3_SetOfStop1;
68 typedef unsigned int mcp3_stop2;
70 typedef unsigned int mcp3_SetOfStop2;
72 static bool WasNoError;
73 static bool curisused;
74 static nameKey_Name curstring;
75 static nameKey_Name curident;
76 static decl_node curproc;
77 static decl_node frommodule;
78 static decl_node typeDes;
79 static decl_node typeExp;
80 static decl_node curmodule;
81 static mcStack_stack stk;
84 CompilationUnit - returns TRUE if the input was correct enough to parse
85 in future passes.
88 extern "C" bool mcp3_CompilationUnit (void);
91 push -
94 static decl_node push (decl_node n);
97 pop -
100 static decl_node pop (void);
103 replace -
106 static decl_node replace (decl_node n);
109 peep - returns the top node on the stack without removing it.
112 static decl_node peep (void);
115 depth - returns the depth of the stack.
118 static unsigned int depth (void);
121 checkDuplicate -
124 static void checkDuplicate (bool b);
127 checkDuplicate -
130 static void ErrorString (DynamicStrings_String s);
133 checkDuplicate -
136 static void ErrorArray (const char *a_, unsigned int _a_high);
139 checkParameterAttribute -
142 static void checkParameterAttribute (void);
145 checkReturnAttribute -
148 static void checkReturnAttribute (void);
151 pushNunbounded -
154 static void pushNunbounded (unsigned int c);
157 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
160 static decl_node makeIndexedArray (unsigned int c, decl_node t);
163 importInto - from, m, import, name, into module, current.
164 It checks to see if curident is an enumeration type
165 and if so automatically includes all enumeration fields
166 as well.
169 static void importInto (decl_node m, nameKey_Name name, decl_node current);
172 checkEndName - if module does not have, name, then issue an error containing, desc.
175 static void checkEndName (decl_node module, nameKey_Name name, const char *desc_, unsigned int _desc_high);
178 DescribeStop - issues a message explaining what tokens were expected
181 static DynamicStrings_String DescribeStop (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
184 DescribeError - issues a message explaining what tokens were expected
187 static void DescribeError (void);
190 SyntaxError - after a syntax error we skip all tokens up until we reach
191 a stop symbol.
194 static void SyntaxError (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
197 SyntaxCheck -
200 static void SyntaxCheck (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
203 WarnMissingToken - generates a warning message about a missing token, t.
206 static void WarnMissingToken (mcReserved_toktype t);
209 MissingToken - generates a warning message about a missing token, t.
212 static void MissingToken (mcReserved_toktype t);
215 CheckAndInsert -
218 static bool CheckAndInsert (mcReserved_toktype t, mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
221 InStopSet
224 static bool InStopSet (mcReserved_toktype t, mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
227 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
228 If it is not then it will insert a token providing the token
229 is one of ; ] ) } . OF END ,
231 if the stopset contains <identtok> then we do not insert a token
234 static void PeepToken (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
237 Expect -
240 static void Expect (mcReserved_toktype t, mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
243 Ident - error checking varient of Ident
246 static void Ident (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
249 string -
252 static void string (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
255 Integer -
258 static void Integer (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
261 Real -
264 static void Real (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
267 FileUnit := DefinitionModule |
268 ImplementationOrProgramModule
270 first symbols:implementationtok, moduletok, definitiontok
272 cannot reachend
275 static void FileUnit (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
278 ProgramModule := 'MODULE' Ident
279 % curmodule := lookupModule (curident) %
281 % enterScope (curmodule) %
283 % resetEnumPos (curmodule) %
284 [ Priority ] ';' { Import } Block
285 Ident
286 % checkEndName (curmodule, curident, 'program module') %
288 % setConstExpComplete (curmodule) %
290 % leaveScope %
293 first symbols:moduletok
295 cannot reachend
298 static void ProgramModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
301 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
302 Ident
303 % curmodule := lookupImp (curident) %
305 % enterScope (lookupDef (curident)) %
307 % enterScope (curmodule) %
309 % resetEnumPos (curmodule) %
310 [ Priority ] ';' { Import }
311 Block Ident
312 % checkEndName (curmodule, curident, 'implementation module') %
314 % setConstExpComplete (curmodule) %
316 % leaveScope ; leaveScope %
319 first symbols:implementationtok
321 cannot reachend
324 static void ImplementationModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
327 ImplementationOrProgramModule := ImplementationModule |
328 ProgramModule
330 first symbols:moduletok, implementationtok
332 cannot reachend
335 static void ImplementationOrProgramModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
338 Number := Integer | Real
340 first symbols:realtok, integertok
342 cannot reachend
345 static void Number (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
348 Qualident := Ident { '.' Ident }
350 first symbols:identtok
352 cannot reachend
355 static void Qualident (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
358 ConstantDeclaration :=
359 % VAR d, e: node ; %
360 Ident
361 % d := lookupSym (curident) %
362 '=' ConstExpression
363 % e := pop () %
365 % assert (isConst (d)) %
367 % putConst (d, e) %
370 first symbols:identtok
372 cannot reachend
375 static void ConstantDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
378 ConstExpressionNop := SimpleConstExpr
379 % VAR n: node ; %
380 [ Relation SimpleConstExpr ]
382 % n := makeConstExp () %
385 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
387 cannot reachend
390 static void ConstExpressionNop (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
393 ConstExpression :=
394 % VAR n: node ; %
396 % n := push (makeConstExp ()) %
397 SimpleConstExpr [ Relation SimpleConstExpr ]
399 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
401 cannot reachend
404 static void ConstExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
407 Relation := '=' | '#' | '<>' | '<' | '<=' |
408 '>' | '>=' | 'IN'
410 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
412 cannot reachend
415 static void Relation (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
418 SimpleConstExpr := UnaryOrConstTerm { AddOperator
419 ConstTerm }
421 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
423 cannot reachend
426 static void SimpleConstExpr (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
429 UnaryOrConstTerm := '+' ConstTerm |
430 '-' ConstTerm |
431 ConstTerm
433 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
435 cannot reachend
438 static void UnaryOrConstTerm (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
441 AddOperator := '+' | '-' | 'OR'
443 first symbols:ortok, minustok, plustok
445 cannot reachend
448 static void AddOperator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
451 ConstTerm := ConstFactor { MulOperator ConstFactor }
453 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
455 cannot reachend
458 static void ConstTerm (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
461 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
462 'REM' | 'AND' | '&'
464 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
466 cannot reachend
469 static void MulOperator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
472 ConstFactor := Number | ConstString |
473 ConstSetOrQualidentOrFunction |
474 '(' ConstExpressionNop ')' |
475 'NOT' ConstFactor |
476 ConstAttribute
478 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
480 cannot reachend
483 static void ConstFactor (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
486 ConstString := string
488 first symbols:stringtok
490 cannot reachend
493 static void ConstString (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
496 ComponentElement := ConstExpressionNop [ '..' ConstExpressionNop ]
498 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
500 cannot reachend
503 static void ComponentElement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
506 ComponentValue := ComponentElement [ 'BY' ConstExpressionNop ]
508 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
510 cannot reachend
513 static void ComponentValue (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
516 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
518 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
520 cannot reachend
523 static void ArraySetRecordValue (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
526 Constructor := '{' [ ArraySetRecordValue ] '}'
528 first symbols:lcbratok
530 cannot reachend
533 static void Constructor (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
536 ConstSetOrQualidentOrFunction := Qualident [ Constructor |
537 ConstActualParameters ] |
538 Constructor
540 first symbols:lcbratok, identtok
542 cannot reachend
545 static void ConstSetOrQualidentOrFunction (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
548 ConstActualParameters := '(' [ ConstExpList ] ')'
550 first symbols:lparatok
552 cannot reachend
555 static void ConstActualParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
558 ConstExpList := ConstExpressionNop { ',' ConstExpressionNop }
560 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
562 cannot reachend
565 static void ConstExpList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
568 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
569 '(' '(' ConstAttributeExpression
570 ')' ')'
572 first symbols:attributetok
574 cannot reachend
577 static void ConstAttribute (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
580 ConstAttributeExpression := Ident | '<' Qualident
581 ',' Ident '>'
583 first symbols:lesstok, identtok
585 cannot reachend
588 static void ConstAttributeExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
591 ByteAlignment := ''
593 first symbols:ldirectivetok
595 cannot reachend
598 static void ByteAlignment (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
601 OptAlignmentExpression := [ AlignmentExpression ]
603 first symbols:lparatok
605 reachend
608 static void OptAlignmentExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
611 AlignmentExpression := '(' ConstExpressionNop ')'
613 first symbols:lparatok
615 cannot reachend
618 static void AlignmentExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
621 Alignment := [ ByteAlignment ]
623 first symbols:ldirectivetok
625 reachend
628 static void Alignment (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
631 IdentList := Ident { ',' Ident }
633 first symbols:identtok
635 cannot reachend
638 static void IdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
641 PushIdentList :=
642 % VAR n: node ; %
644 % n := makeIdentList () %
645 Ident
646 % checkDuplicate (putIdent (n, curident)) %
647 { ',' Ident
648 % checkDuplicate (putIdent (n, curident)) %
650 % n := push (n) %
653 first symbols:identtok
655 cannot reachend
658 static void PushIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
661 SubrangeType :=
662 % VAR low, high: node ; d: CARDINAL ; %
664 % d := depth () %
665 ConstExpression
666 % low := pop () %
668 % assert (d = depth ()) %
669 '..' ConstExpression
670 % high := pop () %
672 % assert (d = depth ()) %
674 % typeExp := push (makeSubrange (low, high)) %
676 % assert (d = depth () - 1) %
679 first symbols:lsbratok
681 cannot reachend
684 static void SubrangeType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
687 ArrayType := 'ARRAY'
688 % VAR c: CARDINAL ; t, n: node ; %
690 % c := 0 %
691 SimpleType
692 % INC (c) %
693 { ',' SimpleType
694 % INC (c) %
695 } 'OF' Type
696 % n := push (makeIndexedArray (c, pop ())) %
699 first symbols:arraytok
701 cannot reachend
704 static void ArrayType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
707 RecordType := 'RECORD'
708 % VAR n: node ; %
710 % n := push (makeRecord ()) %
712 % n := push (NIL) no varient %
713 [ DefaultRecordAttributes ] FieldListSequence
715 % assert (pop ()=NIL) %
716 'END'
718 first symbols:recordtok
720 cannot reachend
723 static void RecordType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
726 DefaultRecordAttributes := ''
728 first symbols:ldirectivetok
730 cannot reachend
733 static void DefaultRecordAttributes (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
736 RecordFieldPragma := [ '' ]
738 first symbols:ldirectivetok
740 reachend
743 static void RecordFieldPragma (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
746 FieldPragmaExpression := Ident PragmaConstExpression
748 first symbols:identtok
750 cannot reachend
753 static void FieldPragmaExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
756 PragmaConstExpression := [ '(' ConstExpressionNop
757 ')' ]
759 first symbols:lparatok
761 reachend
764 static void PragmaConstExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
767 AttributeExpression := Ident '(' ConstExpressionNop
770 first symbols:identtok
772 cannot reachend
775 static void AttributeExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
778 FieldListSequence := FieldListStatement { ';' FieldListStatement }
780 first symbols:casetok, identtok, semicolontok
782 reachend
785 static void FieldListSequence (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
788 FieldListStatement := [ FieldList ]
790 first symbols:identtok, casetok
792 reachend
795 static void FieldListStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
798 FieldList :=
799 % VAR r, i, f, t, n, v, w: node ; d: CARDINAL ; %
801 % d := depth () %
803 % v := pop () ; assert ((v=NIL) OR isVarient (v)) %
805 % r := peep () ; assert (isRecord (r) OR isVarientField (r)) %
807 % v := push (v) %
809 % assert (d=depth ()) %
811 % assert (((v=NIL) AND isRecord (r)) OR ((v#NIL) AND isVarientField (r))) %
812 PushIdentList ':'
813 % assert (d=depth () - 1) %
815 % i := pop () %
816 Type
817 % assert (d=depth () - 1) %
819 % t := pop () %
820 RecordFieldPragma
821 % assert (d=depth ()) %
823 % r := addFieldsToRecord (r, v, i, t) %
825 % assert (d=depth ()) %
827 'CASE'
828 % addRecordToList %
830 % d := depth () %
832 % v := pop () ; assert ((v=NIL) OR isVarient (v)) %
834 % r := peep () ; assert (isRecord (r) OR isVarientField (r)) %
836 % v := push (v) %
838 % assert (((v=NIL) AND isRecord (r)) OR ((v#NIL) AND isRecordField (r))) %
840 % w := push (makeVarient (r)) %
842 % assert (d = depth () - 1) %
844 % addVarientToList %
845 CaseTag 'OF'
846 % assert (d = depth () - 1) %
847 Varient
848 % assert (d = depth () - 1) %
849 { '|' Varient
850 % assert (d = depth () - 1) %
852 % w := peep () ; assert (isVarient (w)) %
854 % assert (d = depth () - 1) %
855 [ 'ELSE' FieldListSequence ] 'END'
857 % w := pop () ; assert (isVarient (w)) %
859 % assert (d=depth ()) %
862 first symbols:casetok, identtok
864 cannot reachend
867 static void FieldList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
870 TagIdent := Ident |
871 % curident := NulName %
874 first symbols:identtok
876 reachend
879 static void TagIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
882 CaseTag :=
883 % VAR tagident: Name ; q, v, w, r: node ; %
885 % w := pop () ; v := pop () ; r := peep () ; v := push (v) ; w := push (w) %
887 % assert (isVarient (w)) %
889 % assert ((v=NIL) OR isVarient (v)) %
891 % assert (isRecord (r) OR isVarientField (r)) %
893 % assert (isVarient (push (pop ()))) %
894 TagIdent
895 % tagident := curident %
896 ( ':' PushQualident
897 % q := pop () %
899 % assert (isVarient (push (pop ()))) %
901 % q := NIL %
903 % buildVarientSelector (r, w, tagident, q) %
906 first symbols:colontok, identtok
908 reachend
911 static void CaseTag (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
914 Varient :=
915 % VAR p, r, v, f: node ; d: CARDINAL ; %
917 % d := depth () %
919 % assert (isVarient (peep ())) %
921 % v := pop () ; assert (isVarient (v)) %
923 % r := pop () %
925 % p := peep () %
927 % r := push (r) %
929 % f := push (buildVarientFieldRecord (v, p)) %
931 % v := push (v) %
932 VarientCaseLabelList ':' FieldListSequence
934 % v := pop () %
936 % f := pop () %
938 % assert (isVarientField (f)) %
940 % assert (isVarient (v)) %
942 % v := push (v) %
944 % assert (isVarient (peep ())) %
946 % assert (d=depth ()) %
949 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
951 reachend
954 static void Varient (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
957 VarientCaseLabelList := VarientCaseLabels { ','
958 VarientCaseLabels }
960 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
962 cannot reachend
965 static void VarientCaseLabelList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
968 VarientCaseLabels :=
969 % VAR l, h: node ; %
971 % h := NIL %
972 ConstExpression
973 % l := pop () %
974 [ '..' ConstExpression
975 % h := pop () %
977 % l, h could be saved if necessary. %
980 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
982 cannot reachend
985 static void VarientCaseLabels (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
988 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
990 % VAR n: node ; %
992 % n := push (makeSet (pop ())) %
995 first symbols:oftok, packedsettok, settok
997 cannot reachend
1000 static void SetType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1003 PointerType := 'POINTER' 'TO' Type
1004 % VAR n: node ; %
1006 % n := push (makePointer (pop ())) %
1009 first symbols:pointertok
1011 cannot reachend
1014 static void PointerType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1017 ProcedureType := 'PROCEDURE'
1018 % curproc := push (makeProcType ()) %
1019 [ FormalTypeList ]
1021 first symbols:proceduretok
1023 cannot reachend
1026 static void ProcedureType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1029 FormalTypeList := '(' ( ')' FormalReturn |
1030 ProcedureParameters ')'
1031 FormalReturn )
1033 first symbols:lparatok
1035 cannot reachend
1038 static void FormalTypeList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1041 FormalReturn := [ ':' OptReturnType ]
1043 first symbols:colontok
1045 reachend
1048 static void FormalReturn (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1051 OptReturnType := '[' PushQualident
1052 % putReturnType (curproc, pop ()) %
1054 % putOptReturn (curproc) %
1055 ']' | PushQualident
1056 % putReturnType (curproc, pop ()) %
1059 first symbols:identtok, lsbratok
1061 cannot reachend
1064 static void OptReturnType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1067 ProcedureParameters := ProcedureParameter
1068 % addParameter (curproc, pop ()) %
1069 { ',' ProcedureParameter
1071 % addParameter (curproc, pop ()) %
1074 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
1076 cannot reachend
1079 static void ProcedureParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1082 ProcedureParameter := '...'
1083 % VAR n: node ; %
1085 % n := push (makeVarargs ()) %
1086 | 'VAR' FormalType
1087 % n := push (makeVarParameter (NIL, pop (), curproc, TRUE)) %
1088 | FormalType
1089 % n := push (makeNonVarParameter (NIL, pop (), curproc, TRUE)) %
1092 first symbols:identtok, arraytok, vartok, periodperiodperiodtok
1094 cannot reachend
1097 static void ProcedureParameter (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1100 VarIdent :=
1101 % VAR n, a: node ; %
1103 % n := pop () %
1104 Ident
1105 % checkDuplicate (putIdent (n, curident)) %
1107 % n := push (n) %
1108 [ '[' ConstExpression
1109 % a := pop () could store, a, into, n. %
1110 ']' ]
1112 first symbols:identtok
1114 cannot reachend
1117 static void VarIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1120 VarIdentList :=
1121 % VAR n: node ; %
1123 % n := makeIdentList () %
1125 % n := push (n) %
1126 VarIdent { ',' VarIdent }
1128 first symbols:identtok
1130 cannot reachend
1133 static void VarIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1136 VariableDeclaration :=
1137 % VAR v, d: node ; %
1138 VarIdentList
1139 % v := pop () %
1140 ':' Type
1141 % d := makeVarDecl (v, pop ()) %
1142 Alignment
1144 first symbols:identtok
1146 cannot reachend
1149 static void VariableDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1152 Designator := Qualident { SubDesignator }
1154 first symbols:identtok
1156 cannot reachend
1159 static void Designator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1162 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
1165 first symbols:uparrowtok, lsbratok, periodtok
1167 cannot reachend
1170 static void SubDesignator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1173 ArrayExpList := Expression { ',' Expression }
1175 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1177 cannot reachend
1180 static void ArrayExpList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1183 ExpList := Expression { ',' Expression }
1185 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1187 cannot reachend
1190 static void ExpList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1193 Expression := SimpleExpression [ Relation SimpleExpression ]
1195 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1197 cannot reachend
1200 static void Expression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1203 SimpleExpression := UnaryOrTerm { AddOperator Term }
1205 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1207 cannot reachend
1210 static void SimpleExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1213 UnaryOrTerm := '+' Term | '-' Term |
1214 Term
1216 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1218 cannot reachend
1221 static void UnaryOrTerm (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1224 Term := Factor { MulOperator Factor }
1226 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
1228 cannot reachend
1231 static void Term (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1234 Factor := Number | string | SetOrDesignatorOrFunction |
1235 '(' Expression ')' |
1236 'NOT' ( Factor | ConstAttribute )
1238 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1240 cannot reachend
1243 static void Factor (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1246 SetOrDesignatorOrFunction := Qualident [ Constructor |
1247 SimpleDes
1248 [ ActualParameters ] ] |
1249 Constructor
1251 first symbols:lcbratok, identtok
1253 cannot reachend
1256 static void SetOrDesignatorOrFunction (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1259 SimpleDes := { SubDesignator }
1261 first symbols:periodtok, lsbratok, uparrowtok
1263 reachend
1266 static void SimpleDes (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1269 ActualParameters := '(' [ ExpList ] ')'
1271 first symbols:lparatok
1273 cannot reachend
1276 static void ActualParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1279 ExitStatement := 'EXIT'
1281 first symbols:exittok
1283 cannot reachend
1286 static void ExitStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1289 ReturnStatement := 'RETURN' [ Expression ]
1291 first symbols:returntok
1293 cannot reachend
1296 static void ReturnStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1299 Statement := [ AssignmentOrProcedureCall |
1300 IfStatement | CaseStatement |
1301 WhileStatement |
1302 RepeatStatement |
1303 LoopStatement | ForStatement |
1304 WithStatement | AsmStatement |
1305 ExitStatement | ReturnStatement |
1306 RetryStatement ]
1308 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
1310 reachend
1313 static void Statement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1316 RetryStatement := 'RETRY'
1318 first symbols:retrytok
1320 cannot reachend
1323 static void RetryStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1326 AssignmentOrProcedureCall := Designator ( ':=' Expression |
1327 ActualParameters |
1329 % epsilon %
1332 first symbols:identtok
1334 cannot reachend
1337 static void AssignmentOrProcedureCall (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1340 StatementSequence := Statement { ';' Statement }
1342 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1344 reachend
1347 static void StatementSequence (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1350 IfStatement := 'IF' Expression 'THEN' StatementSequence
1351 { 'ELSIF' Expression 'THEN' StatementSequence }
1352 [ 'ELSE' StatementSequence ] 'END'
1354 first symbols:iftok
1356 cannot reachend
1359 static void IfStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1362 CaseStatement := 'CASE' Expression 'OF' Case { '|'
1363 Case }
1364 CaseEndStatement
1366 first symbols:casetok
1368 cannot reachend
1371 static void CaseStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1374 CaseEndStatement := 'END' | 'ELSE' StatementSequence
1375 'END'
1377 first symbols:elsetok, endtok
1379 cannot reachend
1382 static void CaseEndStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1385 Case := [ CaseLabelList ':' StatementSequence ]
1387 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1389 reachend
1392 static void Case (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1395 CaseLabelList := CaseLabels { ',' CaseLabels }
1397 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1399 cannot reachend
1402 static void CaseLabelList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1405 CaseLabels := ConstExpressionNop [ '..' ConstExpressionNop ]
1407 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1409 cannot reachend
1412 static void CaseLabels (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1415 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
1416 'END'
1418 first symbols:whiletok
1420 cannot reachend
1423 static void WhileStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1426 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
1427 Expression
1429 first symbols:repeattok
1431 cannot reachend
1434 static void RepeatStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1437 ForStatement := 'FOR' Ident ':=' Expression 'TO'
1438 Expression [ 'BY' ConstExpressionNop ]
1439 'DO' StatementSequence 'END'
1441 first symbols:fortok
1443 cannot reachend
1446 static void ForStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1449 LoopStatement := 'LOOP' StatementSequence 'END'
1451 first symbols:looptok
1453 cannot reachend
1456 static void LoopStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1459 WithStatement := 'WITH' Designator 'DO' StatementSequence
1460 'END'
1462 first symbols:withtok
1464 cannot reachend
1467 static void WithStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1470 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
1471 Ident
1472 % leaveScope %
1475 first symbols:proceduretok
1477 cannot reachend
1480 static void ProcedureDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1483 ProcedureIdent := Ident
1484 % curproc := lookupSym (curident) %
1486 % enterScope (curproc) %
1489 first symbols:identtok
1491 cannot reachend
1494 static void ProcedureIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1497 DefProcedureIdent := Ident
1498 % curproc := lookupSym (curident) %
1501 first symbols:identtok
1503 cannot reachend
1506 static void DefProcedureIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1509 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
1510 '(' '(' Ident ')' ')' |
1511 '__INLINE__' ]
1513 first symbols:inlinetok, attributetok
1515 reachend
1518 static void DefineBuiltinProcedure (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1521 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
1522 ( ProcedureIdent [ FormalParameters ]
1523 AttributeNoReturn )
1525 first symbols:proceduretok
1527 cannot reachend
1530 static void ProcedureHeading (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1533 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
1535 first symbols:inlinetok, builtintok
1537 reachend
1540 static void Builtin (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1543 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
1544 [ DefFormalParameters ]
1545 AttributeNoReturn )
1547 first symbols:proceduretok
1549 cannot reachend
1552 static void DefProcedureHeading (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1555 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
1556 'END'
1558 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
1560 cannot reachend
1563 static void ProcedureBlock (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1566 Block := { Declaration } InitialBlock FinalBlock
1567 'END'
1569 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
1571 cannot reachend
1574 static void Block (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1577 InitialBlock := [ 'BEGIN' InitialBlockBody ]
1579 first symbols:begintok
1581 reachend
1584 static void InitialBlock (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1587 FinalBlock := [ 'FINALLY' FinalBlockBody ]
1589 first symbols:finallytok
1591 reachend
1594 static void FinalBlock (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1597 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1599 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1601 reachend
1604 static void InitialBlockBody (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1607 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1609 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1611 reachend
1614 static void FinalBlockBody (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1617 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1619 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1621 reachend
1624 static void ProcedureBlockBody (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1627 NormalPart := StatementSequence
1629 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1631 reachend
1634 static void NormalPart (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1637 ExceptionalPart := StatementSequence
1639 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1641 reachend
1644 static void ExceptionalPart (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1647 Declaration := 'CONST' { ConstantDeclaration ';' } |
1648 'TYPE' { TypeDeclaration } |
1649 'VAR' { VariableDeclaration ';' } |
1650 ProcedureDeclaration ';' |
1651 ModuleDeclaration ';'
1653 first symbols:moduletok, proceduretok, vartok, typetok, consttok
1655 cannot reachend
1658 static void Declaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1661 DefFormalParameters := '('
1662 % paramEnter (curproc) %
1663 [ DefMultiFPSection ] ')'
1665 % paramLeave (curproc) %
1666 FormalReturn
1668 first symbols:lparatok
1670 cannot reachend
1673 static void DefFormalParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1676 DefMultiFPSection := DefExtendedFP |
1677 FPSection [ ';' DefMultiFPSection ]
1679 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1681 cannot reachend
1684 static void DefMultiFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1687 FormalParameters := '('
1688 % paramEnter (curproc) %
1689 [ MultiFPSection ] ')'
1690 % paramLeave (curproc) %
1691 FormalReturn
1693 first symbols:lparatok
1695 cannot reachend
1698 static void FormalParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1701 AttributeNoReturn := [ NoReturn |
1702 % setNoReturn (curproc, FALSE) %
1705 first symbols:ldirectivetok
1707 reachend
1710 static void AttributeNoReturn (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1713 NoReturn := ''
1715 first symbols:ldirectivetok
1717 cannot reachend
1720 static void NoReturn (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1723 AttributeUnused := [ Unused ]
1725 first symbols:ldirectivetok
1727 reachend
1730 static void AttributeUnused (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1733 Unused := ''
1735 first symbols:ldirectivetok
1737 cannot reachend
1740 static void Unused (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1743 MultiFPSection := ExtendedFP | FPSection [ ';'
1744 MultiFPSection ]
1746 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1748 cannot reachend
1751 static void MultiFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1754 FPSection := NonVarFPSection |
1755 VarFPSection
1757 first symbols:vartok, identtok
1759 cannot reachend
1762 static void FPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1765 DefExtendedFP := DefOptArg | '...'
1766 % addParameter (curproc, makeVarargs ()) %
1769 first symbols:lsbratok, periodperiodperiodtok
1771 cannot reachend
1774 static void DefExtendedFP (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1777 ExtendedFP := OptArg | '...'
1779 first symbols:lsbratok, periodperiodperiodtok
1781 cannot reachend
1784 static void ExtendedFP (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1787 VarFPSection := 'VAR' PushIdentList
1788 % VAR l, t: node ; %
1789 ':' FormalType
1790 % t := pop () %
1792 % l := pop () %
1794 % curisused := TRUE %
1795 [ AttributeUnused ]
1796 % addVarParameters (curproc, l, t, curisused) %
1799 first symbols:vartok
1801 cannot reachend
1804 static void VarFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1807 NonVarFPSection := PushIdentList
1808 % VAR l, t: node ; %
1809 ':' FormalType
1810 % t := pop () %
1812 % l := pop () %
1814 % curisused := TRUE %
1815 [ AttributeUnused ]
1816 % addNonVarParameters (curproc, l, t, curisused) %
1819 first symbols:identtok
1821 cannot reachend
1824 static void NonVarFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1827 OptArg :=
1828 % VAR p, init, type: node ; id: Name ; %
1829 '[' Ident
1830 % id := curident %
1831 ':' FormalType
1832 % type := pop () %
1834 % init := NIL %
1835 [ '=' ConstExpression
1836 % init := pop () %
1837 ] ']'
1838 % p := addOptParameter (curproc, id, type, init) %
1841 first symbols:lsbratok
1843 cannot reachend
1846 static void OptArg (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1849 DefOptArg :=
1850 % VAR p, init, type: node ; id: Name ; %
1851 '[' Ident
1852 % id := curident %
1853 ':' FormalType
1854 % type := pop () %
1855 '=' ConstExpression
1856 % init := pop () %
1858 % p := addOptParameter (curproc, id, type, init) %
1861 first symbols:lsbratok
1863 cannot reachend
1866 static void DefOptArg (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1869 FormalType :=
1870 % VAR c: CARDINAL ; %
1872 % VAR n, a, s: node ; %
1874 % c := 0 %
1875 { 'ARRAY' 'OF'
1876 % INC (c) %
1877 } PushQualident
1878 % pushNunbounded (c) %
1881 first symbols:identtok, arraytok
1883 cannot reachend
1886 static void FormalType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1889 ModuleDeclaration := 'MODULE' Ident [ Priority ]
1890 ';' { Import } [ Export ]
1891 Block Ident
1893 first symbols:moduletok
1895 cannot reachend
1898 static void ModuleDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1901 Priority := '[' ConstExpressionNop ']'
1903 first symbols:lsbratok
1905 cannot reachend
1908 static void Priority (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1911 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
1912 'UNQUALIFIED' IdentList |
1913 IdentList ) ';'
1915 first symbols:exporttok
1917 cannot reachend
1920 static void Export (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1923 FromIdentList := Ident
1924 % importInto (frommodule, curident, curmodule) %
1925 { ',' Ident
1926 % importInto (frommodule, curident, curmodule) %
1929 first symbols:identtok
1931 cannot reachend
1934 static void FromIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1937 FromImport := 'FROM' Ident
1938 % frommodule := lookupDef (curident) %
1939 'IMPORT' FromIdentList ';'
1941 first symbols:fromtok
1943 cannot reachend
1946 static void FromImport (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1949 ImportModuleList := Ident { ',' Ident }
1951 first symbols:identtok
1953 cannot reachend
1956 static void ImportModuleList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1959 WithoutFromImport := 'IMPORT' ImportModuleList ';'
1961 first symbols:importtok
1963 cannot reachend
1966 static void WithoutFromImport (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1969 Import := FromImport | WithoutFromImport
1971 first symbols:importtok, fromtok
1973 cannot reachend
1976 static void Import (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
1979 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
1980 string ]
1981 Ident ';'
1982 % curmodule := lookupDef (curident) %
1984 % enterScope (curmodule) %
1986 % resetEnumPos (curmodule) %
1987 { Import } [ Export ] { Definition }
1988 'END' Ident '.'
1989 % checkEndName (curmodule, curident, 'definition module') %
1991 % setConstExpComplete (curmodule) %
1993 % leaveScope %
1996 first symbols:definitiontok
1998 cannot reachend
2001 static void DefinitionModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2004 PushQualident := Ident
2005 % typeExp := push (lookupSym (curident)) %
2007 % IF typeExp = NIL
2008 THEN
2009 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
2010 END %
2011 [ '.'
2012 % IF NOT isDef (typeExp)
2013 THEN
2014 ErrorArray ('the first component of this qualident must be a definition module')
2015 END %
2016 Ident
2017 % typeExp := replace (lookupInScope (typeExp, curident)) ;
2018 IF typeExp=NIL
2019 THEN
2020 ErrorArray ('identifier not found in definition module')
2021 END %
2024 first symbols:identtok
2026 cannot reachend
2029 static void PushQualident (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2032 OptSubrange := [ SubrangeType
2033 % VAR q, s: node ; %
2035 % s := pop () %
2037 % q := pop () %
2039 % putSubrangeType (s, q) %
2041 % typeExp := push (s) %
2044 first symbols:lsbratok
2046 reachend
2049 static void OptSubrange (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2052 TypeEquiv := PushQualident OptSubrange
2054 first symbols:identtok
2056 cannot reachend
2059 static void TypeEquiv (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2062 EnumIdentList :=
2063 % VAR f: node ; %
2065 % typeExp := push (makeEnum ()) %
2066 Ident
2067 % f := makeEnumField (typeExp, curident) %
2068 { ',' Ident
2069 % f := makeEnumField (typeExp, curident) %
2072 first symbols:identtok
2074 cannot reachend
2077 static void EnumIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2080 Enumeration := '(' EnumIdentList ')'
2082 first symbols:lparatok
2084 cannot reachend
2087 static void Enumeration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2090 SimpleType :=
2091 % VAR d: CARDINAL ; %
2093 % d := depth () %
2094 ( TypeEquiv | Enumeration |
2095 SubrangeType )
2096 % assert (d = depth () - 1) %
2099 first symbols:lsbratok, lparatok, identtok
2101 cannot reachend
2104 static void SimpleType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2107 Type := SimpleType | ArrayType | RecordType |
2108 SetType | PointerType | ProcedureType
2110 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
2112 cannot reachend
2115 static void Type (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2118 TypeDeclaration := { Ident
2119 % typeDes := lookupSym (curident) %
2120 ( ';' | '=' Type
2121 % putType (typeDes, pop ()) %
2122 Alignment ';' ) }
2124 first symbols:identtok
2126 reachend
2129 static void TypeDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2132 Definition := 'CONST' { ConstantDeclaration ';' } |
2133 'TYPE' { TypeDeclaration } |
2134 'VAR' { VariableDeclaration ';' } |
2135 DefProcedureHeading ';'
2137 first symbols:proceduretok, vartok, typetok, consttok
2139 cannot reachend
2142 static void Definition (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2145 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
2148 first symbols:asmtok
2150 cannot reachend
2153 static void AsmStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2156 AsmOperands := string [ AsmOperandSpec ]
2158 first symbols:stringtok
2160 cannot reachend
2163 static void AsmOperands (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2166 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
2167 ':' TrashList ] ] ]
2169 first symbols:colontok
2171 reachend
2174 static void AsmOperandSpec (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2177 AsmList := [ AsmElement ] { ',' AsmElement }
2179 first symbols:lsbratok, stringtok, commatok
2181 reachend
2184 static void AsmList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2187 NamedOperand := '[' Ident ']'
2189 first symbols:lsbratok
2191 cannot reachend
2194 static void NamedOperand (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2197 AsmOperandName := [ NamedOperand ]
2199 first symbols:lsbratok
2201 reachend
2204 static void AsmOperandName (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2207 AsmElement := AsmOperandName string '(' Expression
2210 first symbols:stringtok, lsbratok
2212 cannot reachend
2215 static void AsmElement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2218 TrashList := [ string ] { ',' string }
2220 first symbols:commatok, stringtok
2222 reachend
2225 static void TrashList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2);
2229 push -
2232 static decl_node push (decl_node n)
2234 return static_cast<decl_node> (mcStack_push (stk, reinterpret_cast <void *> (n)));
2235 /* static analysis guarentees a RETURN statement will be used before here. */
2236 __builtin_unreachable ();
2241 pop -
2244 static decl_node pop (void)
2246 return static_cast<decl_node> (mcStack_pop (stk));
2247 /* static analysis guarentees a RETURN statement will be used before here. */
2248 __builtin_unreachable ();
2253 replace -
2256 static decl_node replace (decl_node n)
2258 return static_cast<decl_node> (mcStack_replace (stk, reinterpret_cast <void *> (n)));
2259 /* static analysis guarentees a RETURN statement will be used before here. */
2260 __builtin_unreachable ();
2265 peep - returns the top node on the stack without removing it.
2268 static decl_node peep (void)
2270 return push (pop ());
2271 /* static analysis guarentees a RETURN statement will be used before here. */
2272 __builtin_unreachable ();
2277 depth - returns the depth of the stack.
2280 static unsigned int depth (void)
2282 return mcStack_depth (stk);
2283 /* static analysis guarentees a RETURN statement will be used before here. */
2284 __builtin_unreachable ();
2289 checkDuplicate -
2292 static void checkDuplicate (bool b)
2298 checkDuplicate -
2301 static void ErrorString (DynamicStrings_String s)
2303 mcError_errorStringAt (s, mcLexBuf_getTokenNo ());
2304 WasNoError = false;
2309 checkDuplicate -
2312 static void ErrorArray (const char *a_, unsigned int _a_high)
2314 char a[_a_high+1];
2316 /* make a local copy of each unbounded array. */
2317 memcpy (a, a_, _a_high+1);
2319 ErrorString (DynamicStrings_InitString ((const char *) a, _a_high));
2324 checkParameterAttribute -
2327 static void checkParameterAttribute (void)
2329 if ((nameKey_makeKey ((const char *) "unused", 6)) != curident)
2331 mcMetaError_metaError1 ((const char *) "attribute {%1k} is not allowed in the formal parameter section, currently only unused is allowed", 96, (const unsigned char *) &curident, (sizeof (curident)-1));
2337 checkReturnAttribute -
2340 static void checkReturnAttribute (void)
2342 if ((nameKey_makeKey ((const char *) "noreturn", 8)) != curident)
2344 mcMetaError_metaError1 ((const char *) "attribute {%1k} is not allowed in the procedure return type, only noreturn is allowed", 85, (const unsigned char *) &curident, (sizeof (curident)-1));
2350 pushNunbounded -
2353 static void pushNunbounded (unsigned int c)
2355 decl_node type;
2356 decl_node array;
2357 decl_node subrange;
2359 while (c != 0)
2361 type = pop ();
2362 subrange = decl_makeSubrange (static_cast<decl_node> (NULL), static_cast<decl_node> (NULL));
2363 decl_putSubrangeType (subrange, decl_getCardinal ());
2364 array = decl_makeArray (subrange, type);
2365 decl_putUnbounded (array);
2366 type = push (array);
2367 c -= 1;
2373 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
2376 static decl_node makeIndexedArray (unsigned int c, decl_node t)
2378 decl_node i;
2380 while (c > 0)
2382 t = decl_makeArray (pop (), t);
2383 c -= 1;
2385 return t;
2386 /* static analysis guarentees a RETURN statement will be used before here. */
2387 __builtin_unreachable ();
2392 importInto - from, m, import, name, into module, current.
2393 It checks to see if curident is an enumeration type
2394 and if so automatically includes all enumeration fields
2395 as well.
2398 static void importInto (decl_node m, nameKey_Name name, decl_node current)
2400 decl_node s;
2401 decl_node o;
2403 mcDebug_assert (decl_isDef (m));
2404 mcDebug_assert (((decl_isDef (current)) || (decl_isModule (current))) || (decl_isImp (current)));
2405 s = decl_lookupExported (m, name);
2406 if (s == NULL)
2408 mcMetaError_metaError2 ((const char *) "{%1k} was not exported from definition module {%2a}", 51, (const unsigned char *) &name, (sizeof (name)-1), (const unsigned char *) &m, (sizeof (m)-1));
2410 else
2412 o = decl_import (current, s);
2413 if (s != o)
2415 mcMetaError_metaError2 ((const char *) "{%1ad} cannot be imported into the current module as it causes a name clash with {%2ad}", 87, (const unsigned char *) &s, (sizeof (s)-1), (const unsigned char *) &o, (sizeof (o)-1));
2422 checkEndName - if module does not have, name, then issue an error containing, desc.
2425 static void checkEndName (decl_node module, nameKey_Name name, const char *desc_, unsigned int _desc_high)
2427 DynamicStrings_String s;
2428 char desc[_desc_high+1];
2430 /* make a local copy of each unbounded array. */
2431 memcpy (desc, desc_, _desc_high+1);
2433 if ((decl_getSymName (module)) != name)
2435 s = DynamicStrings_InitString ((const char *) "inconsistent module name found with this ", 41);
2436 s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) desc, _desc_high)));
2437 ErrorString (s);
2443 DescribeStop - issues a message explaining what tokens were expected
2446 static DynamicStrings_String DescribeStop (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
2448 unsigned int n;
2449 DynamicStrings_String str;
2450 DynamicStrings_String message;
2452 n = 0;
2453 message = DynamicStrings_InitString ((const char *) "", 0);
2454 if ((((1 << (mcReserved_stringtok-mcReserved_recordtok)) & (stopset2)) != 0))
2456 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "string", 6)));
2457 n += 1;
2459 if ((((1 << (mcReserved_realtok-mcReserved_recordtok)) & (stopset2)) != 0))
2461 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "real number", 11)));
2462 n += 1;
2464 if ((((1 << (mcReserved_identtok-mcReserved_recordtok)) & (stopset2)) != 0))
2466 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "identifier", 10)));
2467 n += 1;
2469 if ((((1 << (mcReserved_integertok-mcReserved_recordtok)) & (stopset2)) != 0))
2471 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "integer number", 14)));
2472 n += 1;
2474 if ((((1 << (mcReserved_inlinetok-mcReserved_recordtok)) & (stopset2)) != 0))
2476 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__INLINE__", 10)));
2477 n += 1;
2479 if ((((1 << (mcReserved_builtintok-mcReserved_recordtok)) & (stopset2)) != 0))
2481 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__BUILTIN__", 11)));
2482 n += 1;
2484 if ((((1 << (mcReserved_attributetok-mcReserved_recordtok)) & (stopset2)) != 0))
2486 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__ATTRIBUTE__", 13)));
2487 n += 1;
2489 if ((((1 << (mcReserved_filetok-mcReserved_recordtok)) & (stopset2)) != 0))
2491 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__FILE__", 8)));
2492 n += 1;
2494 if ((((1 << (mcReserved_linetok-mcReserved_recordtok)) & (stopset2)) != 0))
2496 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__LINE__", 8)));
2497 n += 1;
2499 if ((((1 << (mcReserved_datetok-mcReserved_recordtok)) & (stopset2)) != 0))
2501 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__DATE__", 8)));
2502 n += 1;
2504 if ((((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) & (stopset2)) != 0))
2506 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "...", 3)));
2507 n += 1;
2509 if ((((1 << (mcReserved_volatiletok-mcReserved_recordtok)) & (stopset2)) != 0))
2511 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VOLATILE", 8)));
2512 n += 1;
2514 if ((((1 << (mcReserved_asmtok-mcReserved_recordtok)) & (stopset2)) != 0))
2516 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ASM", 3)));
2517 n += 1;
2519 if ((((1 << (mcReserved_withtok-mcReserved_recordtok)) & (stopset2)) != 0))
2521 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WITH", 4)));
2522 n += 1;
2524 if ((((1 << (mcReserved_whiletok-mcReserved_recordtok)) & (stopset2)) != 0))
2526 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WHILE", 5)));
2527 n += 1;
2529 if ((((1 << (mcReserved_vartok-mcReserved_recordtok)) & (stopset2)) != 0))
2531 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VAR", 3)));
2532 n += 1;
2534 if ((((1 << (mcReserved_untiltok-mcReserved_recordtok)) & (stopset2)) != 0))
2536 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNTIL", 5)));
2537 n += 1;
2539 if ((((1 << (mcReserved_typetok-mcReserved_recordtok)) & (stopset2)) != 0))
2541 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TYPE", 4)));
2542 n += 1;
2544 if ((((1 << (mcReserved_totok-mcReserved_recordtok)) & (stopset2)) != 0))
2546 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TO", 2)));
2547 n += 1;
2549 if ((((1 << (mcReserved_thentok-mcReserved_recordtok)) & (stopset2)) != 0))
2551 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "THEN", 4)));
2552 n += 1;
2554 if ((((1 << (mcReserved_settok-mcReserved_recordtok)) & (stopset2)) != 0))
2556 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "SET", 3)));
2557 n += 1;
2559 if ((((1 << (mcReserved_returntok-mcReserved_recordtok)) & (stopset2)) != 0))
2561 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETURN", 6)));
2562 n += 1;
2564 if ((((1 << (mcReserved_retrytok-mcReserved_recordtok)) & (stopset2)) != 0))
2566 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETRY", 5)));
2567 n += 1;
2569 if ((((1 << (mcReserved_repeattok-mcReserved_recordtok)) & (stopset2)) != 0))
2571 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REPEAT", 6)));
2572 n += 1;
2574 if ((((1 << (mcReserved_remtok-mcReserved_recordtok)) & (stopset2)) != 0))
2576 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REM", 3)));
2577 n += 1;
2579 if ((((1 << (mcReserved_recordtok-mcReserved_recordtok)) & (stopset2)) != 0))
2581 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RECORD", 6)));
2582 n += 1;
2584 if ((((1 << (mcReserved_unqualifiedtok-mcReserved_arraytok)) & (stopset1)) != 0))
2586 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNQUALIFIED", 11)));
2587 n += 1;
2589 if ((((1 << (mcReserved_qualifiedtok-mcReserved_arraytok)) & (stopset1)) != 0))
2591 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "QUALIFIED", 9)));
2592 n += 1;
2594 if ((((1 << (mcReserved_proceduretok-mcReserved_arraytok)) & (stopset1)) != 0))
2596 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PROCEDURE", 9)));
2597 n += 1;
2599 if ((((1 << (mcReserved_pointertok-mcReserved_arraytok)) & (stopset1)) != 0))
2601 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "POINTER", 7)));
2602 n += 1;
2604 if ((((1 << (mcReserved_packedsettok-mcReserved_arraytok)) & (stopset1)) != 0))
2606 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PACKEDSET", 9)));
2607 n += 1;
2609 if ((((1 << (mcReserved_ortok-mcReserved_arraytok)) & (stopset1)) != 0))
2611 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OR", 2)));
2612 n += 1;
2614 if ((((1 << (mcReserved_oftok-mcReserved_arraytok)) & (stopset1)) != 0))
2616 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OF", 2)));
2617 n += 1;
2619 if ((((1 << (mcReserved_nottok-mcReserved_arraytok)) & (stopset1)) != 0))
2621 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "NOT", 3)));
2622 n += 1;
2624 if ((((1 << (mcReserved_moduletok-mcReserved_arraytok)) & (stopset1)) != 0))
2626 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MODULE", 6)));
2627 n += 1;
2629 if ((((1 << (mcReserved_modtok-mcReserved_arraytok)) & (stopset1)) != 0))
2631 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MOD", 3)));
2632 n += 1;
2634 if ((((1 << (mcReserved_looptok-mcReserved_arraytok)) & (stopset1)) != 0))
2636 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "LOOP", 4)));
2637 n += 1;
2639 if ((((1 << (mcReserved_intok-mcReserved_arraytok)) & (stopset1)) != 0))
2641 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IN", 2)));
2642 n += 1;
2644 if ((((1 << (mcReserved_importtok-mcReserved_arraytok)) & (stopset1)) != 0))
2646 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPORT", 6)));
2647 n += 1;
2649 if ((((1 << (mcReserved_implementationtok-mcReserved_arraytok)) & (stopset1)) != 0))
2651 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPLEMENTATION", 14)));
2652 n += 1;
2654 if ((((1 << (mcReserved_iftok-mcReserved_arraytok)) & (stopset1)) != 0))
2656 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IF", 2)));
2657 n += 1;
2659 if ((((1 << (mcReserved_fromtok-mcReserved_arraytok)) & (stopset1)) != 0))
2661 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FROM", 4)));
2662 n += 1;
2664 if ((((1 << (mcReserved_fortok-mcReserved_arraytok)) & (stopset1)) != 0))
2666 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FOR", 3)));
2667 n += 1;
2669 if ((((1 << (mcReserved_finallytok-mcReserved_arraytok)) & (stopset1)) != 0))
2671 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FINALLY", 7)));
2672 n += 1;
2674 if ((((1 << (mcReserved_exporttok-mcReserved_arraytok)) & (stopset1)) != 0))
2676 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXPORT", 6)));
2677 n += 1;
2679 if ((((1 << (mcReserved_exittok-mcReserved_arraytok)) & (stopset1)) != 0))
2681 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXIT", 4)));
2682 n += 1;
2684 if ((((1 << (mcReserved_excepttok-mcReserved_arraytok)) & (stopset1)) != 0))
2686 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXCEPT", 6)));
2687 n += 1;
2689 if ((((1 << (mcReserved_endtok-mcReserved_arraytok)) & (stopset1)) != 0))
2691 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "END", 3)));
2692 n += 1;
2694 if ((((1 << (mcReserved_elsiftok-mcReserved_arraytok)) & (stopset1)) != 0))
2696 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSIF", 5)));
2697 n += 1;
2699 if ((((1 << (mcReserved_elsetok-mcReserved_arraytok)) & (stopset1)) != 0))
2701 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSE", 4)));
2702 n += 1;
2704 if ((((1 << (mcReserved_dotok-mcReserved_arraytok)) & (stopset1)) != 0))
2706 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DO", 2)));
2707 n += 1;
2709 if ((((1 << (mcReserved_divtok-mcReserved_arraytok)) & (stopset1)) != 0))
2711 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DIV", 3)));
2712 n += 1;
2714 if ((((1 << (mcReserved_definitiontok-mcReserved_arraytok)) & (stopset1)) != 0))
2716 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DEFINITION", 10)));
2717 n += 1;
2719 if ((((1 << (mcReserved_consttok-mcReserved_arraytok)) & (stopset1)) != 0))
2721 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CONST", 5)));
2722 n += 1;
2724 if ((((1 << (mcReserved_casetok-mcReserved_arraytok)) & (stopset1)) != 0))
2726 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CASE", 4)));
2727 n += 1;
2729 if ((((1 << (mcReserved_bytok-mcReserved_arraytok)) & (stopset1)) != 0))
2731 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BY", 2)));
2732 n += 1;
2734 if ((((1 << (mcReserved_begintok-mcReserved_arraytok)) & (stopset1)) != 0))
2736 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BEGIN", 5)));
2737 n += 1;
2739 if ((((1 << (mcReserved_arraytok-mcReserved_arraytok)) & (stopset1)) != 0))
2741 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ARRAY", 5)));
2742 n += 1;
2744 if ((((1 << (mcReserved_andtok-mcReserved_eoftok)) & (stopset0)) != 0))
2746 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "AND", 3)));
2747 n += 1;
2749 if ((((1 << (mcReserved_colontok-mcReserved_eoftok)) & (stopset0)) != 0))
2751 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":", 1)));
2752 n += 1;
2754 if ((((1 << (mcReserved_periodperiodtok-mcReserved_eoftok)) & (stopset0)) != 0))
2756 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "..", 2)));
2757 n += 1;
2759 if ((((1 << (mcReserved_rdirectivetok-mcReserved_eoftok)) & (stopset0)) != 0))
2761 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*>", 2)));
2762 n += 1;
2764 if ((((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) & (stopset0)) != 0))
2766 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<*", 2)));
2767 n += 1;
2769 if ((((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) & (stopset0)) != 0))
2771 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">=", 2)));
2772 n += 1;
2774 if ((((1 << (mcReserved_lessequaltok-mcReserved_eoftok)) & (stopset0)) != 0))
2776 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<=", 2)));
2777 n += 1;
2779 if ((((1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) & (stopset0)) != 0))
2781 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<>", 2)));
2782 n += 1;
2784 if ((((1 << (mcReserved_hashtok-mcReserved_eoftok)) & (stopset0)) != 0))
2786 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "#", 1)));
2787 n += 1;
2789 if ((((1 << (mcReserved_equaltok-mcReserved_eoftok)) & (stopset0)) != 0))
2791 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "=", 1)));
2792 n += 1;
2794 if ((((1 << (mcReserved_uparrowtok-mcReserved_eoftok)) & (stopset0)) != 0))
2796 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "^", 1)));
2797 n += 1;
2799 if ((((1 << (mcReserved_semicolontok-mcReserved_eoftok)) & (stopset0)) != 0))
2801 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ";", 1)));
2802 n += 1;
2804 if ((((1 << (mcReserved_commatok-mcReserved_eoftok)) & (stopset0)) != 0))
2806 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ",", 1)));
2807 n += 1;
2809 if ((((1 << (mcReserved_periodtok-mcReserved_eoftok)) & (stopset0)) != 0))
2811 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1)));
2812 n += 1;
2814 if ((((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) & (stopset0)) != 0))
2816 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "&", 1)));
2817 n += 1;
2819 if ((((1 << (mcReserved_dividetok-mcReserved_eoftok)) & (stopset0)) != 0))
2821 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "/", 1)));
2822 n += 1;
2824 if ((((1 << (mcReserved_timestok-mcReserved_eoftok)) & (stopset0)) != 0))
2826 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*", 1)));
2827 n += 1;
2829 if ((((1 << (mcReserved_minustok-mcReserved_eoftok)) & (stopset0)) != 0))
2831 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-", 1)));
2832 n += 1;
2834 if ((((1 << (mcReserved_plustok-mcReserved_eoftok)) & (stopset0)) != 0))
2836 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "+", 1)));
2837 n += 1;
2839 if ((((1 << (mcReserved_doublequotestok-mcReserved_eoftok)) & (stopset0)) != 0))
2841 message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '`'), '"'), '\''), ',');
2842 n += 1;
2844 if ((((1 << (mcReserved_singlequotetok-mcReserved_eoftok)) & (stopset0)) != 0))
2846 message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '"'), '\''), '"'), ',');
2847 n += 1;
2849 if ((((1 << (mcReserved_greatertok-mcReserved_eoftok)) & (stopset0)) != 0))
2851 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">", 1)));
2852 n += 1;
2854 if ((((1 << (mcReserved_lesstok-mcReserved_eoftok)) & (stopset0)) != 0))
2856 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<", 1)));
2857 n += 1;
2859 if ((((1 << (mcReserved_rparatok-mcReserved_eoftok)) & (stopset0)) != 0))
2861 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ")", 1)));
2862 n += 1;
2864 if ((((1 << (mcReserved_lparatok-mcReserved_eoftok)) & (stopset0)) != 0))
2866 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "(", 1)));
2867 n += 1;
2869 if ((((1 << (mcReserved_rcbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2871 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "}", 1)));
2872 n += 1;
2874 if ((((1 << (mcReserved_lcbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2876 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{", 1)));
2877 n += 1;
2879 if ((((1 << (mcReserved_rsbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2881 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "]", 1)));
2882 n += 1;
2884 if ((((1 << (mcReserved_lsbratok-mcReserved_eoftok)) & (stopset0)) != 0))
2886 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "[", 1)));
2887 n += 1;
2889 if ((((1 << (mcReserved_bartok-mcReserved_eoftok)) & (stopset0)) != 0))
2891 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "|", 1)));
2892 n += 1;
2894 if ((((1 << (mcReserved_becomestok-mcReserved_eoftok)) & (stopset0)) != 0))
2896 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":=", 2)));
2897 n += 1;
2899 if ((((1 << (mcReserved_eoftok-mcReserved_eoftok)) & (stopset0)) != 0))
2900 {} /* empty. */
2901 /* eoftok has no token name (needed to generate error messages) */
2902 if (n == 0)
2904 str = DynamicStrings_InitString ((const char *) " syntax error", 13);
2905 message = DynamicStrings_KillString (message);
2907 else if (n == 1)
2909 /* avoid dangling else. */
2910 str = DynamicStrings_ConCat (message, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
2912 else
2914 /* avoid dangling else. */
2915 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message);
2916 message = DynamicStrings_KillString (message);
2918 return str;
2919 /* static analysis guarentees a RETURN statement will be used before here. */
2920 __builtin_unreachable ();
2925 DescribeError - issues a message explaining what tokens were expected
2928 static void DescribeError (void)
2930 DynamicStrings_String str;
2932 str = DynamicStrings_InitString ((const char *) "", 0);
2933 switch (mcLexBuf_currenttoken)
2935 case mcReserved_stringtok:
2936 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found string", 26), DynamicStrings_Mark (str));
2937 break;
2939 case mcReserved_realtok:
2940 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found real number", 31), DynamicStrings_Mark (str));
2941 break;
2943 case mcReserved_identtok:
2944 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found identifier", 30), DynamicStrings_Mark (str));
2945 break;
2947 case mcReserved_integertok:
2948 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found integer number", 34), DynamicStrings_Mark (str));
2949 break;
2951 case mcReserved_inlinetok:
2952 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __INLINE__", 30), DynamicStrings_Mark (str));
2953 break;
2955 case mcReserved_builtintok:
2956 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __BUILTIN__", 31), DynamicStrings_Mark (str));
2957 break;
2959 case mcReserved_attributetok:
2960 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __ATTRIBUTE__", 33), DynamicStrings_Mark (str));
2961 break;
2963 case mcReserved_filetok:
2964 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __FILE__", 28), DynamicStrings_Mark (str));
2965 break;
2967 case mcReserved_linetok:
2968 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __LINE__", 28), DynamicStrings_Mark (str));
2969 break;
2971 case mcReserved_datetok:
2972 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __DATE__", 28), DynamicStrings_Mark (str));
2973 break;
2975 case mcReserved_periodperiodperiodtok:
2976 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ...", 23), DynamicStrings_Mark (str));
2977 break;
2979 case mcReserved_volatiletok:
2980 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VOLATILE", 28), DynamicStrings_Mark (str));
2981 break;
2983 case mcReserved_asmtok:
2984 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ASM", 23), DynamicStrings_Mark (str));
2985 break;
2987 case mcReserved_withtok:
2988 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WITH", 24), DynamicStrings_Mark (str));
2989 break;
2991 case mcReserved_whiletok:
2992 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WHILE", 25), DynamicStrings_Mark (str));
2993 break;
2995 case mcReserved_vartok:
2996 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VAR", 23), DynamicStrings_Mark (str));
2997 break;
2999 case mcReserved_untiltok:
3000 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNTIL", 25), DynamicStrings_Mark (str));
3001 break;
3003 case mcReserved_typetok:
3004 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TYPE", 24), DynamicStrings_Mark (str));
3005 break;
3007 case mcReserved_totok:
3008 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TO", 22), DynamicStrings_Mark (str));
3009 break;
3011 case mcReserved_thentok:
3012 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found THEN", 24), DynamicStrings_Mark (str));
3013 break;
3015 case mcReserved_settok:
3016 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found SET", 23), DynamicStrings_Mark (str));
3017 break;
3019 case mcReserved_returntok:
3020 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETURN", 26), DynamicStrings_Mark (str));
3021 break;
3023 case mcReserved_retrytok:
3024 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETRY", 25), DynamicStrings_Mark (str));
3025 break;
3027 case mcReserved_repeattok:
3028 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REPEAT", 26), DynamicStrings_Mark (str));
3029 break;
3031 case mcReserved_remtok:
3032 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REM", 23), DynamicStrings_Mark (str));
3033 break;
3035 case mcReserved_recordtok:
3036 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RECORD", 26), DynamicStrings_Mark (str));
3037 break;
3039 case mcReserved_unqualifiedtok:
3040 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNQUALIFIED", 31), DynamicStrings_Mark (str));
3041 break;
3043 case mcReserved_qualifiedtok:
3044 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found QUALIFIED", 29), DynamicStrings_Mark (str));
3045 break;
3047 case mcReserved_proceduretok:
3048 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PROCEDURE", 29), DynamicStrings_Mark (str));
3049 break;
3051 case mcReserved_pointertok:
3052 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found POINTER", 27), DynamicStrings_Mark (str));
3053 break;
3055 case mcReserved_packedsettok:
3056 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PACKEDSET", 29), DynamicStrings_Mark (str));
3057 break;
3059 case mcReserved_ortok:
3060 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OR", 22), DynamicStrings_Mark (str));
3061 break;
3063 case mcReserved_oftok:
3064 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OF", 22), DynamicStrings_Mark (str));
3065 break;
3067 case mcReserved_nottok:
3068 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found NOT", 23), DynamicStrings_Mark (str));
3069 break;
3071 case mcReserved_moduletok:
3072 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MODULE", 26), DynamicStrings_Mark (str));
3073 break;
3075 case mcReserved_modtok:
3076 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MOD", 23), DynamicStrings_Mark (str));
3077 break;
3079 case mcReserved_looptok:
3080 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found LOOP", 24), DynamicStrings_Mark (str));
3081 break;
3083 case mcReserved_intok:
3084 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IN", 22), DynamicStrings_Mark (str));
3085 break;
3087 case mcReserved_importtok:
3088 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPORT", 26), DynamicStrings_Mark (str));
3089 break;
3091 case mcReserved_implementationtok:
3092 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPLEMENTATION", 34), DynamicStrings_Mark (str));
3093 break;
3095 case mcReserved_iftok:
3096 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IF", 22), DynamicStrings_Mark (str));
3097 break;
3099 case mcReserved_fromtok:
3100 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FROM", 24), DynamicStrings_Mark (str));
3101 break;
3103 case mcReserved_fortok:
3104 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FOR", 23), DynamicStrings_Mark (str));
3105 break;
3107 case mcReserved_finallytok:
3108 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FINALLY", 27), DynamicStrings_Mark (str));
3109 break;
3111 case mcReserved_exporttok:
3112 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXPORT", 26), DynamicStrings_Mark (str));
3113 break;
3115 case mcReserved_exittok:
3116 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXIT", 24), DynamicStrings_Mark (str));
3117 break;
3119 case mcReserved_excepttok:
3120 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXCEPT", 26), DynamicStrings_Mark (str));
3121 break;
3123 case mcReserved_endtok:
3124 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found END", 23), DynamicStrings_Mark (str));
3125 break;
3127 case mcReserved_elsiftok:
3128 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSIF", 25), DynamicStrings_Mark (str));
3129 break;
3131 case mcReserved_elsetok:
3132 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSE", 24), DynamicStrings_Mark (str));
3133 break;
3135 case mcReserved_dotok:
3136 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DO", 22), DynamicStrings_Mark (str));
3137 break;
3139 case mcReserved_divtok:
3140 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DIV", 23), DynamicStrings_Mark (str));
3141 break;
3143 case mcReserved_definitiontok:
3144 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DEFINITION", 30), DynamicStrings_Mark (str));
3145 break;
3147 case mcReserved_consttok:
3148 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CONST", 25), DynamicStrings_Mark (str));
3149 break;
3151 case mcReserved_casetok:
3152 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CASE", 24), DynamicStrings_Mark (str));
3153 break;
3155 case mcReserved_bytok:
3156 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BY", 22), DynamicStrings_Mark (str));
3157 break;
3159 case mcReserved_begintok:
3160 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BEGIN", 25), DynamicStrings_Mark (str));
3161 break;
3163 case mcReserved_arraytok:
3164 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ARRAY", 25), DynamicStrings_Mark (str));
3165 break;
3167 case mcReserved_andtok:
3168 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found AND", 23), DynamicStrings_Mark (str));
3169 break;
3171 case mcReserved_colontok:
3172 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :", 21), DynamicStrings_Mark (str));
3173 break;
3175 case mcReserved_periodperiodtok:
3176 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ..", 22), DynamicStrings_Mark (str));
3177 break;
3179 case mcReserved_rdirectivetok:
3180 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *>", 22), DynamicStrings_Mark (str));
3181 break;
3183 case mcReserved_ldirectivetok:
3184 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <*", 22), DynamicStrings_Mark (str));
3185 break;
3187 case mcReserved_greaterequaltok:
3188 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >=", 22), DynamicStrings_Mark (str));
3189 break;
3191 case mcReserved_lessequaltok:
3192 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <=", 22), DynamicStrings_Mark (str));
3193 break;
3195 case mcReserved_lessgreatertok:
3196 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <>", 22), DynamicStrings_Mark (str));
3197 break;
3199 case mcReserved_hashtok:
3200 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found #", 21), DynamicStrings_Mark (str));
3201 break;
3203 case mcReserved_equaltok:
3204 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found =", 21), DynamicStrings_Mark (str));
3205 break;
3207 case mcReserved_uparrowtok:
3208 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ^", 21), DynamicStrings_Mark (str));
3209 break;
3211 case mcReserved_semicolontok:
3212 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ;", 21), DynamicStrings_Mark (str));
3213 break;
3215 case mcReserved_commatok:
3216 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ,", 21), DynamicStrings_Mark (str));
3217 break;
3219 case mcReserved_periodtok:
3220 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found .", 21), DynamicStrings_Mark (str));
3221 break;
3223 case mcReserved_ambersandtok:
3224 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found &", 21), DynamicStrings_Mark (str));
3225 break;
3227 case mcReserved_dividetok:
3228 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found /", 21), DynamicStrings_Mark (str));
3229 break;
3231 case mcReserved_timestok:
3232 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *", 21), DynamicStrings_Mark (str));
3233 break;
3235 case mcReserved_minustok:
3236 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found -", 21), DynamicStrings_Mark (str));
3237 break;
3239 case mcReserved_plustok:
3240 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found +", 21), DynamicStrings_Mark (str));
3241 break;
3243 case mcReserved_doublequotestok:
3244 str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str));
3245 break;
3247 case mcReserved_singlequotetok:
3248 str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str));
3249 break;
3251 case mcReserved_greatertok:
3252 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >", 21), DynamicStrings_Mark (str));
3253 break;
3255 case mcReserved_lesstok:
3256 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <", 21), DynamicStrings_Mark (str));
3257 break;
3259 case mcReserved_rparatok:
3260 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found )", 21), DynamicStrings_Mark (str));
3261 break;
3263 case mcReserved_lparatok:
3264 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found (", 21), DynamicStrings_Mark (str));
3265 break;
3267 case mcReserved_rcbratok:
3268 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found }", 21), DynamicStrings_Mark (str));
3269 break;
3271 case mcReserved_lcbratok:
3272 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {", 21), DynamicStrings_Mark (str));
3273 break;
3275 case mcReserved_rsbratok:
3276 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ]", 21), DynamicStrings_Mark (str));
3277 break;
3279 case mcReserved_lsbratok:
3280 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found [", 21), DynamicStrings_Mark (str));
3281 break;
3283 case mcReserved_bartok:
3284 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found |", 21), DynamicStrings_Mark (str));
3285 break;
3287 case mcReserved_becomestok:
3288 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :=", 22), DynamicStrings_Mark (str));
3289 break;
3291 case mcReserved_eoftok:
3292 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ", 20), DynamicStrings_Mark (str));
3293 break;
3296 default:
3297 break;
3299 ErrorString (str);
3304 SyntaxError - after a syntax error we skip all tokens up until we reach
3305 a stop symbol.
3308 static void SyntaxError (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3310 DescribeError ();
3311 if (Debugging)
3313 mcPrintf_printf0 ((const char *) "\\nskipping token *** ", 21);
3316 yes the ORD(currenttoken) looks ugly, but it is *much* safer than
3317 using currenttoken<sometok as a change to the ordering of the
3318 token declarations below would cause this to break. Using ORD() we are
3319 immune from such changes
3321 while (! (((( ((unsigned int) (mcLexBuf_currenttoken)) < 32) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (mcLexBuf_currenttoken)) >= 32) && ( ((unsigned int) (mcLexBuf_currenttoken)) < 64)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (mcLexBuf_currenttoken)) >= 64) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & (stopset2)) != 0)))))
3323 mcLexBuf_getToken ();
3325 if (Debugging)
3327 mcPrintf_printf0 ((const char *) " ***\\n", 6);
3333 SyntaxCheck -
3336 static void SyntaxCheck (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3338 /* and again (see above re: ORD)
3340 if (! (((( ((unsigned int) (mcLexBuf_currenttoken)) < 32) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (mcLexBuf_currenttoken)) >= 32) && ( ((unsigned int) (mcLexBuf_currenttoken)) < 64)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (mcLexBuf_currenttoken)) >= 64) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & (stopset2)) != 0)))))
3342 SyntaxError (stopset0, stopset1, stopset2);
3348 WarnMissingToken - generates a warning message about a missing token, t.
3351 static void WarnMissingToken (mcReserved_toktype t)
3353 mcp3_SetOfStop0 s0;
3354 mcp3_SetOfStop1 s1;
3355 mcp3_SetOfStop2 s2;
3356 DynamicStrings_String str;
3358 s0 = (mcp3_SetOfStop0) 0;
3359 s1 = (mcp3_SetOfStop1) 0;
3360 s2 = (mcp3_SetOfStop2) 0;
3361 if ( ((unsigned int) (t)) < 32)
3363 s0 = (mcp3_SetOfStop0) ((1 << (t-mcReserved_eoftok)));
3365 else if ( ((unsigned int) (t)) < 64)
3367 /* avoid dangling else. */
3368 s1 = (mcp3_SetOfStop1) ((1 << (t-mcReserved_arraytok)));
3370 else
3372 /* avoid dangling else. */
3373 s2 = (mcp3_SetOfStop2) ((1 << (t-mcReserved_recordtok)));
3375 str = DescribeStop (s0, s1, s2);
3376 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error,", 13), DynamicStrings_Mark (str));
3377 mcError_errorStringAt (str, mcLexBuf_getTokenNo ());
3382 MissingToken - generates a warning message about a missing token, t.
3385 static void MissingToken (mcReserved_toktype t)
3387 WarnMissingToken (t);
3388 if ((((t != mcReserved_identtok) && (t != mcReserved_integertok)) && (t != mcReserved_realtok)) && (t != mcReserved_stringtok))
3390 if (Debugging)
3392 mcPrintf_printf0 ((const char *) "inserting token\\n", 17);
3394 mcLexBuf_insertToken (t);
3400 CheckAndInsert -
3403 static bool CheckAndInsert (mcReserved_toktype t, mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3405 if (((( ((unsigned int) (t)) < 32) && ((((1 << (t-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (t)) >= 32) && ( ((unsigned int) (t)) < 64)) && ((((1 << (t-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (t)) >= 64) && ((((1 << (t-mcReserved_recordtok)) & (stopset2)) != 0))))
3407 WarnMissingToken (t);
3408 mcLexBuf_insertTokenAndRewind (t);
3409 return true;
3411 else
3413 return false;
3415 /* static analysis guarentees a RETURN statement will be used before here. */
3416 __builtin_unreachable ();
3421 InStopSet
3424 static bool InStopSet (mcReserved_toktype t, mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3426 if (((( ((unsigned int) (t)) < 32) && ((((1 << (t-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (t)) >= 32) && ( ((unsigned int) (t)) < 64)) && ((((1 << (t-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (t)) >= 64) && ((((1 << (t-mcReserved_recordtok)) & (stopset2)) != 0))))
3428 return true;
3430 else
3432 return false;
3434 /* static analysis guarentees a RETURN statement will be used before here. */
3435 __builtin_unreachable ();
3440 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
3441 If it is not then it will insert a token providing the token
3442 is one of ; ] ) } . OF END ,
3444 if the stopset contains <identtok> then we do not insert a token
3447 static void PeepToken (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3449 /* and again (see above re: ORD)
3451 if ((! (((( ((unsigned int) (mcLexBuf_currenttoken)) < 32) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & (stopset0)) != 0))) || ((( ((unsigned int) (mcLexBuf_currenttoken)) >= 32) && ( ((unsigned int) (mcLexBuf_currenttoken)) < 64)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & (stopset1)) != 0)))) || (( ((unsigned int) (mcLexBuf_currenttoken)) >= 64) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & (stopset2)) != 0))))) && (! (InStopSet (mcReserved_identtok, stopset0, stopset1, stopset2))))
3453 /* SyntaxCheck would fail since currentoken is not part of the stopset
3454 we check to see whether any of currenttoken might be a commonly omitted token */
3455 if ((((((((CheckAndInsert (mcReserved_semicolontok, stopset0, stopset1, stopset2)) || (CheckAndInsert (mcReserved_rsbratok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_rparatok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_rcbratok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_periodtok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_oftok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_endtok, stopset0, stopset1, stopset2))) || (CheckAndInsert (mcReserved_commatok, stopset0, stopset1, stopset2)))
3456 {} /* empty. */
3462 Expect -
3465 static void Expect (mcReserved_toktype t, mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3467 if (mcLexBuf_currenttoken == t)
3469 /* avoid dangling else. */
3470 mcLexBuf_getToken ();
3471 if (Pass1)
3473 PeepToken (stopset0, stopset1, stopset2);
3476 else
3478 MissingToken (t);
3480 SyntaxCheck (stopset0, stopset1, stopset2);
3485 Ident - error checking varient of Ident
3488 static void Ident (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3490 curident = nameKey_makekey (mcLexBuf_currentstring);
3491 Expect (mcReserved_identtok, stopset0, stopset1, stopset2);
3496 string -
3499 static void string (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3501 curstring = nameKey_makekey (mcLexBuf_currentstring);
3502 Expect (mcReserved_stringtok, stopset0, stopset1, stopset2);
3507 Integer -
3510 static void Integer (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3512 Expect (mcReserved_integertok, stopset0, stopset1, stopset2);
3517 Real -
3520 static void Real (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3522 Expect (mcReserved_realtok, stopset0, stopset1, stopset2);
3527 FileUnit := DefinitionModule |
3528 ImplementationOrProgramModule
3530 first symbols:implementationtok, moduletok, definitiontok
3532 cannot reachend
3535 static void FileUnit (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3537 if (mcLexBuf_currenttoken == mcReserved_definitiontok)
3539 DefinitionModule (stopset0, stopset1, stopset2);
3541 else if (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_implementationtok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))))) != 0)))
3543 /* avoid dangling else. */
3544 ImplementationOrProgramModule (stopset0, stopset1, stopset2);
3546 else
3548 /* avoid dangling else. */
3549 ErrorArray ((const char *) "expecting one of: IMPLEMENTATION MODULE DEFINITION", 50);
3555 ProgramModule := 'MODULE' Ident
3556 % curmodule := lookupModule (curident) %
3558 % enterScope (curmodule) %
3560 % resetEnumPos (curmodule) %
3561 [ Priority ] ';' { Import } Block
3562 Ident
3563 % checkEndName (curmodule, curident, 'program module') %
3565 % setConstExpComplete (curmodule) %
3567 % leaveScope %
3570 first symbols:moduletok
3572 cannot reachend
3575 static void ProgramModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3577 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3578 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
3579 curmodule = decl_lookupModule (curident);
3580 decl_enterScope (curmodule);
3581 decl_resetEnumPos (curmodule);
3582 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
3584 Priority (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
3586 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
3587 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
3589 Import (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
3591 /* while */
3592 Block (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3593 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3594 checkEndName (curmodule, curident, (const char *) "program module", 14);
3595 decl_setConstExpComplete (curmodule);
3596 decl_leaveScope ();
3597 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
3602 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
3603 Ident
3604 % curmodule := lookupImp (curident) %
3606 % enterScope (lookupDef (curident)) %
3608 % enterScope (curmodule) %
3610 % resetEnumPos (curmodule) %
3611 [ Priority ] ';' { Import }
3612 Block Ident
3613 % checkEndName (curmodule, curident, 'implementation module') %
3615 % setConstExpComplete (curmodule) %
3617 % leaveScope ; leaveScope %
3620 first symbols:implementationtok
3622 cannot reachend
3625 static void ImplementationModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3627 Expect (mcReserved_implementationtok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2);
3628 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3629 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
3630 curmodule = decl_lookupImp (curident);
3631 decl_enterScope (decl_lookupDef (curident));
3632 decl_enterScope (curmodule);
3633 decl_resetEnumPos (curmodule);
3634 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
3636 Priority (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
3638 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
3639 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
3641 Import (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
3643 /* while */
3644 Block (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3645 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3646 checkEndName (curmodule, curident, (const char *) "implementation module", 21);
3647 decl_setConstExpComplete (curmodule);
3648 decl_leaveScope ();
3649 decl_leaveScope ();
3650 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
3655 ImplementationOrProgramModule := ImplementationModule |
3656 ProgramModule
3658 first symbols:moduletok, implementationtok
3660 cannot reachend
3663 static void ImplementationOrProgramModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3665 if (mcLexBuf_currenttoken == mcReserved_implementationtok)
3667 ImplementationModule (stopset0, stopset1, stopset2);
3669 else if (mcLexBuf_currenttoken == mcReserved_moduletok)
3671 /* avoid dangling else. */
3672 ProgramModule (stopset0, stopset1, stopset2);
3674 else
3676 /* avoid dangling else. */
3677 ErrorArray ((const char *) "expecting one of: MODULE IMPLEMENTATION", 39);
3683 Number := Integer | Real
3685 first symbols:realtok, integertok
3687 cannot reachend
3690 static void Number (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3692 if (mcLexBuf_currenttoken == mcReserved_integertok)
3694 Integer (stopset0, stopset1, stopset2);
3696 else if (mcLexBuf_currenttoken == mcReserved_realtok)
3698 /* avoid dangling else. */
3699 Real (stopset0, stopset1, stopset2);
3701 else
3703 /* avoid dangling else. */
3704 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
3710 Qualident := Ident { '.' Ident }
3712 first symbols:identtok
3714 cannot reachend
3717 static void Qualident (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3719 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3720 while (mcLexBuf_currenttoken == mcReserved_periodtok)
3722 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3723 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3725 /* while */
3730 ConstantDeclaration :=
3731 % VAR d, e: node ; %
3732 Ident
3733 % d := lookupSym (curident) %
3734 '=' ConstExpression
3735 % e := pop () %
3737 % assert (isConst (d)) %
3739 % putConst (d, e) %
3742 first symbols:identtok
3744 cannot reachend
3747 static void ConstantDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3749 decl_node d;
3750 decl_node e;
3752 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
3753 d = decl_lookupSym (curident);
3754 Expect (mcReserved_equaltok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3755 ConstExpression (stopset0, stopset1, stopset2);
3756 e = pop ();
3757 mcDebug_assert (decl_isConst (d));
3758 decl_putConst (d, e);
3763 ConstExpressionNop := SimpleConstExpr
3764 % VAR n: node ; %
3765 [ Relation SimpleConstExpr ]
3767 % n := makeConstExp () %
3770 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3772 cannot reachend
3775 static void ConstExpressionNop (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3777 decl_node n;
3779 SimpleConstExpr (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
3780 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_greaterequaltok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_intok))
3782 Relation (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3783 SimpleConstExpr (stopset0, stopset1, stopset2);
3785 n = decl_makeConstExp ();
3790 ConstExpression :=
3791 % VAR n: node ; %
3793 % n := push (makeConstExp ()) %
3794 SimpleConstExpr [ Relation SimpleConstExpr ]
3796 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3798 cannot reachend
3801 static void ConstExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3803 decl_node n;
3805 n = push (decl_makeConstExp ());
3806 SimpleConstExpr (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
3807 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_greaterequaltok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_intok))
3809 Relation (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3810 SimpleConstExpr (stopset0, stopset1, stopset2);
3816 Relation := '=' | '#' | '<>' | '<' | '<=' |
3817 '>' | '>=' | 'IN'
3819 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
3821 cannot reachend
3824 static void Relation (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3826 if (mcLexBuf_currenttoken == mcReserved_equaltok)
3828 Expect (mcReserved_equaltok, stopset0, stopset1, stopset2);
3830 else if (mcLexBuf_currenttoken == mcReserved_hashtok)
3832 /* avoid dangling else. */
3833 Expect (mcReserved_hashtok, stopset0, stopset1, stopset2);
3835 else if (mcLexBuf_currenttoken == mcReserved_lessgreatertok)
3837 /* avoid dangling else. */
3838 Expect (mcReserved_lessgreatertok, stopset0, stopset1, stopset2);
3840 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
3842 /* avoid dangling else. */
3843 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2);
3845 else if (mcLexBuf_currenttoken == mcReserved_lessequaltok)
3847 /* avoid dangling else. */
3848 Expect (mcReserved_lessequaltok, stopset0, stopset1, stopset2);
3850 else if (mcLexBuf_currenttoken == mcReserved_greatertok)
3852 /* avoid dangling else. */
3853 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
3855 else if (mcLexBuf_currenttoken == mcReserved_greaterequaltok)
3857 /* avoid dangling else. */
3858 Expect (mcReserved_greaterequaltok, stopset0, stopset1, stopset2);
3860 else if (mcLexBuf_currenttoken == mcReserved_intok)
3862 /* avoid dangling else. */
3863 Expect (mcReserved_intok, stopset0, stopset1, stopset2);
3865 else
3867 /* avoid dangling else. */
3868 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
3874 SimpleConstExpr := UnaryOrConstTerm { AddOperator
3875 ConstTerm }
3877 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3879 cannot reachend
3882 static void SimpleConstExpr (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3884 UnaryOrConstTerm (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
3885 while (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_ortok))
3887 AddOperator (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3888 ConstTerm (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
3890 /* while */
3895 UnaryOrConstTerm := '+' ConstTerm |
3896 '-' ConstTerm |
3897 ConstTerm
3899 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3901 cannot reachend
3904 static void UnaryOrConstTerm (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3906 if (mcLexBuf_currenttoken == mcReserved_plustok)
3908 Expect (mcReserved_plustok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3909 ConstTerm (stopset0, stopset1, stopset2);
3911 else if (mcLexBuf_currenttoken == mcReserved_minustok)
3913 /* avoid dangling else. */
3914 Expect (mcReserved_minustok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
3915 ConstTerm (stopset0, stopset1, stopset2);
3917 else if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
3919 /* avoid dangling else. */
3920 ConstTerm (stopset0, stopset1, stopset2);
3922 else
3924 /* avoid dangling else. */
3925 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ identifier { string - +", 88);
3931 AddOperator := '+' | '-' | 'OR'
3933 first symbols:ortok, minustok, plustok
3935 cannot reachend
3938 static void AddOperator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3940 if (mcLexBuf_currenttoken == mcReserved_plustok)
3942 Expect (mcReserved_plustok, stopset0, stopset1, stopset2);
3944 else if (mcLexBuf_currenttoken == mcReserved_minustok)
3946 /* avoid dangling else. */
3947 Expect (mcReserved_minustok, stopset0, stopset1, stopset2);
3949 else if (mcLexBuf_currenttoken == mcReserved_ortok)
3951 /* avoid dangling else. */
3952 Expect (mcReserved_ortok, stopset0, stopset1, stopset2);
3954 else
3956 /* avoid dangling else. */
3957 ErrorArray ((const char *) "expecting one of: OR - +", 24);
3963 ConstTerm := ConstFactor { MulOperator ConstFactor }
3965 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
3967 cannot reachend
3970 static void ConstTerm (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3972 ConstFactor (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_timestok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_modtok-mcReserved_arraytok)) | (1 << (mcReserved_divtok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
3973 while ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))))) != 0))) || (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))))) != 0)))) || (mcLexBuf_currenttoken == mcReserved_remtok))
3975 MulOperator (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
3976 ConstFactor (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
3978 /* while */
3983 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
3984 'REM' | 'AND' | '&'
3986 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
3988 cannot reachend
3991 static void MulOperator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
3993 if (mcLexBuf_currenttoken == mcReserved_timestok)
3995 Expect (mcReserved_timestok, stopset0, stopset1, stopset2);
3997 else if (mcLexBuf_currenttoken == mcReserved_dividetok)
3999 /* avoid dangling else. */
4000 Expect (mcReserved_dividetok, stopset0, stopset1, stopset2);
4002 else if (mcLexBuf_currenttoken == mcReserved_divtok)
4004 /* avoid dangling else. */
4005 Expect (mcReserved_divtok, stopset0, stopset1, stopset2);
4007 else if (mcLexBuf_currenttoken == mcReserved_modtok)
4009 /* avoid dangling else. */
4010 Expect (mcReserved_modtok, stopset0, stopset1, stopset2);
4012 else if (mcLexBuf_currenttoken == mcReserved_remtok)
4014 /* avoid dangling else. */
4015 Expect (mcReserved_remtok, stopset0, stopset1, stopset2);
4017 else if (mcLexBuf_currenttoken == mcReserved_andtok)
4019 /* avoid dangling else. */
4020 Expect (mcReserved_andtok, stopset0, stopset1, stopset2);
4022 else if (mcLexBuf_currenttoken == mcReserved_ambersandtok)
4024 /* avoid dangling else. */
4025 Expect (mcReserved_ambersandtok, stopset0, stopset1, stopset2);
4027 else
4029 /* avoid dangling else. */
4030 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
4036 ConstFactor := Number | ConstString |
4037 ConstSetOrQualidentOrFunction |
4038 '(' ConstExpressionNop ')' |
4039 'NOT' ConstFactor |
4040 ConstAttribute
4042 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
4044 cannot reachend
4047 static void ConstFactor (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4049 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok))))) != 0)))
4051 Number (stopset0, stopset1, stopset2);
4053 else if (mcLexBuf_currenttoken == mcReserved_stringtok)
4055 /* avoid dangling else. */
4056 ConstString (stopset0, stopset1, stopset2);
4058 else if ((mcLexBuf_currenttoken == mcReserved_lcbratok) || (mcLexBuf_currenttoken == mcReserved_identtok))
4060 /* avoid dangling else. */
4061 ConstSetOrQualidentOrFunction (stopset0, stopset1, stopset2);
4063 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
4065 /* avoid dangling else. */
4066 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4067 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4068 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4070 else if (mcLexBuf_currenttoken == mcReserved_nottok)
4072 /* avoid dangling else. */
4073 Expect (mcReserved_nottok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4074 ConstFactor (stopset0, stopset1, stopset2);
4076 else if (mcLexBuf_currenttoken == mcReserved_attributetok)
4078 /* avoid dangling else. */
4079 ConstAttribute (stopset0, stopset1, stopset2);
4081 else
4083 /* avoid dangling else. */
4084 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( identifier { string integer number real number", 84);
4090 ConstString := string
4092 first symbols:stringtok
4094 cannot reachend
4097 static void ConstString (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4099 string (stopset0, stopset1, stopset2);
4104 ComponentElement := ConstExpressionNop [ '..' ConstExpressionNop ]
4106 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4108 cannot reachend
4111 static void ComponentElement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4113 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
4114 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
4116 Expect (mcReserved_periodperiodtok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4117 ConstExpressionNop (stopset0, stopset1, stopset2);
4123 ComponentValue := ComponentElement [ 'BY' ConstExpressionNop ]
4125 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4127 cannot reachend
4130 static void ComponentValue (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4132 ComponentElement (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok))), stopset2);
4133 if (mcLexBuf_currenttoken == mcReserved_bytok)
4135 Expect (mcReserved_bytok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4136 ConstExpressionNop (stopset0, stopset1, stopset2);
4142 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
4144 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4146 cannot reachend
4149 static void ArraySetRecordValue (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4151 ComponentValue (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4152 while (mcLexBuf_currenttoken == mcReserved_commatok)
4154 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4155 ComponentValue (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4157 /* while */
4162 Constructor := '{' [ ArraySetRecordValue ] '}'
4164 first symbols:lcbratok
4166 cannot reachend
4169 static void Constructor (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4171 Expect (mcReserved_lcbratok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4172 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
4174 ArraySetRecordValue (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok))), stopset1, stopset2);
4176 Expect (mcReserved_rcbratok, stopset0, stopset1, stopset2);
4181 ConstSetOrQualidentOrFunction := Qualident [ Constructor |
4182 ConstActualParameters ] |
4183 Constructor
4185 first symbols:lcbratok, identtok
4187 cannot reachend
4190 static void ConstSetOrQualidentOrFunction (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4192 if (mcLexBuf_currenttoken == mcReserved_identtok)
4194 /* avoid dangling else. */
4195 Qualident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lcbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4196 if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0)))
4198 /* avoid gcc warning by using compound statement even if not strictly necessary. */
4199 /* seen optional [ | ] expression */
4200 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
4202 Constructor (stopset0, stopset1, stopset2);
4204 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
4206 /* avoid dangling else. */
4207 ConstActualParameters (stopset0, stopset1, stopset2);
4209 else
4211 /* avoid dangling else. */
4212 ErrorArray ((const char *) "expecting one of: ( {", 21);
4215 /* end of optional [ | ] expression */
4217 else if (mcLexBuf_currenttoken == mcReserved_lcbratok)
4219 /* avoid dangling else. */
4220 Constructor (stopset0, stopset1, stopset2);
4222 else
4224 /* avoid dangling else. */
4225 ErrorArray ((const char *) "expecting one of: { identifier", 30);
4231 ConstActualParameters := '(' [ ConstExpList ] ')'
4233 first symbols:lparatok
4235 cannot reachend
4238 static void ConstActualParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4240 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4241 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))))) != 0))))
4243 ConstExpList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4245 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4250 ConstExpList := ConstExpressionNop { ',' ConstExpressionNop }
4252 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4254 cannot reachend
4257 static void ConstExpList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4259 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4260 while (mcLexBuf_currenttoken == mcReserved_commatok)
4262 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4263 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4265 /* while */
4270 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4271 '(' '(' ConstAttributeExpression
4272 ')' ')'
4274 first symbols:attributetok
4276 cannot reachend
4279 static void ConstAttribute (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4281 Expect (mcReserved_attributetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_builtintok-mcReserved_recordtok))));
4282 Expect (mcReserved_builtintok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4283 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4284 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lesstok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4285 ConstAttributeExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4286 Expect (mcReserved_rparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4287 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4292 ConstAttributeExpression := Ident | '<' Qualident
4293 ',' Ident '>'
4295 first symbols:lesstok, identtok
4297 cannot reachend
4300 static void ConstAttributeExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4302 if (mcLexBuf_currenttoken == mcReserved_identtok)
4304 Ident (stopset0, stopset1, stopset2);
4306 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
4308 /* avoid dangling else. */
4309 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4310 Qualident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4311 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4312 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_greatertok-mcReserved_eoftok))), stopset1, stopset2);
4313 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
4315 else
4317 /* avoid dangling else. */
4318 ErrorArray ((const char *) "expecting one of: < identifier", 30);
4324 ByteAlignment := ''
4326 first symbols:ldirectivetok
4328 cannot reachend
4331 static void ByteAlignment (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4333 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4334 AttributeExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4335 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4340 OptAlignmentExpression := [ AlignmentExpression ]
4342 first symbols:lparatok
4344 reachend
4347 static void OptAlignmentExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4349 if (mcLexBuf_currenttoken == mcReserved_lparatok)
4351 AlignmentExpression (stopset0, stopset1, stopset2);
4357 AlignmentExpression := '(' ConstExpressionNop ')'
4359 first symbols:lparatok
4361 cannot reachend
4364 static void AlignmentExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4366 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4367 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4368 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4373 Alignment := [ ByteAlignment ]
4375 first symbols:ldirectivetok
4377 reachend
4380 static void Alignment (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4382 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4384 ByteAlignment (stopset0, stopset1, stopset2);
4390 IdentList := Ident { ',' Ident }
4392 first symbols:identtok
4394 cannot reachend
4397 static void IdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4399 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4400 while (mcLexBuf_currenttoken == mcReserved_commatok)
4402 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4403 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4405 /* while */
4410 PushIdentList :=
4411 % VAR n: node ; %
4413 % n := makeIdentList () %
4414 Ident
4415 % checkDuplicate (putIdent (n, curident)) %
4416 { ',' Ident
4417 % checkDuplicate (putIdent (n, curident)) %
4419 % n := push (n) %
4422 first symbols:identtok
4424 cannot reachend
4427 static void PushIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4429 decl_node n;
4431 n = decl_makeIdentList ();
4432 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4433 checkDuplicate (decl_putIdent (n, curident));
4434 while (mcLexBuf_currenttoken == mcReserved_commatok)
4436 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4437 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4438 checkDuplicate (decl_putIdent (n, curident));
4440 /* while */
4441 n = push (n);
4446 SubrangeType :=
4447 % VAR low, high: node ; d: CARDINAL ; %
4449 % d := depth () %
4450 ConstExpression
4451 % low := pop () %
4453 % assert (d = depth ()) %
4454 '..' ConstExpression
4455 % high := pop () %
4457 % assert (d = depth ()) %
4459 % typeExp := push (makeSubrange (low, high)) %
4461 % assert (d = depth () - 1) %
4464 first symbols:lsbratok
4466 cannot reachend
4469 static void SubrangeType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4471 decl_node low;
4472 decl_node high;
4473 unsigned int d;
4475 Expect (mcReserved_lsbratok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4476 d = depth ();
4477 ConstExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
4478 low = pop ();
4479 mcDebug_assert (d == (depth ()));
4480 Expect (mcReserved_periodperiodtok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4481 ConstExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
4482 high = pop ();
4483 mcDebug_assert (d == (depth ()));
4484 typeExp = push (decl_makeSubrange (low, high));
4485 mcDebug_assert (d == ((depth ())-1));
4486 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
4491 ArrayType := 'ARRAY'
4492 % VAR c: CARDINAL ; t, n: node ; %
4494 % c := 0 %
4495 SimpleType
4496 % INC (c) %
4497 { ',' SimpleType
4498 % INC (c) %
4499 } 'OF' Type
4500 % n := push (makeIndexedArray (c, pop ())) %
4503 first symbols:arraytok
4505 cannot reachend
4508 static void ArrayType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4510 unsigned int c;
4511 decl_node t;
4512 decl_node n;
4514 Expect (mcReserved_arraytok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4515 c = 0;
4516 SimpleType (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4517 c += 1;
4518 while (mcLexBuf_currenttoken == mcReserved_commatok)
4520 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4521 SimpleType (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4522 c += 1;
4524 /* while */
4525 Expect (mcReserved_oftok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
4526 Type (stopset0, stopset1, stopset2);
4527 n = push (makeIndexedArray (c, pop ()));
4532 RecordType := 'RECORD'
4533 % VAR n: node ; %
4535 % n := push (makeRecord ()) %
4537 % n := push (NIL) no varient %
4538 [ DefaultRecordAttributes ] FieldListSequence
4540 % assert (pop ()=NIL) %
4541 'END'
4543 first symbols:recordtok
4545 cannot reachend
4548 static void RecordType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4550 decl_node n;
4552 Expect (mcReserved_recordtok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4553 n = push (decl_makeRecord ());
4554 n = push (static_cast<decl_node> (NULL)); /* no varient */
4555 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4557 DefaultRecordAttributes (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4559 FieldListSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
4560 mcDebug_assert ((pop ()) == NULL);
4561 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
4566 DefaultRecordAttributes := ''
4568 first symbols:ldirectivetok
4570 cannot reachend
4573 static void DefaultRecordAttributes (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4575 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4576 AttributeExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4577 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4582 RecordFieldPragma := [ '' ]
4584 first symbols:ldirectivetok
4586 reachend
4589 static void RecordFieldPragma (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4591 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4593 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4594 FieldPragmaExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4595 while (mcLexBuf_currenttoken == mcReserved_commatok)
4597 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4598 FieldPragmaExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4600 /* while */
4601 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4607 FieldPragmaExpression := Ident PragmaConstExpression
4609 first symbols:identtok
4611 cannot reachend
4614 static void FieldPragmaExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4616 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4617 PragmaConstExpression (stopset0, stopset1, stopset2);
4622 PragmaConstExpression := [ '(' ConstExpressionNop
4623 ')' ]
4625 first symbols:lparatok
4627 reachend
4630 static void PragmaConstExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4632 if (mcLexBuf_currenttoken == mcReserved_lparatok)
4634 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4635 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4636 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4642 AttributeExpression := Ident '(' ConstExpressionNop
4645 first symbols:identtok
4647 cannot reachend
4650 static void AttributeExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4652 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4653 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
4654 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4655 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4660 FieldListSequence := FieldListStatement { ';' FieldListStatement }
4662 first symbols:casetok, identtok, semicolontok
4664 reachend
4667 static void FieldListSequence (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4669 FieldListStatement (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
4670 while (mcLexBuf_currenttoken == mcReserved_semicolontok)
4672 Expect (mcReserved_semicolontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4673 FieldListStatement (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
4675 /* while */
4680 FieldListStatement := [ FieldList ]
4682 first symbols:identtok, casetok
4684 reachend
4687 static void FieldListStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4689 if ((mcLexBuf_currenttoken == mcReserved_casetok) || (mcLexBuf_currenttoken == mcReserved_identtok))
4691 FieldList (stopset0, stopset1, stopset2);
4697 FieldList :=
4698 % VAR r, i, f, t, n, v, w: node ; d: CARDINAL ; %
4700 % d := depth () %
4702 % v := pop () ; assert ((v=NIL) OR isVarient (v)) %
4704 % r := peep () ; assert (isRecord (r) OR isVarientField (r)) %
4706 % v := push (v) %
4708 % assert (d=depth ()) %
4710 % assert (((v=NIL) AND isRecord (r)) OR ((v#NIL) AND isVarientField (r))) %
4711 PushIdentList ':'
4712 % assert (d=depth () - 1) %
4714 % i := pop () %
4715 Type
4716 % assert (d=depth () - 1) %
4718 % t := pop () %
4719 RecordFieldPragma
4720 % assert (d=depth ()) %
4722 % r := addFieldsToRecord (r, v, i, t) %
4724 % assert (d=depth ()) %
4726 'CASE'
4727 % addRecordToList %
4729 % d := depth () %
4731 % v := pop () ; assert ((v=NIL) OR isVarient (v)) %
4733 % r := peep () ; assert (isRecord (r) OR isVarientField (r)) %
4735 % v := push (v) %
4737 % assert (((v=NIL) AND isRecord (r)) OR ((v#NIL) AND isRecordField (r))) %
4739 % w := push (makeVarient (r)) %
4741 % assert (d = depth () - 1) %
4743 % addVarientToList %
4744 CaseTag 'OF'
4745 % assert (d = depth () - 1) %
4746 Varient
4747 % assert (d = depth () - 1) %
4748 { '|' Varient
4749 % assert (d = depth () - 1) %
4751 % w := peep () ; assert (isVarient (w)) %
4753 % assert (d = depth () - 1) %
4754 [ 'ELSE' FieldListSequence ] 'END'
4756 % w := pop () ; assert (isVarient (w)) %
4758 % assert (d=depth ()) %
4761 first symbols:casetok, identtok
4763 cannot reachend
4766 static void FieldList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4768 decl_node r;
4769 decl_node i;
4770 decl_node f;
4771 decl_node t;
4772 decl_node n;
4773 decl_node v;
4774 decl_node w;
4775 unsigned int d;
4777 if (mcLexBuf_currenttoken == mcReserved_identtok)
4779 d = depth ();
4780 v = pop ();
4781 mcDebug_assert ((v == NULL) || (decl_isVarient (v)));
4782 r = peep ();
4783 mcDebug_assert ((decl_isRecord (r)) || (decl_isVarientField (r)));
4784 v = push (v);
4785 mcDebug_assert (d == (depth ()));
4786 mcDebug_assert (((v == NULL) && (decl_isRecord (r))) || ((v != NULL) && (decl_isVarientField (r))));
4787 PushIdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
4788 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
4789 mcDebug_assert (d == ((depth ())-1));
4790 i = pop ();
4791 Type (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4792 mcDebug_assert (d == ((depth ())-1));
4793 t = pop ();
4794 RecordFieldPragma (stopset0, stopset1, stopset2);
4795 mcDebug_assert (d == (depth ()));
4796 r = decl_addFieldsToRecord (r, v, i, t);
4797 mcDebug_assert (d == (depth ()));
4799 else if (mcLexBuf_currenttoken == mcReserved_casetok)
4801 /* avoid dangling else. */
4802 Expect (mcReserved_casetok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4803 /* addRecordToList */
4804 d = depth ();
4805 v = pop ();
4806 mcDebug_assert ((v == NULL) || (decl_isVarient (v)));
4807 r = peep ();
4808 mcDebug_assert ((decl_isRecord (r)) || (decl_isVarientField (r)));
4809 v = push (v);
4810 mcDebug_assert (((v == NULL) && (decl_isRecord (r))) || ((v != NULL) && (decl_isRecordField (r))));
4811 w = push (decl_makeVarient (r));
4812 mcDebug_assert (d == ((depth ())-1));
4813 /* addVarientToList */
4814 CaseTag (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4815 Expect (mcReserved_oftok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4816 mcDebug_assert (d == ((depth ())-1));
4817 Varient (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
4818 mcDebug_assert (d == ((depth ())-1));
4819 while (mcLexBuf_currenttoken == mcReserved_bartok)
4821 Expect (mcReserved_bartok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
4822 Varient (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok))), stopset2);
4823 mcDebug_assert (d == ((depth ())-1));
4825 /* while */
4826 w = peep ();
4827 mcDebug_assert (decl_isVarient (w));
4828 mcDebug_assert (d == ((depth ())-1));
4829 if (mcLexBuf_currenttoken == mcReserved_elsetok)
4831 Expect (mcReserved_elsetok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4832 FieldListSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
4834 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
4835 w = pop ();
4836 mcDebug_assert (decl_isVarient (w));
4837 mcDebug_assert (d == (depth ()));
4839 else
4841 /* avoid dangling else. */
4842 ErrorArray ((const char *) "expecting one of: CASE identifier", 33);
4848 TagIdent := Ident |
4849 % curident := NulName %
4852 first symbols:identtok
4854 reachend
4857 static void TagIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4859 if (mcLexBuf_currenttoken == mcReserved_identtok)
4861 Ident (stopset0, stopset1, stopset2);
4863 else
4865 curident = nameKey_NulName;
4871 CaseTag :=
4872 % VAR tagident: Name ; q, v, w, r: node ; %
4874 % w := pop () ; v := pop () ; r := peep () ; v := push (v) ; w := push (w) %
4876 % assert (isVarient (w)) %
4878 % assert ((v=NIL) OR isVarient (v)) %
4880 % assert (isRecord (r) OR isVarientField (r)) %
4882 % assert (isVarient (push (pop ()))) %
4883 TagIdent
4884 % tagident := curident %
4885 ( ':' PushQualident
4886 % q := pop () %
4888 % assert (isVarient (push (pop ()))) %
4890 % q := NIL %
4892 % buildVarientSelector (r, w, tagident, q) %
4895 first symbols:colontok, identtok
4897 reachend
4900 static void CaseTag (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4902 nameKey_Name tagident;
4903 decl_node q;
4904 decl_node v;
4905 decl_node w;
4906 decl_node r;
4908 w = pop ();
4909 v = pop ();
4910 r = peep ();
4911 v = push (v);
4912 w = push (w);
4913 mcDebug_assert (decl_isVarient (w));
4914 mcDebug_assert ((v == NULL) || (decl_isVarient (v)));
4915 mcDebug_assert ((decl_isRecord (r)) || (decl_isVarientField (r)));
4916 mcDebug_assert (decl_isVarient (push (pop ())));
4917 TagIdent (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
4918 tagident = curident;
4919 if (mcLexBuf_currenttoken == mcReserved_colontok)
4921 Expect (mcReserved_colontok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4922 PushQualident (stopset0, stopset1, stopset2);
4923 q = pop ();
4924 mcDebug_assert (decl_isVarient (push (pop ())));
4926 else
4928 q = static_cast<decl_node> (NULL);
4930 decl_buildVarientSelector (r, w, tagident, q);
4935 Varient :=
4936 % VAR p, r, v, f: node ; d: CARDINAL ; %
4938 % d := depth () %
4940 % assert (isVarient (peep ())) %
4942 % v := pop () ; assert (isVarient (v)) %
4944 % r := pop () %
4946 % p := peep () %
4948 % r := push (r) %
4950 % f := push (buildVarientFieldRecord (v, p)) %
4952 % v := push (v) %
4953 VarientCaseLabelList ':' FieldListSequence
4955 % v := pop () %
4957 % f := pop () %
4959 % assert (isVarientField (f)) %
4961 % assert (isVarient (v)) %
4963 % v := push (v) %
4965 % assert (isVarient (peep ())) %
4967 % assert (d=depth ()) %
4970 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4972 reachend
4975 static void Varient (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
4977 decl_node p;
4978 decl_node r;
4979 decl_node v;
4980 decl_node f;
4981 unsigned int d;
4983 d = depth ();
4984 mcDebug_assert (decl_isVarient (peep ()));
4985 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))))) != 0))))
4987 v = pop ();
4988 mcDebug_assert (decl_isVarient (v));
4989 r = pop ();
4990 p = peep ();
4991 r = push (r);
4992 f = push (decl_buildVarientFieldRecord (v, p));
4993 v = push (v);
4994 VarientCaseLabelList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
4995 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4996 FieldListSequence (stopset0, stopset1, stopset2);
4997 v = pop ();
4998 f = pop ();
4999 mcDebug_assert (decl_isVarientField (f));
5000 mcDebug_assert (decl_isVarient (v));
5001 v = push (v);
5003 mcDebug_assert (decl_isVarient (peep ()));
5004 mcDebug_assert (d == (depth ()));
5009 VarientCaseLabelList := VarientCaseLabels { ','
5010 VarientCaseLabels }
5012 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
5014 cannot reachend
5017 static void VarientCaseLabelList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5019 VarientCaseLabels (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5020 while (mcLexBuf_currenttoken == mcReserved_commatok)
5022 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
5023 VarientCaseLabels (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5025 /* while */
5030 VarientCaseLabels :=
5031 % VAR l, h: node ; %
5033 % h := NIL %
5034 ConstExpression
5035 % l := pop () %
5036 [ '..' ConstExpression
5037 % h := pop () %
5039 % l, h could be saved if necessary. %
5042 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5044 cannot reachend
5047 static void VarientCaseLabels (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5049 decl_node l;
5050 decl_node h;
5052 h = static_cast<decl_node> (NULL);
5053 ConstExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
5054 l = pop ();
5055 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
5057 Expect (mcReserved_periodperiodtok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
5058 ConstExpression (stopset0, stopset1, stopset2);
5059 h = pop ();
5065 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
5067 % VAR n: node ; %
5069 % n := push (makeSet (pop ())) %
5072 first symbols:oftok, packedsettok, settok
5074 cannot reachend
5077 static void SetType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5079 decl_node n;
5081 if (mcLexBuf_currenttoken == mcReserved_settok)
5083 Expect (mcReserved_settok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5085 else if (mcLexBuf_currenttoken == mcReserved_packedsettok)
5087 /* avoid dangling else. */
5088 Expect (mcReserved_packedsettok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5090 else
5092 /* avoid dangling else. */
5093 ErrorArray ((const char *) "expecting one of: PACKEDSET SET", 31);
5095 Expect (mcReserved_oftok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5096 SimpleType (stopset0, stopset1, stopset2);
5097 n = push (decl_makeSet (pop ()));
5102 PointerType := 'POINTER' 'TO' Type
5103 % VAR n: node ; %
5105 % n := push (makePointer (pop ())) %
5108 first symbols:pointertok
5110 cannot reachend
5113 static void PointerType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5115 decl_node n;
5117 Expect (mcReserved_pointertok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_totok-mcReserved_recordtok))));
5118 Expect (mcReserved_totok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5119 Type (stopset0, stopset1, stopset2);
5120 n = push (decl_makePointer (pop ()));
5125 ProcedureType := 'PROCEDURE'
5126 % curproc := push (makeProcType ()) %
5127 [ FormalTypeList ]
5129 first symbols:proceduretok
5131 cannot reachend
5134 static void ProcedureType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5136 Expect (mcReserved_proceduretok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5137 curproc = push (decl_makeProcType ());
5138 if (mcLexBuf_currenttoken == mcReserved_lparatok)
5140 FormalTypeList (stopset0, stopset1, stopset2);
5146 FormalTypeList := '(' ( ')' FormalReturn |
5147 ProcedureParameters ')'
5148 FormalReturn )
5150 first symbols:lparatok
5152 cannot reachend
5155 static void FormalTypeList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5157 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5158 if (mcLexBuf_currenttoken == mcReserved_rparatok)
5160 Expect (mcReserved_rparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5161 FormalReturn (stopset0, stopset1, stopset2);
5163 else if ((mcLexBuf_currenttoken == mcReserved_arraytok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5165 /* avoid dangling else. */
5166 ProcedureParameters (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5167 Expect (mcReserved_rparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5168 FormalReturn (stopset0, stopset1, stopset2);
5170 else
5172 /* avoid dangling else. */
5173 ErrorArray ((const char *) "expecting one of: VAR ... ARRAY identifier )", 44);
5179 FormalReturn := [ ':' OptReturnType ]
5181 first symbols:colontok
5183 reachend
5186 static void FormalReturn (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5188 if (mcLexBuf_currenttoken == mcReserved_colontok)
5190 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5191 OptReturnType (stopset0, stopset1, stopset2);
5197 OptReturnType := '[' PushQualident
5198 % putReturnType (curproc, pop ()) %
5200 % putOptReturn (curproc) %
5201 ']' | PushQualident
5202 % putReturnType (curproc, pop ()) %
5205 first symbols:identtok, lsbratok
5207 cannot reachend
5210 static void OptReturnType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5212 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5214 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5215 PushQualident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5216 decl_putReturnType (curproc, pop ());
5217 decl_putOptReturn (curproc);
5218 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5220 else if (mcLexBuf_currenttoken == mcReserved_identtok)
5222 /* avoid dangling else. */
5223 PushQualident (stopset0, stopset1, stopset2);
5224 decl_putReturnType (curproc, pop ());
5226 else
5228 /* avoid dangling else. */
5229 ErrorArray ((const char *) "expecting one of: identifier [", 30);
5235 ProcedureParameters := ProcedureParameter
5236 % addParameter (curproc, pop ()) %
5237 { ',' ProcedureParameter
5239 % addParameter (curproc, pop ()) %
5242 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
5244 cannot reachend
5247 static void ProcedureParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5249 ProcedureParameter (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5250 decl_addParameter (curproc, pop ());
5251 while (mcLexBuf_currenttoken == mcReserved_commatok)
5253 Expect (mcReserved_commatok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5254 ProcedureParameter (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5255 decl_addParameter (curproc, pop ());
5257 /* while */
5262 ProcedureParameter := '...'
5263 % VAR n: node ; %
5265 % n := push (makeVarargs ()) %
5266 | 'VAR' FormalType
5267 % n := push (makeVarParameter (NIL, pop (), curproc, TRUE)) %
5268 | FormalType
5269 % n := push (makeNonVarParameter (NIL, pop (), curproc, TRUE)) %
5272 first symbols:identtok, arraytok, vartok, periodperiodperiodtok
5274 cannot reachend
5277 static void ProcedureParameter (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5279 decl_node n;
5281 if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
5283 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
5284 n = push (decl_makeVarargs ());
5286 else if (mcLexBuf_currenttoken == mcReserved_vartok)
5288 /* avoid dangling else. */
5289 Expect (mcReserved_vartok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5290 FormalType (stopset0, stopset1, stopset2);
5291 n = push (decl_makeVarParameter (static_cast<decl_node> (NULL), pop (), curproc, true));
5293 else if ((mcLexBuf_currenttoken == mcReserved_arraytok) || (mcLexBuf_currenttoken == mcReserved_identtok))
5295 /* avoid dangling else. */
5296 FormalType (stopset0, stopset1, stopset2);
5297 n = push (decl_makeNonVarParameter (static_cast<decl_node> (NULL), pop (), curproc, true));
5299 else
5301 /* avoid dangling else. */
5302 ErrorArray ((const char *) "expecting one of: ARRAY identifier VAR ...", 42);
5308 VarIdent :=
5309 % VAR n, a: node ; %
5311 % n := pop () %
5312 Ident
5313 % checkDuplicate (putIdent (n, curident)) %
5315 % n := push (n) %
5316 [ '[' ConstExpression
5317 % a := pop () could store, a, into, n. %
5318 ']' ]
5320 first symbols:identtok
5322 cannot reachend
5325 static void VarIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5327 decl_node n;
5328 decl_node a;
5330 n = pop ();
5331 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
5332 checkDuplicate (decl_putIdent (n, curident));
5333 n = push (n);
5334 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5336 Expect (mcReserved_lsbratok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
5337 ConstExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5338 a = pop (); /* could store, a, into, n. */
5339 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5345 VarIdentList :=
5346 % VAR n: node ; %
5348 % n := makeIdentList () %
5350 % n := push (n) %
5351 VarIdent { ',' VarIdent }
5353 first symbols:identtok
5355 cannot reachend
5358 static void VarIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5360 decl_node n;
5362 n = decl_makeIdentList ();
5363 n = push (n);
5364 VarIdent (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5365 while (mcLexBuf_currenttoken == mcReserved_commatok)
5367 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5368 VarIdent (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5370 /* while */
5375 VariableDeclaration :=
5376 % VAR v, d: node ; %
5377 VarIdentList
5378 % v := pop () %
5379 ':' Type
5380 % d := makeVarDecl (v, pop ()) %
5381 Alignment
5383 first symbols:identtok
5385 cannot reachend
5388 static void VariableDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5390 decl_node v;
5391 decl_node d;
5393 VarIdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5394 v = pop ();
5395 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5396 Type (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
5397 d = decl_makeVarDecl (v, pop ());
5398 Alignment (stopset0, stopset1, stopset2);
5403 Designator := Qualident { SubDesignator }
5405 first symbols:identtok
5407 cannot reachend
5410 static void Designator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5412 Qualident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
5413 while ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))))) != 0)))
5415 SubDesignator (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
5417 /* while */
5422 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
5425 first symbols:uparrowtok, lsbratok, periodtok
5427 cannot reachend
5430 static void SubDesignator (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5432 if (mcLexBuf_currenttoken == mcReserved_periodtok)
5434 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5435 Ident (stopset0, stopset1, stopset2);
5437 else if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5439 /* avoid dangling else. */
5440 Expect (mcReserved_lsbratok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5441 ArrayExpList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5442 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5444 else if (mcLexBuf_currenttoken == mcReserved_uparrowtok)
5446 /* avoid dangling else. */
5447 Expect (mcReserved_uparrowtok, stopset0, stopset1, stopset2);
5449 else
5451 /* avoid dangling else. */
5452 ErrorArray ((const char *) "expecting one of: ^ [ .", 23);
5458 ArrayExpList := Expression { ',' Expression }
5460 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5462 cannot reachend
5465 static void ArrayExpList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5467 Expression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5468 while (mcLexBuf_currenttoken == mcReserved_commatok)
5470 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5471 Expression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5473 /* while */
5478 ExpList := Expression { ',' Expression }
5480 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5482 cannot reachend
5485 static void ExpList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5487 Expression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5488 while (mcLexBuf_currenttoken == mcReserved_commatok)
5490 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5491 Expression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5493 /* while */
5498 Expression := SimpleExpression [ Relation SimpleExpression ]
5500 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5502 cannot reachend
5505 static void Expression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5507 SimpleExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
5508 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_hashtok-mcReserved_eoftok)) | (1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) | (1 << (mcReserved_lesstok-mcReserved_eoftok)) | (1 << (mcReserved_lessequaltok-mcReserved_eoftok)) | (1 << (mcReserved_greatertok-mcReserved_eoftok)) | (1 << (mcReserved_greaterequaltok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_intok))
5510 Relation (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5511 SimpleExpression (stopset0, stopset1, stopset2);
5517 SimpleExpression := UnaryOrTerm { AddOperator Term }
5519 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5521 cannot reachend
5524 static void SimpleExpression (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5526 UnaryOrTerm (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
5527 while (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_ortok))
5529 AddOperator (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5530 Term (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
5532 /* while */
5537 UnaryOrTerm := '+' Term | '-' Term |
5538 Term
5540 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5542 cannot reachend
5545 static void UnaryOrTerm (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5547 if (mcLexBuf_currenttoken == mcReserved_plustok)
5549 Expect (mcReserved_plustok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5550 Term (stopset0, stopset1, stopset2);
5552 else if (mcLexBuf_currenttoken == mcReserved_minustok)
5554 /* avoid dangling else. */
5555 Expect (mcReserved_minustok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5556 Term (stopset0, stopset1, stopset2);
5558 else if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5560 /* avoid dangling else. */
5561 Term (stopset0, stopset1, stopset2);
5563 else
5565 /* avoid dangling else. */
5566 ErrorArray ((const char *) "expecting one of: NOT ( string integer number real number identifier { - +", 74);
5572 Term := Factor { MulOperator Factor }
5574 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
5576 cannot reachend
5579 static void Term (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5581 Factor (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_timestok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_modtok-mcReserved_arraytok)) | (1 << (mcReserved_divtok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
5582 while ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))))) != 0))) || (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))))) != 0)))) || (mcLexBuf_currenttoken == mcReserved_remtok))
5584 MulOperator (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5585 Factor (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
5587 /* while */
5592 Factor := Number | string | SetOrDesignatorOrFunction |
5593 '(' Expression ')' |
5594 'NOT' ( Factor | ConstAttribute )
5596 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
5598 cannot reachend
5601 static void Factor (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5603 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok))))) != 0)))
5605 Number (stopset0, stopset1, stopset2);
5607 else if (mcLexBuf_currenttoken == mcReserved_stringtok)
5609 /* avoid dangling else. */
5610 string (stopset0, stopset1, stopset2);
5612 else if ((mcLexBuf_currenttoken == mcReserved_lcbratok) || (mcLexBuf_currenttoken == mcReserved_identtok))
5614 /* avoid dangling else. */
5615 SetOrDesignatorOrFunction (stopset0, stopset1, stopset2);
5617 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
5619 /* avoid dangling else. */
5620 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5621 Expression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5622 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5624 else if (mcLexBuf_currenttoken == mcReserved_nottok)
5626 /* avoid dangling else. */
5627 Expect (mcReserved_nottok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5628 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5630 Factor (stopset0, stopset1, stopset2);
5632 else if (mcLexBuf_currenttoken == mcReserved_attributetok)
5634 /* avoid dangling else. */
5635 ConstAttribute (stopset0, stopset1, stopset2);
5637 else
5639 /* avoid dangling else. */
5640 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ real number integer number string ( NOT { identifier", 84);
5643 else
5645 /* avoid dangling else. */
5646 ErrorArray ((const char *) "expecting one of: NOT ( identifier { string integer number real number", 70);
5652 SetOrDesignatorOrFunction := Qualident [ Constructor |
5653 SimpleDes
5654 [ ActualParameters ] ] |
5655 Constructor
5657 first symbols:lcbratok, identtok
5659 cannot reachend
5662 static void SetOrDesignatorOrFunction (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5664 if (mcLexBuf_currenttoken == mcReserved_identtok)
5666 /* avoid dangling else. */
5667 Qualident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lcbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5668 if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0)))
5670 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5671 /* seen optional [ | ] expression */
5672 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
5674 Constructor (stopset0, stopset1, stopset2);
5676 else if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok))))) != 0)))
5678 /* avoid dangling else. */
5679 SimpleDes (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5680 if (mcLexBuf_currenttoken == mcReserved_lparatok)
5682 ActualParameters (stopset0, stopset1, stopset2);
5685 else
5687 /* avoid dangling else. */
5688 ErrorArray ((const char *) "expecting one of: ( ^ [ . {", 27);
5691 /* end of optional [ | ] expression */
5693 else if (mcLexBuf_currenttoken == mcReserved_lcbratok)
5695 /* avoid dangling else. */
5696 Constructor (stopset0, stopset1, stopset2);
5698 else
5700 /* avoid dangling else. */
5701 ErrorArray ((const char *) "expecting one of: { identifier", 30);
5707 SimpleDes := { SubDesignator }
5709 first symbols:periodtok, lsbratok, uparrowtok
5711 reachend
5714 static void SimpleDes (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5716 while ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))))) != 0)))
5718 SubDesignator (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
5720 /* while */
5725 ActualParameters := '(' [ ExpList ] ')'
5727 first symbols:lparatok
5729 cannot reachend
5732 static void ActualParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5734 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5735 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5737 ExpList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5739 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5744 ExitStatement := 'EXIT'
5746 first symbols:exittok
5748 cannot reachend
5751 static void ExitStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5753 Expect (mcReserved_exittok, stopset0, stopset1, stopset2);
5758 ReturnStatement := 'RETURN' [ Expression ]
5760 first symbols:returntok
5762 cannot reachend
5765 static void ReturnStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5767 Expect (mcReserved_returntok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5768 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5770 Expression (stopset0, stopset1, stopset2);
5776 Statement := [ AssignmentOrProcedureCall |
5777 IfStatement | CaseStatement |
5778 WhileStatement |
5779 RepeatStatement |
5780 LoopStatement | ForStatement |
5781 WithStatement | AsmStatement |
5782 ExitStatement | ReturnStatement |
5783 RetryStatement ]
5785 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
5787 reachend
5790 static void Statement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5792 if ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5794 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5795 /* seen optional [ | ] expression */
5796 if (mcLexBuf_currenttoken == mcReserved_identtok)
5798 AssignmentOrProcedureCall (stopset0, stopset1, stopset2);
5800 else if (mcLexBuf_currenttoken == mcReserved_iftok)
5802 /* avoid dangling else. */
5803 IfStatement (stopset0, stopset1, stopset2);
5805 else if (mcLexBuf_currenttoken == mcReserved_casetok)
5807 /* avoid dangling else. */
5808 CaseStatement (stopset0, stopset1, stopset2);
5810 else if (mcLexBuf_currenttoken == mcReserved_whiletok)
5812 /* avoid dangling else. */
5813 WhileStatement (stopset0, stopset1, stopset2);
5815 else if (mcLexBuf_currenttoken == mcReserved_repeattok)
5817 /* avoid dangling else. */
5818 RepeatStatement (stopset0, stopset1, stopset2);
5820 else if (mcLexBuf_currenttoken == mcReserved_looptok)
5822 /* avoid dangling else. */
5823 LoopStatement (stopset0, stopset1, stopset2);
5825 else if (mcLexBuf_currenttoken == mcReserved_fortok)
5827 /* avoid dangling else. */
5828 ForStatement (stopset0, stopset1, stopset2);
5830 else if (mcLexBuf_currenttoken == mcReserved_withtok)
5832 /* avoid dangling else. */
5833 WithStatement (stopset0, stopset1, stopset2);
5835 else if (mcLexBuf_currenttoken == mcReserved_asmtok)
5837 /* avoid dangling else. */
5838 AsmStatement (stopset0, stopset1, stopset2);
5840 else if (mcLexBuf_currenttoken == mcReserved_exittok)
5842 /* avoid dangling else. */
5843 ExitStatement (stopset0, stopset1, stopset2);
5845 else if (mcLexBuf_currenttoken == mcReserved_returntok)
5847 /* avoid dangling else. */
5848 ReturnStatement (stopset0, stopset1, stopset2);
5850 else if (mcLexBuf_currenttoken == mcReserved_retrytok)
5852 /* avoid dangling else. */
5853 RetryStatement (stopset0, stopset1, stopset2);
5855 else
5857 /* avoid dangling else. */
5858 ErrorArray ((const char *) "expecting one of: RETRY RETURN EXIT ASM WITH FOR LOOP REPEAT WHILE CASE IF identifier", 85);
5861 /* end of optional [ | ] expression */
5866 RetryStatement := 'RETRY'
5868 first symbols:retrytok
5870 cannot reachend
5873 static void RetryStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5875 Expect (mcReserved_retrytok, stopset0, stopset1, stopset2);
5880 AssignmentOrProcedureCall := Designator ( ':=' Expression |
5881 ActualParameters |
5883 % epsilon %
5886 first symbols:identtok
5888 cannot reachend
5891 static void AssignmentOrProcedureCall (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5893 Designator (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_becomestok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5894 if (mcLexBuf_currenttoken == mcReserved_becomestok)
5896 Expect (mcReserved_becomestok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5897 Expression (stopset0, stopset1, stopset2);
5899 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
5901 /* avoid dangling else. */
5902 ActualParameters (stopset0, stopset1, stopset2);
5904 /* epsilon */
5909 StatementSequence := Statement { ';' Statement }
5911 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
5913 reachend
5916 static void StatementSequence (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5918 Statement (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
5919 while (mcLexBuf_currenttoken == mcReserved_semicolontok)
5921 Expect (mcReserved_semicolontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5922 Statement (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
5924 /* while */
5929 IfStatement := 'IF' Expression 'THEN' StatementSequence
5930 { 'ELSIF' Expression 'THEN' StatementSequence }
5931 [ 'ELSE' StatementSequence ] 'END'
5933 first symbols:iftok
5935 cannot reachend
5938 static void IfStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5940 Expect (mcReserved_iftok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5941 Expression (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_thentok-mcReserved_recordtok))));
5942 Expect (mcReserved_thentok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_elsiftok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
5943 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_elsiftok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5944 while (mcLexBuf_currenttoken == mcReserved_elsiftok)
5946 Expect (mcReserved_elsiftok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5947 Expression (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_thentok-mcReserved_recordtok))));
5948 Expect (mcReserved_thentok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_elsiftok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
5949 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_elsiftok-mcReserved_arraytok))), stopset2);
5951 /* while */
5952 if (mcLexBuf_currenttoken == mcReserved_elsetok)
5954 Expect (mcReserved_elsetok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
5955 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5957 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
5962 CaseStatement := 'CASE' Expression 'OF' Case { '|'
5963 Case }
5964 CaseEndStatement
5966 first symbols:casetok
5968 cannot reachend
5971 static void CaseStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5973 Expect (mcReserved_casetok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5974 Expression (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5975 Expect (mcReserved_oftok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
5976 Case (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5977 while (mcLexBuf_currenttoken == mcReserved_bartok)
5979 Expect (mcReserved_bartok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
5980 Case (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok))), stopset2);
5982 /* while */
5983 CaseEndStatement (stopset0, stopset1, stopset2);
5988 CaseEndStatement := 'END' | 'ELSE' StatementSequence
5989 'END'
5991 first symbols:elsetok, endtok
5993 cannot reachend
5996 static void CaseEndStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
5998 if (mcLexBuf_currenttoken == mcReserved_endtok)
6000 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6002 else if (mcLexBuf_currenttoken == mcReserved_elsetok)
6004 /* avoid dangling else. */
6005 Expect (mcReserved_elsetok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6006 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6007 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6009 else
6011 /* avoid dangling else. */
6012 ErrorArray ((const char *) "expecting one of: ELSE END", 26);
6018 Case := [ CaseLabelList ':' StatementSequence ]
6020 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6022 reachend
6025 static void Case (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6027 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_nottok)) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))))) != 0))))
6029 CaseLabelList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6030 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6031 StatementSequence (stopset0, stopset1, stopset2);
6037 CaseLabelList := CaseLabels { ',' CaseLabels }
6039 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
6041 cannot reachend
6044 static void CaseLabelList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6046 CaseLabels (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6047 while (mcLexBuf_currenttoken == mcReserved_commatok)
6049 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))));
6050 CaseLabels (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6052 /* while */
6057 CaseLabels := ConstExpressionNop [ '..' ConstExpressionNop ]
6059 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6061 cannot reachend
6064 static void CaseLabels (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6066 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
6067 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
6069 Expect (mcReserved_periodperiodtok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6070 ConstExpressionNop (stopset0, stopset1, stopset2);
6076 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
6077 'END'
6079 first symbols:whiletok
6081 cannot reachend
6084 static void WhileStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6086 Expect (mcReserved_whiletok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6087 Expression (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6088 Expect (mcReserved_dotok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6089 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6090 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6095 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
6096 Expression
6098 first symbols:repeattok
6100 cannot reachend
6103 static void RepeatStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6105 Expect (mcReserved_repeattok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_untiltok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6106 StatementSequence (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_untiltok-mcReserved_recordtok))));
6107 Expect (mcReserved_untiltok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6108 Expression (stopset0, stopset1, stopset2);
6113 ForStatement := 'FOR' Ident ':=' Expression 'TO'
6114 Expression [ 'BY' ConstExpressionNop ]
6115 'DO' StatementSequence 'END'
6117 first symbols:fortok
6119 cannot reachend
6122 static void ForStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6124 Expect (mcReserved_fortok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6125 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_becomestok-mcReserved_eoftok))), stopset1, stopset2);
6126 Expect (mcReserved_becomestok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6127 Expression (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_totok-mcReserved_recordtok))));
6128 Expect (mcReserved_totok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6129 Expression (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok)) | (1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6130 if (mcLexBuf_currenttoken == mcReserved_bytok)
6132 Expect (mcReserved_bytok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6133 ConstExpressionNop (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6135 Expect (mcReserved_dotok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6136 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6137 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6142 LoopStatement := 'LOOP' StatementSequence 'END'
6144 first symbols:looptok
6146 cannot reachend
6149 static void LoopStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6151 Expect (mcReserved_looptok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6152 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6153 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6158 WithStatement := 'WITH' Designator 'DO' StatementSequence
6159 'END'
6161 first symbols:withtok
6163 cannot reachend
6166 static void WithStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6168 Expect (mcReserved_withtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6169 Designator (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6170 Expect (mcReserved_dotok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6171 StatementSequence (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6172 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6177 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
6178 Ident
6179 % leaveScope %
6182 first symbols:proceduretok
6184 cannot reachend
6187 static void ProcedureDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6189 ProcedureHeading (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6190 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6191 ProcedureBlock (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6192 Ident (stopset0, stopset1, stopset2);
6193 decl_leaveScope ();
6198 ProcedureIdent := Ident
6199 % curproc := lookupSym (curident) %
6201 % enterScope (curproc) %
6204 first symbols:identtok
6206 cannot reachend
6209 static void ProcedureIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6211 Ident (stopset0, stopset1, stopset2);
6212 curproc = decl_lookupSym (curident);
6213 decl_enterScope (curproc);
6218 DefProcedureIdent := Ident
6219 % curproc := lookupSym (curident) %
6222 first symbols:identtok
6224 cannot reachend
6227 static void DefProcedureIdent (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6229 Ident (stopset0, stopset1, stopset2);
6230 curproc = decl_lookupSym (curident);
6235 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
6236 '(' '(' Ident ')' ')' |
6237 '__INLINE__' ]
6239 first symbols:inlinetok, attributetok
6241 reachend
6244 static void DefineBuiltinProcedure (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6246 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))))) != 0)))
6248 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6249 /* seen optional [ | ] expression */
6250 if (mcLexBuf_currenttoken == mcReserved_attributetok)
6252 Expect (mcReserved_attributetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_builtintok-mcReserved_recordtok))));
6253 Expect (mcReserved_builtintok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
6254 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
6255 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6256 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6257 Expect (mcReserved_rparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6258 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
6260 else if (mcLexBuf_currenttoken == mcReserved_inlinetok)
6262 /* avoid dangling else. */
6263 Expect (mcReserved_inlinetok, stopset0, stopset1, stopset2);
6265 else
6267 /* avoid dangling else. */
6268 ErrorArray ((const char *) "expecting one of: __INLINE__ __ATTRIBUTE__", 42);
6271 /* end of optional [ | ] expression */
6276 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
6277 ( ProcedureIdent [ FormalParameters ]
6278 AttributeNoReturn )
6280 first symbols:proceduretok
6282 cannot reachend
6285 static void ProcedureHeading (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6287 Expect (mcReserved_proceduretok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6288 DefineBuiltinProcedure (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6289 ProcedureIdent (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6290 if (mcLexBuf_currenttoken == mcReserved_lparatok)
6292 FormalParameters (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6294 AttributeNoReturn (stopset0, stopset1, stopset2);
6299 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
6301 first symbols:inlinetok, builtintok
6303 reachend
6306 static void Builtin (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6308 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_builtintok-mcReserved_recordtok))))) != 0)))
6310 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6311 /* seen optional [ | ] expression */
6312 if (mcLexBuf_currenttoken == mcReserved_builtintok)
6314 Expect (mcReserved_builtintok, stopset0, stopset1, stopset2);
6316 else if (mcLexBuf_currenttoken == mcReserved_inlinetok)
6318 /* avoid dangling else. */
6319 Expect (mcReserved_inlinetok, stopset0, stopset1, stopset2);
6321 else
6323 /* avoid dangling else. */
6324 ErrorArray ((const char *) "expecting one of: __INLINE__ __BUILTIN__", 40);
6327 /* end of optional [ | ] expression */
6332 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
6333 [ DefFormalParameters ]
6334 AttributeNoReturn )
6336 first symbols:proceduretok
6338 cannot reachend
6341 static void DefProcedureHeading (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6343 Expect (mcReserved_proceduretok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_builtintok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6344 Builtin (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6345 DefProcedureIdent (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6346 if (mcLexBuf_currenttoken == mcReserved_lparatok)
6348 DefFormalParameters (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6350 AttributeNoReturn (stopset0, stopset1, stopset2);
6355 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
6356 'END'
6358 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
6360 cannot reachend
6363 static void ProcedureBlock (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6365 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
6367 Declaration (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6369 /* while */
6370 if (mcLexBuf_currenttoken == mcReserved_begintok)
6372 Expect (mcReserved_begintok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_excepttok-mcReserved_arraytok)) | (1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6373 ProcedureBlockBody (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6375 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6380 Block := { Declaration } InitialBlock FinalBlock
6381 'END'
6383 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
6385 cannot reachend
6388 static void Block (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6390 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
6392 Declaration (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6394 /* while */
6395 InitialBlock (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok))), stopset2);
6396 FinalBlock (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6397 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6402 InitialBlock := [ 'BEGIN' InitialBlockBody ]
6404 first symbols:begintok
6406 reachend
6409 static void InitialBlock (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6411 if (mcLexBuf_currenttoken == mcReserved_begintok)
6413 Expect (mcReserved_begintok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok)) | (1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6414 InitialBlockBody (stopset0, stopset1, stopset2);
6420 FinalBlock := [ 'FINALLY' FinalBlockBody ]
6422 first symbols:finallytok
6424 reachend
6427 static void FinalBlock (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6429 if (mcLexBuf_currenttoken == mcReserved_finallytok)
6431 Expect (mcReserved_finallytok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok)) | (1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok))));
6432 FinalBlockBody (stopset0, stopset1, stopset2);
6438 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6440 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6442 reachend
6445 static void InitialBlockBody (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6447 NormalPart (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
6448 if (mcLexBuf_currenttoken == mcReserved_excepttok)
6450 Expect (mcReserved_excepttok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6451 ExceptionalPart (stopset0, stopset1, stopset2);
6457 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6459 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6461 reachend
6464 static void FinalBlockBody (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6466 NormalPart (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
6467 if (mcLexBuf_currenttoken == mcReserved_excepttok)
6469 Expect (mcReserved_excepttok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6470 ExceptionalPart (stopset0, stopset1, stopset2);
6476 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6478 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6480 reachend
6483 static void ProcedureBlockBody (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6485 NormalPart (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
6486 if (mcLexBuf_currenttoken == mcReserved_excepttok)
6488 Expect (mcReserved_excepttok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_exittok-mcReserved_arraytok)) | (1 << (mcReserved_fortok-mcReserved_arraytok)) | (1 << (mcReserved_looptok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok)) | (1 << (mcReserved_iftok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_retrytok-mcReserved_recordtok)) | (1 << (mcReserved_asmtok-mcReserved_recordtok)) | (1 << (mcReserved_withtok-mcReserved_recordtok)) | (1 << (mcReserved_repeattok-mcReserved_recordtok)) | (1 << (mcReserved_whiletok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6489 ExceptionalPart (stopset0, stopset1, stopset2);
6495 NormalPart := StatementSequence
6497 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6499 reachend
6502 static void NormalPart (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6504 StatementSequence (stopset0, stopset1, stopset2);
6509 ExceptionalPart := StatementSequence
6511 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6513 reachend
6516 static void ExceptionalPart (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6518 StatementSequence (stopset0, stopset1, stopset2);
6523 Declaration := 'CONST' { ConstantDeclaration ';' } |
6524 'TYPE' { TypeDeclaration } |
6525 'VAR' { VariableDeclaration ';' } |
6526 ProcedureDeclaration ';' |
6527 ModuleDeclaration ';'
6529 first symbols:moduletok, proceduretok, vartok, typetok, consttok
6531 cannot reachend
6534 static void Declaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6536 if (mcLexBuf_currenttoken == mcReserved_consttok)
6538 Expect (mcReserved_consttok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6539 while (mcLexBuf_currenttoken == mcReserved_identtok)
6541 ConstantDeclaration (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6542 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6544 /* while */
6546 else if (mcLexBuf_currenttoken == mcReserved_typetok)
6548 /* avoid dangling else. */
6549 Expect (mcReserved_typetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6550 while (mcLexBuf_currenttoken == mcReserved_identtok)
6552 TypeDeclaration (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6554 /* while */
6556 else if (mcLexBuf_currenttoken == mcReserved_vartok)
6558 /* avoid dangling else. */
6559 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6560 while (mcLexBuf_currenttoken == mcReserved_identtok)
6562 VariableDeclaration (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6563 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6565 /* while */
6567 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
6569 /* avoid dangling else. */
6570 ProcedureDeclaration (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6571 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
6573 else if (mcLexBuf_currenttoken == mcReserved_moduletok)
6575 /* avoid dangling else. */
6576 ModuleDeclaration (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6577 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
6579 else
6581 /* avoid dangling else. */
6582 ErrorArray ((const char *) "expecting one of: MODULE PROCEDURE VAR TYPE CONST", 49);
6588 DefFormalParameters := '('
6589 % paramEnter (curproc) %
6590 [ DefMultiFPSection ] ')'
6592 % paramLeave (curproc) %
6593 FormalReturn
6595 first symbols:lparatok
6597 cannot reachend
6600 static void DefFormalParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6602 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6603 decl_paramEnter (curproc);
6604 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6606 DefMultiFPSection (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6608 Expect (mcReserved_rparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6609 decl_paramLeave (curproc);
6610 FormalReturn (stopset0, stopset1, stopset2);
6615 DefMultiFPSection := DefExtendedFP |
6616 FPSection [ ';' DefMultiFPSection ]
6618 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6620 cannot reachend
6623 static void DefMultiFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6625 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok))
6627 DefExtendedFP (stopset0, stopset1, stopset2);
6629 else if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0)))
6631 /* avoid dangling else. */
6632 FPSection (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6633 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
6635 Expect (mcReserved_semicolontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6636 DefMultiFPSection (stopset0, stopset1, stopset2);
6639 else
6641 /* avoid dangling else. */
6642 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6648 FormalParameters := '('
6649 % paramEnter (curproc) %
6650 [ MultiFPSection ] ')'
6651 % paramLeave (curproc) %
6652 FormalReturn
6654 first symbols:lparatok
6656 cannot reachend
6659 static void FormalParameters (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6661 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6662 decl_paramEnter (curproc);
6663 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6665 MultiFPSection (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6667 Expect (mcReserved_rparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6668 decl_paramLeave (curproc);
6669 FormalReturn (stopset0, stopset1, stopset2);
6674 AttributeNoReturn := [ NoReturn |
6675 % setNoReturn (curproc, FALSE) %
6678 first symbols:ldirectivetok
6680 reachend
6683 static void AttributeNoReturn (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6685 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6687 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6688 /* seen optional [ | ] expression */
6689 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6691 NoReturn (stopset0, stopset1, stopset2);
6693 else
6695 decl_setNoReturn (curproc, false);
6698 /* end of optional [ | ] expression */
6703 NoReturn := ''
6705 first symbols:ldirectivetok
6707 cannot reachend
6710 static void NoReturn (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6712 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6713 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6714 decl_setNoReturn (curproc, true);
6715 checkReturnAttribute ();
6716 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
6721 AttributeUnused := [ Unused ]
6723 first symbols:ldirectivetok
6725 reachend
6728 static void AttributeUnused (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6730 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6732 Unused (stopset0, stopset1, stopset2);
6738 Unused := ''
6740 first symbols:ldirectivetok
6742 cannot reachend
6745 static void Unused (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6747 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6748 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6749 curisused = false;
6750 checkParameterAttribute ();
6751 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
6756 MultiFPSection := ExtendedFP | FPSection [ ';'
6757 MultiFPSection ]
6759 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6761 cannot reachend
6764 static void MultiFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6766 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok))
6768 ExtendedFP (stopset0, stopset1, stopset2);
6770 else if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0)))
6772 /* avoid dangling else. */
6773 FPSection (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6774 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
6776 Expect (mcReserved_semicolontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
6777 MultiFPSection (stopset0, stopset1, stopset2);
6780 else
6782 /* avoid dangling else. */
6783 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6789 FPSection := NonVarFPSection |
6790 VarFPSection
6792 first symbols:vartok, identtok
6794 cannot reachend
6797 static void FPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6799 if (mcLexBuf_currenttoken == mcReserved_identtok)
6801 NonVarFPSection (stopset0, stopset1, stopset2);
6803 else if (mcLexBuf_currenttoken == mcReserved_vartok)
6805 /* avoid dangling else. */
6806 VarFPSection (stopset0, stopset1, stopset2);
6808 else
6810 /* avoid dangling else. */
6811 ErrorArray ((const char *) "expecting one of: VAR identifier", 32);
6817 DefExtendedFP := DefOptArg | '...'
6818 % addParameter (curproc, makeVarargs ()) %
6821 first symbols:lsbratok, periodperiodperiodtok
6823 cannot reachend
6826 static void DefExtendedFP (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6828 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
6830 DefOptArg (stopset0, stopset1, stopset2);
6832 else if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
6834 /* avoid dangling else. */
6835 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
6836 decl_addParameter (curproc, decl_makeVarargs ());
6838 else
6840 /* avoid dangling else. */
6841 ErrorArray ((const char *) "expecting one of: ... [", 23);
6847 ExtendedFP := OptArg | '...'
6849 first symbols:lsbratok, periodperiodperiodtok
6851 cannot reachend
6854 static void ExtendedFP (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6856 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
6858 OptArg (stopset0, stopset1, stopset2);
6860 else if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
6862 /* avoid dangling else. */
6863 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
6865 else
6867 /* avoid dangling else. */
6868 ErrorArray ((const char *) "expecting one of: ... [", 23);
6874 VarFPSection := 'VAR' PushIdentList
6875 % VAR l, t: node ; %
6876 ':' FormalType
6877 % t := pop () %
6879 % l := pop () %
6881 % curisused := TRUE %
6882 [ AttributeUnused ]
6883 % addVarParameters (curproc, l, t, curisused) %
6886 first symbols:vartok
6888 cannot reachend
6891 static void VarFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6893 decl_node l;
6894 decl_node t;
6896 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6897 PushIdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6898 Expect (mcReserved_colontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6899 FormalType (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6900 t = pop ();
6901 l = pop ();
6902 curisused = true;
6903 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6905 AttributeUnused (stopset0, stopset1, stopset2);
6907 decl_addVarParameters (curproc, l, t, curisused);
6912 NonVarFPSection := PushIdentList
6913 % VAR l, t: node ; %
6914 ':' FormalType
6915 % t := pop () %
6917 % l := pop () %
6919 % curisused := TRUE %
6920 [ AttributeUnused ]
6921 % addNonVarParameters (curproc, l, t, curisused) %
6924 first symbols:identtok
6926 cannot reachend
6929 static void NonVarFPSection (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6931 decl_node l;
6932 decl_node t;
6934 PushIdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6935 Expect (mcReserved_colontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6936 FormalType (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
6937 t = pop ();
6938 l = pop ();
6939 curisused = true;
6940 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
6942 AttributeUnused (stopset0, stopset1, stopset2);
6944 decl_addNonVarParameters (curproc, l, t, curisused);
6949 OptArg :=
6950 % VAR p, init, type: node ; id: Name ; %
6951 '[' Ident
6952 % id := curident %
6953 ':' FormalType
6954 % type := pop () %
6956 % init := NIL %
6957 [ '=' ConstExpression
6958 % init := pop () %
6959 ] ']'
6960 % p := addOptParameter (curproc, id, type, init) %
6963 first symbols:lsbratok
6965 cannot reachend
6968 static void OptArg (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
6970 decl_node p;
6971 decl_node init;
6972 decl_node type;
6973 nameKey_Name id;
6975 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6976 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6977 id = curident;
6978 Expect (mcReserved_colontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6979 FormalType (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
6980 type = pop ();
6981 init = static_cast<decl_node> (NULL);
6982 if (mcLexBuf_currenttoken == mcReserved_equaltok)
6984 Expect (mcReserved_equaltok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
6985 ConstExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
6986 init = pop ();
6988 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
6989 p = decl_addOptParameter (curproc, id, type, init);
6994 DefOptArg :=
6995 % VAR p, init, type: node ; id: Name ; %
6996 '[' Ident
6997 % id := curident %
6998 ':' FormalType
6999 % type := pop () %
7000 '=' ConstExpression
7001 % init := pop () %
7003 % p := addOptParameter (curproc, id, type, init) %
7006 first symbols:lsbratok
7008 cannot reachend
7011 static void DefOptArg (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7013 decl_node p;
7014 decl_node init;
7015 decl_node type;
7016 nameKey_Name id;
7018 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7019 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7020 id = curident;
7021 Expect (mcReserved_colontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7022 FormalType (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
7023 type = pop ();
7024 Expect (mcReserved_equaltok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
7025 ConstExpression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7026 init = pop ();
7027 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
7028 p = decl_addOptParameter (curproc, id, type, init);
7033 FormalType :=
7034 % VAR c: CARDINAL ; %
7036 % VAR n, a, s: node ; %
7038 % c := 0 %
7039 { 'ARRAY' 'OF'
7040 % INC (c) %
7041 } PushQualident
7042 % pushNunbounded (c) %
7045 first symbols:identtok, arraytok
7047 cannot reachend
7050 static void FormalType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7052 unsigned int c;
7053 decl_node n;
7054 decl_node a;
7055 decl_node s;
7057 c = 0;
7058 while (mcLexBuf_currenttoken == mcReserved_arraytok)
7060 Expect (mcReserved_arraytok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
7061 Expect (mcReserved_oftok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7062 c += 1;
7064 /* while */
7065 PushQualident (stopset0, stopset1, stopset2);
7066 pushNunbounded (c);
7071 ModuleDeclaration := 'MODULE' Ident [ Priority ]
7072 ';' { Import } [ Export ]
7073 Block Ident
7075 first symbols:moduletok
7077 cannot reachend
7080 static void ModuleDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7082 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7083 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
7084 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7086 Priority (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7088 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7089 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
7091 Import (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
7093 /* while */
7094 if (mcLexBuf_currenttoken == mcReserved_exporttok)
7096 Export (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_begintok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
7098 Block (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7099 Ident (stopset0, stopset1, stopset2);
7104 Priority := '[' ConstExpressionNop ']'
7106 first symbols:lsbratok
7108 cannot reachend
7111 static void Priority (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7113 Expect (mcReserved_lsbratok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok))));
7114 ConstExpressionNop (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7115 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
7120 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
7121 'UNQUALIFIED' IdentList |
7122 IdentList ) ';'
7124 first symbols:exporttok
7126 cannot reachend
7129 static void Export (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7131 Expect (mcReserved_exporttok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_qualifiedtok-mcReserved_arraytok)) | (1 << (mcReserved_unqualifiedtok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7132 if (mcLexBuf_currenttoken == mcReserved_qualifiedtok)
7134 Expect (mcReserved_qualifiedtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7135 IdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7137 else if (mcLexBuf_currenttoken == mcReserved_unqualifiedtok)
7139 /* avoid dangling else. */
7140 Expect (mcReserved_unqualifiedtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7141 IdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7143 else if (mcLexBuf_currenttoken == mcReserved_identtok)
7145 /* avoid dangling else. */
7146 IdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7148 else
7150 /* avoid dangling else. */
7151 ErrorArray ((const char *) "expecting one of: identifier UNQUALIFIED QUALIFIED", 50);
7153 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7158 FromIdentList := Ident
7159 % importInto (frommodule, curident, curmodule) %
7160 { ',' Ident
7161 % importInto (frommodule, curident, curmodule) %
7164 first symbols:identtok
7166 cannot reachend
7169 static void FromIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7171 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7172 importInto (frommodule, curident, curmodule);
7173 while (mcLexBuf_currenttoken == mcReserved_commatok)
7175 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7176 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7177 importInto (frommodule, curident, curmodule);
7179 /* while */
7184 FromImport := 'FROM' Ident
7185 % frommodule := lookupDef (curident) %
7186 'IMPORT' FromIdentList ';'
7188 first symbols:fromtok
7190 cannot reachend
7193 static void FromImport (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7195 Expect (mcReserved_fromtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7196 Ident (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok))), stopset2);
7197 frommodule = decl_lookupDef (curident);
7198 Expect (mcReserved_importtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7199 FromIdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7200 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7205 ImportModuleList := Ident { ',' Ident }
7207 first symbols:identtok
7209 cannot reachend
7212 static void ImportModuleList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7214 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7215 while (mcLexBuf_currenttoken == mcReserved_commatok)
7217 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7218 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7220 /* while */
7225 WithoutFromImport := 'IMPORT' ImportModuleList ';'
7227 first symbols:importtok
7229 cannot reachend
7232 static void WithoutFromImport (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7234 Expect (mcReserved_importtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7235 ImportModuleList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7236 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7241 Import := FromImport | WithoutFromImport
7243 first symbols:importtok, fromtok
7245 cannot reachend
7248 static void Import (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7250 if (mcLexBuf_currenttoken == mcReserved_fromtok)
7252 FromImport (stopset0, stopset1, stopset2);
7254 else if (mcLexBuf_currenttoken == mcReserved_importtok)
7256 /* avoid dangling else. */
7257 WithoutFromImport (stopset0, stopset1, stopset2);
7259 else
7261 /* avoid dangling else. */
7262 ErrorArray ((const char *) "expecting one of: IMPORT FROM", 29);
7268 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
7269 string ]
7270 Ident ';'
7271 % curmodule := lookupDef (curident) %
7273 % enterScope (curmodule) %
7275 % resetEnumPos (curmodule) %
7276 { Import } [ Export ] { Definition }
7277 'END' Ident '.'
7278 % checkEndName (curmodule, curident, 'definition module') %
7280 % setConstExpComplete (curmodule) %
7282 % leaveScope %
7285 first symbols:definitiontok
7287 cannot reachend
7290 static void DefinitionModule (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7292 Expect (mcReserved_definitiontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2);
7293 Expect (mcReserved_moduletok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7294 if (mcLexBuf_currenttoken == mcReserved_fortok)
7296 Expect (mcReserved_fortok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7297 string (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7299 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7300 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
7301 curmodule = decl_lookupDef (curident);
7302 decl_enterScope (curmodule);
7303 decl_resetEnumPos (curmodule);
7304 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
7306 Import (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_exporttok-mcReserved_arraytok)) | (1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7308 /* while */
7309 if (mcLexBuf_currenttoken == mcReserved_exporttok)
7311 Export (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7313 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
7315 Definition (stopset0, stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7317 /* while */
7318 Expect (mcReserved_endtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7319 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
7320 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
7321 checkEndName (curmodule, curident, (const char *) "definition module", 17);
7322 decl_setConstExpComplete (curmodule);
7323 decl_leaveScope ();
7328 PushQualident := Ident
7329 % typeExp := push (lookupSym (curident)) %
7331 % IF typeExp = NIL
7332 THEN
7333 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
7334 END %
7335 [ '.'
7336 % IF NOT isDef (typeExp)
7337 THEN
7338 ErrorArray ('the first component of this qualident must be a definition module')
7339 END %
7340 Ident
7341 % typeExp := replace (lookupInScope (typeExp, curident)) ;
7342 IF typeExp=NIL
7343 THEN
7344 ErrorArray ('identifier not found in definition module')
7345 END %
7348 first symbols:identtok
7350 cannot reachend
7353 static void PushQualident (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7355 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
7356 typeExp = push (decl_lookupSym (curident));
7357 if (typeExp == NULL)
7359 mcMetaError_metaError1 ((const char *) "the symbol {%1k} is not visible in this scope (or any other nested scope)", 73, (const unsigned char *) &curident, (sizeof (curident)-1));
7361 if (mcLexBuf_currenttoken == mcReserved_periodtok)
7363 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7364 if (! (decl_isDef (typeExp)))
7366 ErrorArray ((const char *) "the first component of this qualident must be a definition module", 65);
7368 Ident (stopset0, stopset1, stopset2);
7369 typeExp = replace (decl_lookupInScope (typeExp, curident));
7370 if (typeExp == NULL)
7372 ErrorArray ((const char *) "identifier not found in definition module", 41);
7379 OptSubrange := [ SubrangeType
7380 % VAR q, s: node ; %
7382 % s := pop () %
7384 % q := pop () %
7386 % putSubrangeType (s, q) %
7388 % typeExp := push (s) %
7391 first symbols:lsbratok
7393 reachend
7396 static void OptSubrange (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7398 decl_node q;
7399 decl_node s;
7401 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7403 SubrangeType (stopset0, stopset1, stopset2);
7404 s = pop ();
7405 q = pop ();
7406 decl_putSubrangeType (s, q);
7407 typeExp = push (s);
7413 TypeEquiv := PushQualident OptSubrange
7415 first symbols:identtok
7417 cannot reachend
7420 static void TypeEquiv (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7422 PushQualident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
7423 OptSubrange (stopset0, stopset1, stopset2);
7428 EnumIdentList :=
7429 % VAR f: node ; %
7431 % typeExp := push (makeEnum ()) %
7432 Ident
7433 % f := makeEnumField (typeExp, curident) %
7434 { ',' Ident
7435 % f := makeEnumField (typeExp, curident) %
7438 first symbols:identtok
7440 cannot reachend
7443 static void EnumIdentList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7445 decl_node f;
7447 typeExp = push (decl_makeEnum ());
7448 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7449 f = decl_makeEnumField (typeExp, curident);
7450 while (mcLexBuf_currenttoken == mcReserved_commatok)
7452 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7453 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7454 f = decl_makeEnumField (typeExp, curident);
7456 /* while */
7461 Enumeration := '(' EnumIdentList ')'
7463 first symbols:lparatok
7465 cannot reachend
7468 static void Enumeration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7470 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7471 EnumIdentList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7472 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
7477 SimpleType :=
7478 % VAR d: CARDINAL ; %
7480 % d := depth () %
7481 ( TypeEquiv | Enumeration |
7482 SubrangeType )
7483 % assert (d = depth () - 1) %
7486 first symbols:lsbratok, lparatok, identtok
7488 cannot reachend
7491 static void SimpleType (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7493 unsigned int d;
7495 d = depth ();
7496 if (mcLexBuf_currenttoken == mcReserved_identtok)
7498 TypeEquiv (stopset0, stopset1, stopset2);
7500 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
7502 /* avoid dangling else. */
7503 Enumeration (stopset0, stopset1, stopset2);
7505 else if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7507 /* avoid dangling else. */
7508 SubrangeType (stopset0, stopset1, stopset2);
7510 else
7512 /* avoid dangling else. */
7513 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
7515 mcDebug_assert (d == ((depth ())-1));
7520 Type := SimpleType | ArrayType | RecordType |
7521 SetType | PointerType | ProcedureType
7523 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
7525 cannot reachend
7528 static void Type (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7530 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_identtok))
7532 SimpleType (stopset0, stopset1, stopset2);
7534 else if (mcLexBuf_currenttoken == mcReserved_arraytok)
7536 /* avoid dangling else. */
7537 ArrayType (stopset0, stopset1, stopset2);
7539 else if (mcLexBuf_currenttoken == mcReserved_recordtok)
7541 /* avoid dangling else. */
7542 RecordType (stopset0, stopset1, stopset2);
7544 else if ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp3_SetOfStop1) ((1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_settok))
7546 /* avoid dangling else. */
7547 SetType (stopset0, stopset1, stopset2);
7549 else if (mcLexBuf_currenttoken == mcReserved_pointertok)
7551 /* avoid dangling else. */
7552 PointerType (stopset0, stopset1, stopset2);
7554 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
7556 /* avoid dangling else. */
7557 ProcedureType (stopset0, stopset1, stopset2);
7559 else
7561 /* avoid dangling else. */
7562 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
7568 TypeDeclaration := { Ident
7569 % typeDes := lookupSym (curident) %
7570 ( ';' | '=' Type
7571 % putType (typeDes, pop ()) %
7572 Alignment ';' ) }
7574 first symbols:identtok
7576 reachend
7579 static void TypeDeclaration (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7581 while (mcLexBuf_currenttoken == mcReserved_identtok)
7583 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
7584 typeDes = decl_lookupSym (curident);
7585 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
7587 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7589 else if (mcLexBuf_currenttoken == mcReserved_equaltok)
7591 /* avoid dangling else. */
7592 Expect (mcReserved_equaltok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_proceduretok-mcReserved_arraytok)) | (1 << (mcReserved_pointertok-mcReserved_arraytok)) | (1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok)) | (1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7593 Type (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7594 decl_putType (typeDes, pop ());
7595 Alignment (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7596 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7598 else
7600 /* avoid dangling else. */
7601 ErrorArray ((const char *) "expecting one of: = ;", 21);
7604 /* while */
7609 Definition := 'CONST' { ConstantDeclaration ';' } |
7610 'TYPE' { TypeDeclaration } |
7611 'VAR' { VariableDeclaration ';' } |
7612 DefProcedureHeading ';'
7614 first symbols:proceduretok, vartok, typetok, consttok
7616 cannot reachend
7619 static void Definition (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7621 if (mcLexBuf_currenttoken == mcReserved_consttok)
7623 Expect (mcReserved_consttok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7624 while (mcLexBuf_currenttoken == mcReserved_identtok)
7626 ConstantDeclaration (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7627 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7629 /* while */
7631 else if (mcLexBuf_currenttoken == mcReserved_typetok)
7633 /* avoid dangling else. */
7634 Expect (mcReserved_typetok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7635 while (mcLexBuf_currenttoken == mcReserved_identtok)
7637 TypeDeclaration (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7639 /* while */
7641 else if (mcLexBuf_currenttoken == mcReserved_vartok)
7643 /* avoid dangling else. */
7644 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7645 while (mcLexBuf_currenttoken == mcReserved_identtok)
7647 VariableDeclaration (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7648 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7650 /* while */
7652 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
7654 /* avoid dangling else. */
7655 DefProcedureHeading (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7656 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7658 else
7660 /* avoid dangling else. */
7661 ErrorArray ((const char *) "expecting one of: PROCEDURE VAR TYPE CONST", 42);
7667 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
7670 first symbols:asmtok
7672 cannot reachend
7675 static void AsmStatement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7677 Expect (mcReserved_asmtok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_volatiletok-mcReserved_recordtok))));
7678 if (mcLexBuf_currenttoken == mcReserved_volatiletok)
7680 Expect (mcReserved_volatiletok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
7682 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7683 AsmOperands (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7684 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
7689 AsmOperands := string [ AsmOperandSpec ]
7691 first symbols:stringtok
7693 cannot reachend
7696 static void AsmOperands (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7698 string (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7699 if (mcLexBuf_currenttoken == mcReserved_colontok)
7701 AsmOperandSpec (stopset0, stopset1, stopset2);
7707 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
7708 ':' TrashList ] ] ]
7710 first symbols:colontok
7712 reachend
7715 static void AsmOperandSpec (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7717 if (mcLexBuf_currenttoken == mcReserved_colontok)
7719 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7720 AsmList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7721 if (mcLexBuf_currenttoken == mcReserved_colontok)
7723 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7724 AsmList (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7725 if (mcLexBuf_currenttoken == mcReserved_colontok)
7727 Expect (mcReserved_colontok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7728 TrashList (stopset0, stopset1, stopset2);
7736 AsmList := [ AsmElement ] { ',' AsmElement }
7738 first symbols:lsbratok, stringtok, commatok
7740 reachend
7743 static void AsmList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7745 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_stringtok))
7747 AsmElement (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7749 while (mcLexBuf_currenttoken == mcReserved_commatok)
7751 Expect (mcReserved_commatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7752 AsmElement (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7754 /* while */
7759 NamedOperand := '[' Ident ']'
7761 first symbols:lsbratok
7763 cannot reachend
7766 static void NamedOperand (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7768 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7769 Ident (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7770 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
7775 AsmOperandName := [ NamedOperand ]
7777 first symbols:lsbratok
7779 reachend
7782 static void AsmOperandName (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7784 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7786 NamedOperand (stopset0, stopset1, stopset2);
7792 AsmElement := AsmOperandName string '(' Expression
7795 first symbols:stringtok, lsbratok
7797 cannot reachend
7800 static void AsmElement (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7802 AsmOperandName (stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7803 string (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
7804 Expect (mcReserved_lparatok, stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp3_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7805 Expression (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7806 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
7811 TrashList := [ string ] { ',' string }
7813 first symbols:commatok, stringtok
7815 reachend
7818 static void TrashList (mcp3_SetOfStop0 stopset0, mcp3_SetOfStop1 stopset1, mcp3_SetOfStop2 stopset2)
7820 if (mcLexBuf_currenttoken == mcReserved_stringtok)
7822 string (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7824 while (mcLexBuf_currenttoken == mcReserved_commatok)
7826 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp3_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
7827 string (stopset0|(mcp3_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7829 /* while */
7834 CompilationUnit - returns TRUE if the input was correct enough to parse
7835 in future passes.
7838 extern "C" bool mcp3_CompilationUnit (void)
7840 stk = mcStack_init ();
7841 WasNoError = true;
7842 FileUnit ((mcp3_SetOfStop0) ((1 << (mcReserved_eoftok-mcReserved_eoftok))), (mcp3_SetOfStop1) 0, (mcp3_SetOfStop2) 0);
7843 mcStack_kill (&stk);
7844 return WasNoError;
7845 /* static analysis guarentees a RETURN statement will be used before here. */
7846 __builtin_unreachable ();
7849 extern "C" void _M2_mcp3_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
7853 extern "C" void _M2_mcp3_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])