Daily bump.
[official-gcc.git] / gcc / m2 / mc-boot / Gmcp5.cc
blob20b006cab71bc71270d1ca096f8b439eded93bd1
1 /* do not edit automatically generated by mc from mcp5. */
2 /* output from mc-5.bnf, automatically generated do not edit.
4 Copyright (C) 2016-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 _mcp5_C
46 #include "Gmcp5.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 "GmcComment.h"
54 # include "GmcMetaError.h"
55 # include "GmcStack.h"
56 # include "GmcLexBuf.h"
57 # include "Gdecl.h"
59 # define Pass1 false
60 # define Debugging false
61 typedef unsigned int mcp5_stop0;
63 typedef unsigned int mcp5_SetOfStop0;
65 typedef unsigned int mcp5_stop1;
67 typedef unsigned int mcp5_SetOfStop1;
69 typedef unsigned int mcp5_stop2;
71 typedef unsigned int mcp5_SetOfStop2;
73 static bool WasNoError;
74 static nameKey_Name curstring;
75 static nameKey_Name curident;
76 static decl_node curproc;
77 static decl_node frommodule;
78 static decl_node qualid;
79 static decl_node typeDes;
80 static decl_node typeExp;
81 static decl_node curmodule;
82 static unsigned int loopNo;
83 static mcStack_stack loopStk;
84 static mcStack_stack stmtStk;
85 static mcStack_stack withStk;
86 static mcStack_stack stk;
89 CompilationUnit - returns TRUE if the input was correct enough to parse
90 in future passes.
93 extern "C" bool mcp5_CompilationUnit (void);
96 followNode -
99 static void followNode (decl_node n);
102 push -
105 static decl_node push (decl_node n);
108 pop -
111 static decl_node pop (void);
114 replace -
117 static decl_node replace (decl_node n);
120 peep - returns the top node on the stack without removing it.
123 static decl_node peep (void);
126 depth - returns the depth of the stack.
129 static unsigned int depth (void);
132 checkDuplicate -
135 static void checkDuplicate (bool b);
138 isQualident - returns TRUE if, n, is a qualident.
141 static bool isQualident (decl_node n);
144 startWith -
147 static void startWith (decl_node n);
150 endWith -
153 static void endWith (void);
156 lookupWithSym -
159 static decl_node lookupWithSym (nameKey_Name i);
162 pushStmt - push a node, n, to the statement stack and return node, n.
165 static decl_node pushStmt (decl_node n);
168 popStmt - pop the top node from the statement stack.
171 static decl_node popStmt (void);
174 peepStmt - return the top node from the statement stack,
175 but leave the stack unchanged.
178 static decl_node peepStmt (void);
181 pushLoop - push a node, n, to the loop stack and return node, n.
184 static decl_node pushLoop (decl_node n);
187 popLoop - pop the top node from the loop stack.
190 static decl_node popLoop (void);
193 peepLoop - return the top node from the loop stack,
194 but leave the stack unchanged.
197 static decl_node peepLoop (void);
200 peepLoop - return the top node from the loop stack,
201 but leave the stack unchanged.
204 static void ErrorString (DynamicStrings_String s);
207 peepLoop - return the top node from the loop stack,
208 but leave the stack unchanged.
211 static void ErrorArray (const char *a_, unsigned int _a_high);
214 pushNunbounded -
217 static void pushNunbounded (unsigned int c);
220 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
223 static decl_node makeIndexedArray (unsigned int c, decl_node t);
226 importInto - from, m, import, name, into module, current.
227 It checks to see if curident is an enumeration type
228 and if so automatically includes all enumeration fields
229 as well.
232 static void importInto (decl_node m, nameKey_Name name, decl_node current);
235 checkEndName - if module does not have, name, then issue an error containing, desc.
238 static void checkEndName (decl_node module, nameKey_Name name, const char *desc_, unsigned int _desc_high);
241 DescribeStop - issues a message explaining what tokens were expected
244 static DynamicStrings_String DescribeStop (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
247 DescribeError - issues a message explaining what tokens were expected
250 static void DescribeError (void);
253 SyntaxError - after a syntax error we skip all tokens up until we reach
254 a stop symbol.
257 static void SyntaxError (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
260 SyntaxCheck -
263 static void SyntaxCheck (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
266 WarnMissingToken - generates a warning message about a missing token, t.
269 static void WarnMissingToken (mcReserved_toktype t);
272 MissingToken - generates a warning message about a missing token, t.
275 static void MissingToken (mcReserved_toktype t);
278 CheckAndInsert -
281 static bool CheckAndInsert (mcReserved_toktype t, mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
284 InStopSet
287 static bool InStopSet (mcReserved_toktype t, mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
290 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
291 If it is not then it will insert a token providing the token
292 is one of ; ] ) } . OF END ,
294 if the stopset contains <identtok> then we do not insert a token
297 static void PeepToken (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
300 Expect -
303 static void Expect (mcReserved_toktype t, mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
306 Ident - error checking varient of Ident
309 static void Ident (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
312 string -
315 static void string (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
318 Integer -
321 static void Integer (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
324 Real -
327 static void Real (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
330 FileUnit := DefinitionModule |
331 ImplementationOrProgramModule
333 first symbols:implementationtok, moduletok, definitiontok
335 cannot reachend
338 static void FileUnit (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
341 ProgramModule := 'MODULE' Ident
342 % curmodule := lookupModule (curident) %
344 % addCommentBody (curmodule) %
346 % enterScope (curmodule) %
348 % resetConstExpPos (curmodule) %
349 [ Priority ] ';' { Import } Block
350 Ident
351 % checkEndName (curmodule, curident, 'program module') %
353 % leaveScope %
356 first symbols:moduletok
358 cannot reachend
361 static void ProgramModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
364 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
365 Ident
366 % curmodule := lookupImp (curident) %
368 % addCommentBody (curmodule) %
370 % enterScope (lookupDef (curident)) %
372 % enterScope (curmodule) %
374 % resetConstExpPos (curmodule) %
375 [ Priority ] ';' { Import }
376 Block Ident
377 % checkEndName (curmodule, curident, 'implementation module') %
379 % leaveScope ; leaveScope %
382 first symbols:implementationtok
384 cannot reachend
387 static void ImplementationModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
390 ImplementationOrProgramModule := ImplementationModule |
391 ProgramModule
393 first symbols:moduletok, implementationtok
395 cannot reachend
398 static void ImplementationOrProgramModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
401 ConstInteger := Integer
402 % VAR i: node ; %
404 % i := pop () %
407 first symbols:integertok
409 cannot reachend
412 static void ConstInteger (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
415 ConstReal := Real
416 % VAR r: node ; %
418 % r := pop () %
421 first symbols:realtok
423 cannot reachend
426 static void ConstReal (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
429 ConstNumber := ConstInteger | ConstReal
431 first symbols:realtok, integertok
433 cannot reachend
436 static void ConstNumber (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
439 Number := Integer | Real
441 first symbols:realtok, integertok
443 cannot reachend
446 static void Number (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
449 Qualident := Ident { '.' Ident }
451 first symbols:identtok
453 cannot reachend
456 static void Qualident (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
459 ConstantDeclaration := Ident '=' ConstExpressionNop
461 first symbols:identtok
463 cannot reachend
466 static void ConstantDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
469 ConstExpressionNop :=
470 % VAR c: node ; %
472 % c := getNextConstExp () %
473 SimpleConstExpr [ Relation
474 SimpleConstExpr ]
476 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
478 cannot reachend
481 static void ConstExpressionNop (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
484 ConstExpression :=
485 % VAR c: node ; %
487 % c := push (getNextConstExp ()) %
488 SimpleConstExpr [ Relation SimpleConstExpr ]
490 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
492 cannot reachend
495 static void ConstExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
498 Relation := '=' | '#' | '<>' | '<' | '<=' |
499 '>' | '>=' | 'IN'
501 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
503 cannot reachend
506 static void Relation (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
509 SimpleConstExpr := UnaryOrConstTerm { AddOperator
510 ConstTerm }
512 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
514 cannot reachend
517 static void SimpleConstExpr (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
520 UnaryOrConstTerm := '+' ConstTerm |
521 '-' ConstTerm |
522 ConstTerm
524 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
526 cannot reachend
529 static void UnaryOrConstTerm (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
532 AddOperator := '+' | '-' | 'OR'
534 first symbols:ortok, minustok, plustok
536 cannot reachend
539 static void AddOperator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
542 ConstTerm := ConstFactor { MulOperator ConstFactor }
544 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
546 cannot reachend
549 static void ConstTerm (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
552 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
553 'REM' | 'AND' | '&'
555 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
557 cannot reachend
560 static void MulOperator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
563 NotConstFactor := 'NOT' ConstFactor
564 % VAR n: node ; %
566 % n := push (makeUnaryTok (nottok, pop ())) %
569 first symbols:nottok
571 cannot reachend
574 static void NotConstFactor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
577 ConstFactor := ConstNumber | ConstString |
578 ConstSetOrQualidentOrFunction |
579 '(' ConstExpressionNop ')' |
580 NotConstFactor |
581 ConstAttribute
583 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
585 cannot reachend
588 static void ConstFactor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
591 ConstString := string
593 first symbols:stringtok
595 cannot reachend
598 static void ConstString (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
601 ConstComponentElement := ConstExpressionNop [ '..'
602 ConstExpressionNop ]
604 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
606 cannot reachend
609 static void ConstComponentElement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
612 ConstComponentValue := ConstComponentElement [ 'BY'
613 ConstExpressionNop ]
615 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
617 cannot reachend
620 static void ConstComponentValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
623 ConstArraySetRecordValue := ConstComponentValue
624 { ',' ConstComponentValue }
626 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
628 cannot reachend
631 static void ConstArraySetRecordValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
634 ConstConstructor := '{' [ ConstArraySetRecordValue ]
637 first symbols:lcbratok
639 cannot reachend
642 static void ConstConstructor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
645 ConstSetOrQualidentOrFunction := Qualident [ ConstConstructor |
646 ConstActualParameters ] |
647 ConstConstructor
649 first symbols:lcbratok, identtok
651 cannot reachend
654 static void ConstSetOrQualidentOrFunction (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
657 ConstActualParameters := '(' [ ConstExpList ] ')'
659 first symbols:lparatok
661 cannot reachend
664 static void ConstActualParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
667 ConstExpList := ConstExpressionNop { ',' ConstExpressionNop }
669 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
671 cannot reachend
674 static void ConstExpList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
677 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
678 '(' '(' ConstAttributeExpression
679 ')' ')'
681 first symbols:attributetok
683 cannot reachend
686 static void ConstAttribute (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
689 ConstAttributeExpression := Ident | '<' Qualident
690 ',' Ident '>'
692 first symbols:lesstok, identtok
694 cannot reachend
697 static void ConstAttributeExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
700 ByteAlignment := ''
702 first symbols:ldirectivetok
704 cannot reachend
707 static void ByteAlignment (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
710 OptAlignmentExpression := [ AlignmentExpression ]
712 first symbols:lparatok
714 reachend
717 static void OptAlignmentExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
720 AlignmentExpression := '(' ConstExpressionNop ')'
722 first symbols:lparatok
724 cannot reachend
727 static void AlignmentExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
730 Alignment := [ ByteAlignment ]
732 first symbols:ldirectivetok
734 reachend
737 static void Alignment (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
740 IdentList := Ident { ',' Ident }
742 first symbols:identtok
744 cannot reachend
747 static void IdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
750 SubrangeType := '[' ConstExpressionNop '..' ConstExpressionNop
753 first symbols:lsbratok
755 cannot reachend
758 static void SubrangeType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
761 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
762 'OF' Type
764 first symbols:arraytok
766 cannot reachend
769 static void ArrayType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
772 RecordType := 'RECORD' [ DefaultRecordAttributes ]
773 FieldListSequence 'END'
775 first symbols:recordtok
777 cannot reachend
780 static void RecordType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
783 DefaultRecordAttributes := ''
785 first symbols:ldirectivetok
787 cannot reachend
790 static void DefaultRecordAttributes (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
793 RecordFieldPragma := [ '' ]
795 first symbols:ldirectivetok
797 reachend
800 static void RecordFieldPragma (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
803 FieldPragmaExpression := Ident PragmaConstExpression
805 first symbols:identtok
807 cannot reachend
810 static void FieldPragmaExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
813 PragmaConstExpression := [ '(' ConstExpressionNop
814 ')' ]
816 first symbols:lparatok
818 reachend
821 static void PragmaConstExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
824 AttributeExpression := Ident '(' ConstExpressionNop
827 first symbols:identtok
829 cannot reachend
832 static void AttributeExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
835 FieldListSequence := FieldListStatement { ';' FieldListStatement }
837 first symbols:casetok, identtok, semicolontok
839 reachend
842 static void FieldListSequence (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
845 FieldListStatement := [ FieldList ]
847 first symbols:identtok, casetok
849 reachend
852 static void FieldListStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
855 FieldList := IdentList ':' Type RecordFieldPragma |
856 'CASE' CaseTag 'OF' Varient { '|' Varient }
857 [ 'ELSE' FieldListSequence ] 'END'
859 first symbols:casetok, identtok
861 cannot reachend
864 static void FieldList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
867 TagIdent := Ident |
868 % curident := NulName %
871 first symbols:identtok
873 reachend
876 static void TagIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
879 CaseTag := TagIdent [ ':' Qualident ]
881 first symbols:colontok, identtok
883 reachend
886 static void CaseTag (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
889 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
891 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
893 reachend
896 static void Varient (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
899 VarientCaseLabelList := VarientCaseLabels { ','
900 VarientCaseLabels }
902 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
904 cannot reachend
907 static void VarientCaseLabelList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
910 VarientCaseLabels := ConstExpressionNop [ '..' ConstExpressionNop ]
912 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
914 cannot reachend
917 static void VarientCaseLabels (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
920 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
922 first symbols:oftok, packedsettok, settok
924 cannot reachend
927 static void SetType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
930 PointerType := 'POINTER' 'TO' Type
932 first symbols:pointertok
934 cannot reachend
937 static void PointerType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
940 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
942 first symbols:proceduretok
944 cannot reachend
947 static void ProcedureType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
950 FormalTypeList := '(' ( ')' FormalReturn |
951 ProcedureParameters ')'
952 FormalReturn )
954 first symbols:lparatok
956 cannot reachend
959 static void FormalTypeList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
962 FormalReturn := [ ':' OptReturnType ]
964 first symbols:colontok
966 reachend
969 static void FormalReturn (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
972 OptReturnType := '[' Qualident ']' |
973 Qualident
975 first symbols:identtok, lsbratok
977 cannot reachend
980 static void OptReturnType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
983 ProcedureParameters := ProcedureParameter { ','
984 ProcedureParameter }
986 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
988 cannot reachend
991 static void ProcedureParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
994 ProcedureParameter := '...' | 'VAR' FormalType |
995 FormalType
997 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
999 cannot reachend
1002 static void ProcedureParameter (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1005 VarIdent := Ident [ '[' ConstExpressionNop ']' ]
1007 first symbols:identtok
1009 cannot reachend
1012 static void VarIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1015 VarIdentList := VarIdent { ',' VarIdent }
1017 first symbols:identtok
1019 cannot reachend
1022 static void VarIdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1025 VariableDeclaration := VarIdentList ':' Type Alignment
1027 first symbols:identtok
1029 cannot reachend
1032 static void VariableDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1035 Designator := PushQualident { SubDesignator }
1037 first symbols:identtok
1039 cannot reachend
1042 static void Designator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1045 SubDesignator :=
1046 % VAR n, field, type: node ; %
1048 % n := peep () %
1050 % IF n = NIL
1051 THEN
1052 ErrorArray ('no expression found') ;
1053 flushErrors ;
1054 RETURN
1055 END %
1057 % type := skipType (getType (n)) %
1058 ( '.' Ident
1059 % IF isRecord (type)
1060 THEN
1061 field := lookupInScope (type, curident) ;
1062 IF field = NIL
1063 THEN
1064 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
1065 ELSE
1066 n := replace (makeComponentRef (n, field))
1068 ELSE
1069 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
1070 END %
1071 | '[' ArrayExpList
1072 % IF isArray (type)
1073 THEN
1074 n := replace (makeArrayRef (n, pop ()))
1075 ELSE
1076 metaError1 ('attempting to access an array but the expression is not an array but a {%1d}', type)
1077 END %
1078 ']' | SubPointer )
1080 first symbols:uparrowtok, lsbratok, periodtok
1082 cannot reachend
1085 static void SubDesignator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1088 SubPointer :=
1089 % VAR n, field, type: node ; %
1091 % n := peep () %
1093 % type := skipType (getType (n)) %
1094 '^' ( '.' Ident
1095 % IF isPointer (type)
1096 THEN
1097 type := skipType (getType (type)) ;
1098 IF isRecord (type)
1099 THEN
1100 field := lookupInScope (type, curident) ;
1101 IF field = NIL
1102 THEN
1103 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
1104 ELSE
1105 n := replace (makePointerRef (n, field))
1107 ELSE
1108 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
1110 ELSE
1111 metaError2 ('trying to dereference {%1k} which was not declared as a pointer but a {%2tad}', n, n)
1112 END %
1114 % IF isPointer (type)
1115 THEN
1116 n := replace (makeDeRef (n))
1117 ELSE
1118 metaError1 ('attempting to dereference a pointer but the expression is not a pointer but a {%1d}', type)
1119 END %
1122 first symbols:uparrowtok
1124 cannot reachend
1127 static void SubPointer (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1130 ArrayExpList :=
1131 % VAR l: node ; %
1133 % l := push (makeExpList ()) %
1134 Expression
1135 % putExpList (l, pop ()) %
1137 % assert (isExpList (peep ())) %
1138 { ',' Expression
1139 % putExpList (l, pop ()) %
1141 % assert (isExpList (peep ())) %
1144 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1146 cannot reachend
1149 static void ArrayExpList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1152 ExpList :=
1153 % VAR p, n: node ; %
1155 % p := peep () %
1157 % assert (isExpList (p)) %
1158 Expression
1159 % putExpList (p, pop ()) %
1161 % assert (isExpList (peep ())) %
1162 { ',' Expression
1163 % putExpList (p, pop ()) %
1165 % assert (isExpList (peep ())) %
1168 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1170 cannot reachend
1173 static void ExpList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1176 Expression :=
1177 % VAR c, l, r: node ; op: toktype ; %
1178 SimpleExpression
1179 % op := currenttoken %
1180 [ Relation
1181 % l := pop () %
1182 SimpleExpression
1183 % r := pop () %
1185 % r := push (makeBinaryTok (op, l, r)) %
1188 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1190 cannot reachend
1193 static void Expression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1196 SimpleExpression :=
1197 % VAR op: toktype ; n: node ; %
1198 UnaryOrTerm {
1199 % op := currenttoken %
1201 % n := pop () %
1202 AddOperator Term
1204 % n := push (makeBinaryTok (op, n, pop ())) %
1207 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1209 cannot reachend
1212 static void SimpleExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1215 UnaryOrTerm :=
1216 % VAR n: node ; %
1217 '+' Term
1218 % n := push (makeUnaryTok (plustok, pop ())) %
1219 | '-' Term
1220 % n := push (makeUnaryTok (minustok, pop ())) %
1221 | Term
1223 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1225 cannot reachend
1228 static void UnaryOrTerm (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1231 Term :=
1232 % VAR op: toktype ; n: node ; %
1233 Factor {
1234 % op := currenttoken %
1235 MulOperator
1236 % n := pop () %
1237 Factor
1238 % n := push (makeBinaryTok (op, n, pop ())) %
1241 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok
1243 cannot reachend
1246 static void Term (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1249 PushString := string
1250 % VAR n: node ; %
1252 % n := push (makeString (curstring)) %
1255 first symbols:stringtok
1257 cannot reachend
1260 static void PushString (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1263 Factor := Number | PushString | SetOrDesignatorOrFunction |
1264 '(' Expression ')' |
1265 'NOT' ( Factor
1266 % VAR n: node ; %
1268 % n := push (makeUnaryTok (nottok, pop ())) %
1269 | ConstAttribute
1270 % n := push (makeUnaryTok (nottok, pop ())) %
1273 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1275 cannot reachend
1278 static void Factor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1281 ComponentElement := Expression
1282 % VAR l, h, n: node ; %
1284 % l := pop () %
1286 % h := NIL %
1287 [ '..' Expression
1288 % h := pop () %
1290 % ErrorArray ('implementation restriction range is not allowed') %
1292 % n := push (includeSetValue (pop (), l, h)) %
1295 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1297 cannot reachend
1300 static void ComponentElement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1303 ComponentValue := ComponentElement [ 'BY'
1304 % ErrorArray ('implementation restriction BY not allowed') %
1305 Expression ]
1307 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1309 cannot reachend
1312 static void ComponentValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1315 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
1317 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1319 cannot reachend
1322 static void ArraySetRecordValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1325 Constructor := '{'
1326 % VAR n: node ; %
1328 % n := push (makeSetValue ()) %
1329 [ ArraySetRecordValue ] '}'
1331 first symbols:lcbratok
1333 cannot reachend
1336 static void Constructor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1339 SetOrDesignatorOrFunction := PushQualident
1340 % VAR q, p, n: node ; %
1341 [ Constructor
1342 % p := pop () %
1344 % q := pop () %
1346 % n := push (putSetValue (p, q)) %
1347 | SimpleDes [
1348 % q := pop () %
1349 ActualParameters
1351 % p := pop () %
1353 % p := push (makeFuncCall (q, p)) %
1354 ] ] |
1355 Constructor
1357 first symbols:identtok, lcbratok
1359 cannot reachend
1362 static void SetOrDesignatorOrFunction (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1365 SimpleDes := { SubDesignator }
1367 first symbols:uparrowtok, periodtok, lsbratok
1369 reachend
1372 static void SimpleDes (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1375 ActualParameters := '('
1376 % VAR n: node ; %
1378 % n := push (makeExpList ()) %
1379 [ ExpList ] ')'
1380 % assert (isExpList (peep ())) %
1383 first symbols:lparatok
1385 cannot reachend
1388 static void ActualParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1391 ExitStatement :=
1392 % VAR n: node ; %
1393 'EXIT'
1394 % IF loopNo = 0
1395 THEN
1396 ErrorArray ('EXIT can only be used inside a LOOP statement')
1397 ELSE
1398 n := pushStmt (makeExit (peepLoop (), loopNo))
1399 END %
1402 first symbols:exittok
1404 cannot reachend
1407 static void ExitStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1410 ReturnStatement :=
1411 % VAR n: node ; %
1413 % n := pushStmt (makeReturn ()) %
1414 'RETURN' [ Expression
1415 % putReturn (n, pop ()) %
1417 % addCommentBody (peepStmt ()) %
1419 % addCommentAfter (peepStmt ()) %
1421 % assert (isReturn (peepStmt ())) %
1424 first symbols:returntok
1426 cannot reachend
1429 static void ReturnStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1432 Statement := ( AssignmentOrProcedureCall |
1433 IfStatement | CaseStatement |
1434 WhileStatement |
1435 RepeatStatement |
1436 LoopStatement | ForStatement |
1437 WithStatement | AsmStatement |
1438 ExitStatement | ReturnStatement |
1439 RetryStatement |
1441 % VAR s: node ; %
1443 % s := pushStmt (NIL) %
1446 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok
1448 reachend
1451 static void Statement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1454 RetryStatement :=
1455 % VAR s: node ; %
1457 % s := pushStmt (makeComment ("retry")) %
1458 'RETRY'
1460 first symbols:retrytok
1462 cannot reachend
1465 static void RetryStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1468 AssignmentOrProcedureCall :=
1469 % VAR d, a, p: node ; %
1470 Designator
1471 % d := pop () %
1472 ( ':=' Expression
1473 % a := pushStmt (makeAssignment (d, pop ())) %
1475 ActualParameters
1477 % a := pushStmt (makeFuncCall (d, pop ())) %
1480 % a := pushStmt (makeFuncCall (d, NIL)) %
1482 % addCommentBody (peepStmt ()) %
1484 % addCommentAfter (peepStmt ()) %
1487 first symbols:identtok
1489 cannot reachend
1492 static void AssignmentOrProcedureCall (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1495 StatementSequence :=
1496 % VAR s, t: node ; %
1498 % s := pushStmt (makeStatementSequence ()) %
1500 % assert (isStatementSequence (peepStmt ())) %
1501 Statement
1502 % addStatement (s, popStmt ()) %
1504 % assert (isStatementSequence (peepStmt ())) %
1505 { ';' Statement
1506 % addStatement (s, popStmt ()) %
1508 % assert (isStatementSequence (peepStmt ())) %
1511 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1513 reachend
1516 static void StatementSequence (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1519 IfStatement :=
1520 % VAR i, a, b: node ; %
1521 'IF'
1522 % b := makeCommentS (getBodyComment ()) %
1523 Expression
1524 % a := makeCommentS (getAfterComment ()) %
1525 'THEN' StatementSequence
1526 % i := pushStmt (makeIf (pop (), popStmt ())) %
1528 % addIfComments (i, b, a) %
1529 { 'ELSIF'
1530 % b := makeCommentS (getBodyComment ()) %
1531 Expression
1532 % a := makeCommentS (getAfterComment ()) %
1533 'THEN'
1534 % addElseComments (peepStmt (), b, a) %
1535 StatementSequence
1536 % i := makeElsif (i, pop (), popStmt ()) %
1537 } [ 'ELSE' StatementSequence
1538 % putElse (i, popStmt ()) %
1539 ] 'END'
1540 % b := makeCommentS (getBodyComment ()) %
1542 % a := makeCommentS (getAfterComment ()) %
1544 % assert (isIf (peepStmt ())) %
1546 % addIfEndComments (peepStmt (), b, a) %
1549 first symbols:iftok
1551 cannot reachend
1554 static void IfStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1557 CaseStatement :=
1558 % VAR s, e: node ; %
1560 % s := pushStmt (makeCase ()) %
1561 'CASE' Expression
1562 % s := putCaseExpression (s, pop ()) %
1563 'OF' Case { '|' Case } CaseEndStatement
1565 first symbols:casetok
1567 cannot reachend
1570 static void CaseStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1573 CaseEndStatement :=
1574 % VAR c: node ; %
1575 'END' | 'ELSE'
1576 % c := peepStmt () %
1577 StatementSequence
1578 % c := putCaseElse (c, popStmt ()) %
1579 'END'
1581 first symbols:elsetok, endtok
1583 cannot reachend
1586 static void CaseEndStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1589 Case := [ CaseLabelList ':'
1590 % VAR l, c: node ; %
1592 % l := pop () %
1594 % c := peepStmt () %
1595 StatementSequence
1596 % c := putCaseStatement (c, l, popStmt ()) %
1599 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1601 reachend
1604 static void Case (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1607 CaseLabelList :=
1608 % VAR l: node ; %
1610 % l := push (makeCaseList ()) %
1611 CaseLabels { ',' CaseLabels }
1613 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1615 cannot reachend
1618 static void CaseLabelList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1621 CaseLabels :=
1622 % VAR lo, hi, l: node ; %
1624 % lo := NIL ; hi := NIL %
1626 % l := peep () %
1627 ConstExpression
1628 % lo := pop () %
1629 [ '..' ConstExpression
1630 % hi := pop () %
1632 % l := putCaseRange (l, lo, hi) %
1635 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1637 cannot reachend
1640 static void CaseLabels (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1643 WhileStatement :=
1644 % VAR s, w, e, a, b: node ; %
1646 % w := pushStmt (makeWhile ()) %
1647 'WHILE' Expression 'DO'
1648 % b := makeCommentS (getBodyComment ()) %
1650 % a := makeCommentS (getAfterComment ()) %
1652 % addWhileDoComment (w, b, a) %
1654 % e := pop () %
1655 StatementSequence
1656 % s := popStmt () %
1657 'END'
1658 % assert (isStatementSequence (peepStmt ())) %
1660 % putWhile (w, e, s) %
1662 % b := makeCommentS (getBodyComment ()) %
1664 % a := makeCommentS (getAfterComment ()) %
1666 % addWhileEndComment (w, b, a) %
1669 first symbols:whiletok
1671 cannot reachend
1674 static void WhileStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1677 RepeatStatement :=
1678 % VAR r, s, a, b: node ; %
1680 % r := pushStmt (makeRepeat ()) %
1681 'REPEAT'
1682 % b := makeCommentS (getBodyComment ()) %
1684 % a := makeCommentS (getAfterComment ()) %
1686 % addRepeatComment (r, b, a) %
1687 StatementSequence
1688 % s := popStmt () %
1689 'UNTIL' Expression
1690 % putRepeat (r, s, pop ()) %
1692 % b := makeCommentS (getBodyComment ()) %
1694 % a := makeCommentS (getAfterComment ()) %
1696 % addUntilComment (r, b, a) %
1699 first symbols:repeattok
1701 cannot reachend
1704 static void RepeatStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1707 ForStatement :=
1708 % VAR f, i, s, e, b: node ; %
1710 % b := NIL %
1712 % f := pushStmt (makeFor ()) %
1713 'FOR' Ident
1714 % i := lookupWithSym (curident) %
1715 ':=' Expression
1716 % s := pop () %
1717 'TO' Expression
1718 % e := pop () %
1719 [ 'BY' ConstExpression
1720 % b := pop () %
1721 ] 'DO' StatementSequence
1722 % putFor (f, i, s, e, b, popStmt ()) %
1723 'END'
1725 first symbols:fortok
1727 cannot reachend
1730 static void ForStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1733 LoopStatement :=
1734 % VAR l, s: node ; %
1735 'LOOP'
1736 % l := pushStmt (pushLoop (makeLoop ())) %
1738 % INC (loopNo) %
1739 StatementSequence
1740 % s := popStmt () %
1742 % putLoop (l, s) %
1744 % DEC (loopNo) %
1745 'END'
1746 % l := popLoop () %
1748 % assert (isLoop (peepStmt ())) %
1751 first symbols:looptok
1753 cannot reachend
1756 static void LoopStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1759 WithStatement := 'WITH' Designator 'DO'
1760 % startWith (pop ()) %
1761 StatementSequence 'END'
1762 % endWith %
1765 first symbols:withtok
1767 cannot reachend
1770 static void WithStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1773 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
1774 Ident
1775 % leaveScope %
1778 first symbols:proceduretok
1780 cannot reachend
1783 static void ProcedureDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1786 ProcedureIdent := Ident
1787 % curproc := lookupSym (curident) %
1789 % enterScope (curproc) %
1791 % setProcedureComment (lastcomment, curident) %
1794 first symbols:identtok
1796 cannot reachend
1799 static void ProcedureIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1802 DefProcedureIdent := Ident
1803 % curproc := lookupSym (curident) %
1806 first symbols:identtok
1808 cannot reachend
1811 static void DefProcedureIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1814 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
1815 '(' '(' Ident ')' ')' |
1816 '__INLINE__' ]
1818 first symbols:inlinetok, attributetok
1820 reachend
1823 static void DefineBuiltinProcedure (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1826 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
1827 ( ProcedureIdent [ FormalParameters ]
1828 AttributeNoReturn )
1830 first symbols:proceduretok
1832 cannot reachend
1835 static void ProcedureHeading (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1838 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
1840 first symbols:inlinetok, builtintok
1842 reachend
1845 static void Builtin (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1848 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
1849 [ DefFormalParameters ]
1850 AttributeNoReturn )
1852 first symbols:proceduretok
1854 cannot reachend
1857 static void DefProcedureHeading (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1860 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
1861 'END'
1863 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
1865 cannot reachend
1868 static void ProcedureBlock (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1871 Block := { Declaration } InitialBlock FinalBlock
1872 'END'
1874 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
1876 cannot reachend
1879 static void Block (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1882 InitialBlock := [ 'BEGIN' InitialBlockBody ]
1884 first symbols:begintok
1886 reachend
1889 static void InitialBlock (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1892 FinalBlock := [ 'FINALLY' FinalBlockBody ]
1894 first symbols:finallytok
1896 reachend
1899 static void FinalBlock (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1902 InitialBlockBody := NormalPart
1903 % putBegin (curmodule, popStmt ()) %
1904 [ 'EXCEPT' ExceptionalPart ]
1906 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1908 reachend
1911 static void InitialBlockBody (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1914 FinalBlockBody := NormalPart
1915 % putFinally (curmodule, popStmt ()) %
1916 [ 'EXCEPT' ExceptionalPart ]
1918 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1920 reachend
1923 static void FinalBlockBody (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1926 ProcedureBlockBody := ProcedureNormalPart [ 'EXCEPT'
1927 ExceptionalPart ]
1929 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1931 reachend
1934 static void ProcedureBlockBody (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1937 ProcedureNormalPart := StatementSequence
1938 % putBegin (curproc, popStmt ()) %
1941 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok, semicolontok
1943 reachend
1946 static void ProcedureNormalPart (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1949 NormalPart := StatementSequence
1951 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok, semicolontok
1953 reachend
1956 static void NormalPart (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1959 ExceptionalPart := StatementSequence
1961 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok, semicolontok
1963 reachend
1966 static void ExceptionalPart (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1969 Declaration := 'CONST' { ConstantDeclaration ';' } |
1970 'TYPE' { TypeDeclaration } |
1971 'VAR' { VariableDeclaration ';' } |
1972 ProcedureDeclaration ';' |
1973 ModuleDeclaration ';'
1975 first symbols:moduletok, proceduretok, vartok, typetok, consttok
1977 cannot reachend
1980 static void Declaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1983 DefFormalParameters := '('
1984 % paramEnter (curproc) %
1985 [ DefMultiFPSection ] ')'
1987 % paramLeave (curproc) %
1988 FormalReturn
1990 first symbols:lparatok
1992 cannot reachend
1995 static void DefFormalParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
1998 AttributeNoReturn := [ '' ]
2000 first symbols:ldirectivetok
2002 reachend
2005 static void AttributeNoReturn (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2008 AttributeUnused := [ '' ]
2010 first symbols:ldirectivetok
2012 reachend
2015 static void AttributeUnused (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2018 DefMultiFPSection := DefExtendedFP |
2019 FPSection [ ';' DefMultiFPSection ]
2021 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
2023 cannot reachend
2026 static void DefMultiFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2029 FormalParameters := '('
2030 % paramEnter (curproc) %
2031 [ MultiFPSection ] ')'
2032 % paramLeave (curproc) %
2033 FormalReturn
2035 first symbols:lparatok
2037 cannot reachend
2040 static void FormalParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2043 MultiFPSection := ExtendedFP | FPSection [ ';'
2044 MultiFPSection ]
2046 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
2048 cannot reachend
2051 static void MultiFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2054 FPSection := NonVarFPSection |
2055 VarFPSection
2057 first symbols:vartok, identtok
2059 cannot reachend
2062 static void FPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2065 DefExtendedFP := DefOptArg | '...'
2067 first symbols:lsbratok, periodperiodperiodtok
2069 cannot reachend
2072 static void DefExtendedFP (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2075 ExtendedFP := OptArg | '...'
2077 first symbols:lsbratok, periodperiodperiodtok
2079 cannot reachend
2082 static void ExtendedFP (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2085 VarFPSection := 'VAR' IdentList ':' FormalType [
2086 AttributeUnused ]
2088 first symbols:vartok
2090 cannot reachend
2093 static void VarFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2096 NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
2098 first symbols:identtok
2100 cannot reachend
2103 static void NonVarFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2106 OptArg := '[' Ident ':' FormalType [ '=' ConstExpressionNop ]
2109 first symbols:lsbratok
2111 cannot reachend
2114 static void OptArg (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2117 DefOptArg := '[' Ident ':' FormalType '=' ConstExpressionNop
2120 first symbols:lsbratok
2122 cannot reachend
2125 static void DefOptArg (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2128 FormalType := { 'ARRAY' 'OF' } Qualident
2130 first symbols:identtok, arraytok
2132 cannot reachend
2135 static void FormalType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2138 ModuleDeclaration := 'MODULE' Ident [ Priority ]
2139 ';' { Import } [ Export ]
2140 Block Ident
2142 first symbols:moduletok
2144 cannot reachend
2147 static void ModuleDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2150 Priority := '[' ConstExpressionNop ']'
2152 first symbols:lsbratok
2154 cannot reachend
2157 static void Priority (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2160 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
2161 'UNQUALIFIED' IdentList |
2162 IdentList ) ';'
2164 first symbols:exporttok
2166 cannot reachend
2169 static void Export (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2172 FromIdentList := Ident { ',' Ident }
2174 first symbols:identtok
2176 cannot reachend
2179 static void FromIdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2182 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
2185 first symbols:fromtok
2187 cannot reachend
2190 static void FromImport (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2193 ImportModuleList := Ident { ',' Ident }
2195 first symbols:identtok
2197 cannot reachend
2200 static void ImportModuleList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2203 WithoutFromImport := 'IMPORT' ImportModuleList ';'
2205 first symbols:importtok
2207 cannot reachend
2210 static void WithoutFromImport (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2213 Import := FromImport | WithoutFromImport
2215 first symbols:importtok, fromtok
2217 cannot reachend
2220 static void Import (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2223 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
2224 string ]
2225 Ident ';'
2226 % curmodule := lookupDef (curident) %
2228 % enterScope (curmodule) %
2229 { Import } [ Export ] { Definition }
2230 'END' Ident '.'
2231 % checkEndName (curmodule, curident, 'definition module') %
2233 % leaveScope %
2236 first symbols:definitiontok
2238 cannot reachend
2241 static void DefinitionModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2244 PushQualident :=
2245 % VAR type, field: node ; %
2246 Ident
2247 % qualid := push (lookupWithSym (curident)) %
2249 % IF qualid = NIL
2250 THEN
2251 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
2252 END %
2253 [ '.'
2254 % IF NOT isQualident (qualid)
2255 THEN
2256 ErrorArray ('the first component of this qualident must be a definition module or a parameter/variable/constant which has record type')
2257 END %
2258 Ident
2259 % IF isDef (qualid)
2260 THEN
2261 qualid := replace (lookupInScope (qualid, curident))
2262 ELSE
2263 type := skipType (getType (qualid)) ;
2264 field := lookupInScope (type, curident) ;
2265 IF field = NIL
2266 THEN
2267 metaError2 ('field {%1k} cannot be found in {%2ad}', curident, qualid)
2268 ELSE
2269 qualid := replace (makeComponentRef (qualid, field))
2271 END ;
2272 IF qualid = NIL
2273 THEN
2274 metaError1 ('qualified component of the identifier {%1k} cannot be found', curident)
2275 END %
2278 first symbols:identtok
2280 cannot reachend
2283 static void PushQualident (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2286 OptSubrange := [ SubrangeType ]
2288 first symbols:lsbratok
2290 reachend
2293 static void OptSubrange (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2296 TypeEquiv := Qualident OptSubrange
2298 first symbols:identtok
2300 cannot reachend
2303 static void TypeEquiv (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2306 EnumIdentList := Ident { ',' Ident }
2308 first symbols:identtok
2310 cannot reachend
2313 static void EnumIdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2316 Enumeration := '(' EnumIdentList ')'
2318 first symbols:lparatok
2320 cannot reachend
2323 static void Enumeration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2326 SimpleType := TypeEquiv | Enumeration |
2327 SubrangeType
2329 first symbols:lsbratok, lparatok, identtok
2331 cannot reachend
2334 static void SimpleType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2337 Type := SimpleType | ArrayType | RecordType |
2338 SetType | PointerType | ProcedureType
2340 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
2342 cannot reachend
2345 static void Type (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2348 TypeDeclaration := { Ident ( ';' | '=' Type Alignment
2349 ';' ) }
2351 first symbols:identtok
2353 reachend
2356 static void TypeDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2359 Definition := 'CONST' { ConstantDeclaration ';' } |
2360 'TYPE' { TypeDeclaration } |
2361 'VAR' { VariableDeclaration ';' } |
2362 DefProcedureHeading ';'
2364 first symbols:proceduretok, vartok, typetok, consttok
2366 cannot reachend
2369 static void Definition (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2372 AsmStatement :=
2373 % VAR s: node ; %
2375 % s := pushStmt (makeComment ("asm")) %
2376 'ASM' [ 'VOLATILE' ] '(' AsmOperands
2379 first symbols:asmtok
2381 cannot reachend
2384 static void AsmStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2387 AsmOperands := string [ AsmOperandSpec ]
2389 first symbols:stringtok
2391 cannot reachend
2394 static void AsmOperands (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2397 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
2398 ':' TrashList ] ] ]
2400 first symbols:colontok
2402 reachend
2405 static void AsmOperandSpec (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2408 AsmList := [ AsmElement ] { ',' AsmElement }
2410 first symbols:lsbratok, stringtok, commatok
2412 reachend
2415 static void AsmList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2418 NamedOperand := '[' Ident ']'
2420 first symbols:lsbratok
2422 cannot reachend
2425 static void NamedOperand (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2428 AsmOperandName := [ NamedOperand ]
2430 first symbols:lsbratok
2432 reachend
2435 static void AsmOperandName (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2438 AsmElement := AsmOperandName string '(' Expression
2441 first symbols:stringtok, lsbratok
2443 cannot reachend
2446 static void AsmElement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2449 TrashList := [ string ] { ',' string }
2451 first symbols:commatok, stringtok
2453 reachend
2456 static void TrashList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2);
2460 followNode -
2463 static void followNode (decl_node n)
2465 if (decl_isVar (n))
2467 mcPrintf_printf0 ((const char *) "variable: ", 10);
2469 else if (decl_isParameter (n))
2471 /* avoid dangling else. */
2472 mcPrintf_printf0 ((const char *) "parameter: ", 11);
2474 n = decl_skipType (decl_getType (n));
2475 if (decl_isArray (n))
2477 mcPrintf_printf0 ((const char *) "array\\n", 7);
2479 else if (decl_isPointer (n))
2481 /* avoid dangling else. */
2482 mcPrintf_printf0 ((const char *) "pointer\\n", 9);
2484 else if (decl_isRecord (n))
2486 /* avoid dangling else. */
2487 mcPrintf_printf0 ((const char *) "record\\n", 8);
2489 else
2491 /* avoid dangling else. */
2492 mcPrintf_printf0 ((const char *) "other\\n", 7);
2498 push -
2501 static decl_node push (decl_node n)
2503 return static_cast<decl_node> (mcStack_push (stk, reinterpret_cast <void *> (n)));
2504 /* static analysis guarentees a RETURN statement will be used before here. */
2505 __builtin_unreachable ();
2510 pop -
2513 static decl_node pop (void)
2515 return static_cast<decl_node> (mcStack_pop (stk));
2516 /* static analysis guarentees a RETURN statement will be used before here. */
2517 __builtin_unreachable ();
2522 replace -
2525 static decl_node replace (decl_node n)
2527 return static_cast<decl_node> (mcStack_replace (stk, reinterpret_cast <void *> (n)));
2528 /* static analysis guarentees a RETURN statement will be used before here. */
2529 __builtin_unreachable ();
2534 peep - returns the top node on the stack without removing it.
2537 static decl_node peep (void)
2539 return push (pop ());
2540 /* static analysis guarentees a RETURN statement will be used before here. */
2541 __builtin_unreachable ();
2546 depth - returns the depth of the stack.
2549 static unsigned int depth (void)
2551 return mcStack_depth (stk);
2552 /* static analysis guarentees a RETURN statement will be used before here. */
2553 __builtin_unreachable ();
2558 checkDuplicate -
2561 static void checkDuplicate (bool b)
2567 isQualident - returns TRUE if, n, is a qualident.
2570 static bool isQualident (decl_node n)
2572 decl_node type;
2574 if (decl_isDef (n))
2576 return true;
2578 else
2580 type = decl_skipType (decl_getType (n));
2581 return (type != NULL) && (decl_isRecord (type));
2583 return false;
2584 /* static analysis guarentees a RETURN statement will be used before here. */
2585 __builtin_unreachable ();
2590 startWith -
2593 static void startWith (decl_node n)
2595 n = static_cast<decl_node> (mcStack_push (withStk, reinterpret_cast <void *> (n)));
2600 endWith -
2603 static void endWith (void)
2605 decl_node n;
2607 n = static_cast<decl_node> (mcStack_pop (withStk));
2612 lookupWithSym -
2615 static decl_node lookupWithSym (nameKey_Name i)
2617 unsigned int d;
2618 decl_node n;
2619 decl_node m;
2620 decl_node t;
2622 d = mcStack_depth (withStk);
2623 while (d != 0)
2625 n = static_cast<decl_node> (mcStack_access (withStk, d));
2626 t = decl_skipType (decl_getType (n));
2627 m = decl_lookupInScope (t, i);
2628 if (m != NULL)
2630 n = decl_dupExpr (n);
2631 return decl_makeComponentRef (n, m);
2633 d -= 1;
2635 return decl_lookupSym (i);
2636 /* static analysis guarentees a RETURN statement will be used before here. */
2637 __builtin_unreachable ();
2642 pushStmt - push a node, n, to the statement stack and return node, n.
2645 static decl_node pushStmt (decl_node n)
2647 return static_cast<decl_node> (mcStack_push (stmtStk, reinterpret_cast <void *> (n)));
2648 /* static analysis guarentees a RETURN statement will be used before here. */
2649 __builtin_unreachable ();
2654 popStmt - pop the top node from the statement stack.
2657 static decl_node popStmt (void)
2659 return static_cast<decl_node> (mcStack_pop (stmtStk));
2660 /* static analysis guarentees a RETURN statement will be used before here. */
2661 __builtin_unreachable ();
2666 peepStmt - return the top node from the statement stack,
2667 but leave the stack unchanged.
2670 static decl_node peepStmt (void)
2672 return pushStmt (popStmt ());
2673 /* static analysis guarentees a RETURN statement will be used before here. */
2674 __builtin_unreachable ();
2679 pushLoop - push a node, n, to the loop stack and return node, n.
2682 static decl_node pushLoop (decl_node n)
2684 return static_cast<decl_node> (mcStack_push (loopStk, reinterpret_cast <void *> (n)));
2685 /* static analysis guarentees a RETURN statement will be used before here. */
2686 __builtin_unreachable ();
2691 popLoop - pop the top node from the loop stack.
2694 static decl_node popLoop (void)
2696 return static_cast<decl_node> (mcStack_pop (loopStk));
2697 /* static analysis guarentees a RETURN statement will be used before here. */
2698 __builtin_unreachable ();
2703 peepLoop - return the top node from the loop stack,
2704 but leave the stack unchanged.
2707 static decl_node peepLoop (void)
2709 return pushLoop (popLoop ());
2710 /* static analysis guarentees a RETURN statement will be used before here. */
2711 __builtin_unreachable ();
2716 peepLoop - return the top node from the loop stack,
2717 but leave the stack unchanged.
2720 static void ErrorString (DynamicStrings_String s)
2722 mcError_errorStringAt (s, mcLexBuf_getTokenNo ());
2723 WasNoError = false;
2728 peepLoop - return the top node from the loop stack,
2729 but leave the stack unchanged.
2732 static void ErrorArray (const char *a_, unsigned int _a_high)
2734 char a[_a_high+1];
2736 /* make a local copy of each unbounded array. */
2737 memcpy (a, a_, _a_high+1);
2739 ErrorString (DynamicStrings_InitString ((const char *) a, _a_high));
2744 pushNunbounded -
2747 static void pushNunbounded (unsigned int c)
2749 decl_node type;
2750 decl_node array;
2751 decl_node subrange;
2753 while (c != 0)
2755 type = pop ();
2756 subrange = decl_makeSubrange (static_cast<decl_node> (NULL), static_cast<decl_node> (NULL));
2757 decl_putSubrangeType (subrange, decl_getCardinal ());
2758 array = decl_makeArray (subrange, type);
2759 decl_putUnbounded (array);
2760 type = push (array);
2761 c -= 1;
2767 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
2770 static decl_node makeIndexedArray (unsigned int c, decl_node t)
2772 decl_node i;
2774 while (c > 0)
2776 t = decl_makeArray (pop (), t);
2777 c -= 1;
2779 return t;
2780 /* static analysis guarentees a RETURN statement will be used before here. */
2781 __builtin_unreachable ();
2786 importInto - from, m, import, name, into module, current.
2787 It checks to see if curident is an enumeration type
2788 and if so automatically includes all enumeration fields
2789 as well.
2792 static void importInto (decl_node m, nameKey_Name name, decl_node current)
2794 decl_node s;
2795 decl_node o;
2797 mcDebug_assert (decl_isDef (m));
2798 mcDebug_assert (((decl_isDef (current)) || (decl_isModule (current))) || (decl_isImp (current)));
2799 s = decl_lookupExported (m, name);
2800 if (s == NULL)
2802 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));
2804 else
2806 o = decl_import (current, s);
2807 if (s != o)
2809 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));
2816 checkEndName - if module does not have, name, then issue an error containing, desc.
2819 static void checkEndName (decl_node module, nameKey_Name name, const char *desc_, unsigned int _desc_high)
2821 DynamicStrings_String s;
2822 char desc[_desc_high+1];
2824 /* make a local copy of each unbounded array. */
2825 memcpy (desc, desc_, _desc_high+1);
2827 if ((decl_getSymName (module)) != name)
2829 s = DynamicStrings_InitString ((const char *) "inconsistent module name found with this ", 41);
2830 s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) desc, _desc_high)));
2831 ErrorString (s);
2837 DescribeStop - issues a message explaining what tokens were expected
2840 static DynamicStrings_String DescribeStop (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
2842 unsigned int n;
2843 DynamicStrings_String str;
2844 DynamicStrings_String message;
2846 n = 0;
2847 message = DynamicStrings_InitString ((const char *) "", 0);
2848 if ((((1 << (mcReserved_stringtok-mcReserved_recordtok)) & (stopset2)) != 0))
2850 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "string", 6)));
2851 n += 1;
2853 if ((((1 << (mcReserved_realtok-mcReserved_recordtok)) & (stopset2)) != 0))
2855 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "real number", 11)));
2856 n += 1;
2858 if ((((1 << (mcReserved_identtok-mcReserved_recordtok)) & (stopset2)) != 0))
2860 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "identifier", 10)));
2861 n += 1;
2863 if ((((1 << (mcReserved_integertok-mcReserved_recordtok)) & (stopset2)) != 0))
2865 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "integer number", 14)));
2866 n += 1;
2868 if ((((1 << (mcReserved_inlinetok-mcReserved_recordtok)) & (stopset2)) != 0))
2870 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__INLINE__", 10)));
2871 n += 1;
2873 if ((((1 << (mcReserved_builtintok-mcReserved_recordtok)) & (stopset2)) != 0))
2875 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__BUILTIN__", 11)));
2876 n += 1;
2878 if ((((1 << (mcReserved_attributetok-mcReserved_recordtok)) & (stopset2)) != 0))
2880 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__ATTRIBUTE__", 13)));
2881 n += 1;
2883 if ((((1 << (mcReserved_filetok-mcReserved_recordtok)) & (stopset2)) != 0))
2885 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__FILE__", 8)));
2886 n += 1;
2888 if ((((1 << (mcReserved_linetok-mcReserved_recordtok)) & (stopset2)) != 0))
2890 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__LINE__", 8)));
2891 n += 1;
2893 if ((((1 << (mcReserved_datetok-mcReserved_recordtok)) & (stopset2)) != 0))
2895 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__DATE__", 8)));
2896 n += 1;
2898 if ((((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) & (stopset2)) != 0))
2900 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "...", 3)));
2901 n += 1;
2903 if ((((1 << (mcReserved_volatiletok-mcReserved_recordtok)) & (stopset2)) != 0))
2905 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VOLATILE", 8)));
2906 n += 1;
2908 if ((((1 << (mcReserved_asmtok-mcReserved_recordtok)) & (stopset2)) != 0))
2910 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ASM", 3)));
2911 n += 1;
2913 if ((((1 << (mcReserved_withtok-mcReserved_recordtok)) & (stopset2)) != 0))
2915 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WITH", 4)));
2916 n += 1;
2918 if ((((1 << (mcReserved_whiletok-mcReserved_recordtok)) & (stopset2)) != 0))
2920 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WHILE", 5)));
2921 n += 1;
2923 if ((((1 << (mcReserved_vartok-mcReserved_recordtok)) & (stopset2)) != 0))
2925 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VAR", 3)));
2926 n += 1;
2928 if ((((1 << (mcReserved_untiltok-mcReserved_recordtok)) & (stopset2)) != 0))
2930 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNTIL", 5)));
2931 n += 1;
2933 if ((((1 << (mcReserved_typetok-mcReserved_recordtok)) & (stopset2)) != 0))
2935 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TYPE", 4)));
2936 n += 1;
2938 if ((((1 << (mcReserved_totok-mcReserved_recordtok)) & (stopset2)) != 0))
2940 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TO", 2)));
2941 n += 1;
2943 if ((((1 << (mcReserved_thentok-mcReserved_recordtok)) & (stopset2)) != 0))
2945 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "THEN", 4)));
2946 n += 1;
2948 if ((((1 << (mcReserved_settok-mcReserved_recordtok)) & (stopset2)) != 0))
2950 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "SET", 3)));
2951 n += 1;
2953 if ((((1 << (mcReserved_returntok-mcReserved_recordtok)) & (stopset2)) != 0))
2955 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETURN", 6)));
2956 n += 1;
2958 if ((((1 << (mcReserved_retrytok-mcReserved_recordtok)) & (stopset2)) != 0))
2960 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETRY", 5)));
2961 n += 1;
2963 if ((((1 << (mcReserved_repeattok-mcReserved_recordtok)) & (stopset2)) != 0))
2965 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REPEAT", 6)));
2966 n += 1;
2968 if ((((1 << (mcReserved_remtok-mcReserved_recordtok)) & (stopset2)) != 0))
2970 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REM", 3)));
2971 n += 1;
2973 if ((((1 << (mcReserved_recordtok-mcReserved_recordtok)) & (stopset2)) != 0))
2975 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RECORD", 6)));
2976 n += 1;
2978 if ((((1 << (mcReserved_unqualifiedtok-mcReserved_arraytok)) & (stopset1)) != 0))
2980 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNQUALIFIED", 11)));
2981 n += 1;
2983 if ((((1 << (mcReserved_qualifiedtok-mcReserved_arraytok)) & (stopset1)) != 0))
2985 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "QUALIFIED", 9)));
2986 n += 1;
2988 if ((((1 << (mcReserved_proceduretok-mcReserved_arraytok)) & (stopset1)) != 0))
2990 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PROCEDURE", 9)));
2991 n += 1;
2993 if ((((1 << (mcReserved_pointertok-mcReserved_arraytok)) & (stopset1)) != 0))
2995 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "POINTER", 7)));
2996 n += 1;
2998 if ((((1 << (mcReserved_packedsettok-mcReserved_arraytok)) & (stopset1)) != 0))
3000 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PACKEDSET", 9)));
3001 n += 1;
3003 if ((((1 << (mcReserved_ortok-mcReserved_arraytok)) & (stopset1)) != 0))
3005 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OR", 2)));
3006 n += 1;
3008 if ((((1 << (mcReserved_oftok-mcReserved_arraytok)) & (stopset1)) != 0))
3010 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OF", 2)));
3011 n += 1;
3013 if ((((1 << (mcReserved_nottok-mcReserved_arraytok)) & (stopset1)) != 0))
3015 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "NOT", 3)));
3016 n += 1;
3018 if ((((1 << (mcReserved_moduletok-mcReserved_arraytok)) & (stopset1)) != 0))
3020 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MODULE", 6)));
3021 n += 1;
3023 if ((((1 << (mcReserved_modtok-mcReserved_arraytok)) & (stopset1)) != 0))
3025 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MOD", 3)));
3026 n += 1;
3028 if ((((1 << (mcReserved_looptok-mcReserved_arraytok)) & (stopset1)) != 0))
3030 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "LOOP", 4)));
3031 n += 1;
3033 if ((((1 << (mcReserved_intok-mcReserved_arraytok)) & (stopset1)) != 0))
3035 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IN", 2)));
3036 n += 1;
3038 if ((((1 << (mcReserved_importtok-mcReserved_arraytok)) & (stopset1)) != 0))
3040 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPORT", 6)));
3041 n += 1;
3043 if ((((1 << (mcReserved_implementationtok-mcReserved_arraytok)) & (stopset1)) != 0))
3045 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPLEMENTATION", 14)));
3046 n += 1;
3048 if ((((1 << (mcReserved_iftok-mcReserved_arraytok)) & (stopset1)) != 0))
3050 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IF", 2)));
3051 n += 1;
3053 if ((((1 << (mcReserved_fromtok-mcReserved_arraytok)) & (stopset1)) != 0))
3055 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FROM", 4)));
3056 n += 1;
3058 if ((((1 << (mcReserved_fortok-mcReserved_arraytok)) & (stopset1)) != 0))
3060 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FOR", 3)));
3061 n += 1;
3063 if ((((1 << (mcReserved_finallytok-mcReserved_arraytok)) & (stopset1)) != 0))
3065 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FINALLY", 7)));
3066 n += 1;
3068 if ((((1 << (mcReserved_exporttok-mcReserved_arraytok)) & (stopset1)) != 0))
3070 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXPORT", 6)));
3071 n += 1;
3073 if ((((1 << (mcReserved_exittok-mcReserved_arraytok)) & (stopset1)) != 0))
3075 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXIT", 4)));
3076 n += 1;
3078 if ((((1 << (mcReserved_excepttok-mcReserved_arraytok)) & (stopset1)) != 0))
3080 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXCEPT", 6)));
3081 n += 1;
3083 if ((((1 << (mcReserved_endtok-mcReserved_arraytok)) & (stopset1)) != 0))
3085 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "END", 3)));
3086 n += 1;
3088 if ((((1 << (mcReserved_elsiftok-mcReserved_arraytok)) & (stopset1)) != 0))
3090 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSIF", 5)));
3091 n += 1;
3093 if ((((1 << (mcReserved_elsetok-mcReserved_arraytok)) & (stopset1)) != 0))
3095 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSE", 4)));
3096 n += 1;
3098 if ((((1 << (mcReserved_dotok-mcReserved_arraytok)) & (stopset1)) != 0))
3100 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DO", 2)));
3101 n += 1;
3103 if ((((1 << (mcReserved_divtok-mcReserved_arraytok)) & (stopset1)) != 0))
3105 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DIV", 3)));
3106 n += 1;
3108 if ((((1 << (mcReserved_definitiontok-mcReserved_arraytok)) & (stopset1)) != 0))
3110 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DEFINITION", 10)));
3111 n += 1;
3113 if ((((1 << (mcReserved_consttok-mcReserved_arraytok)) & (stopset1)) != 0))
3115 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CONST", 5)));
3116 n += 1;
3118 if ((((1 << (mcReserved_casetok-mcReserved_arraytok)) & (stopset1)) != 0))
3120 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CASE", 4)));
3121 n += 1;
3123 if ((((1 << (mcReserved_bytok-mcReserved_arraytok)) & (stopset1)) != 0))
3125 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BY", 2)));
3126 n += 1;
3128 if ((((1 << (mcReserved_begintok-mcReserved_arraytok)) & (stopset1)) != 0))
3130 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BEGIN", 5)));
3131 n += 1;
3133 if ((((1 << (mcReserved_arraytok-mcReserved_arraytok)) & (stopset1)) != 0))
3135 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ARRAY", 5)));
3136 n += 1;
3138 if ((((1 << (mcReserved_andtok-mcReserved_eoftok)) & (stopset0)) != 0))
3140 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "AND", 3)));
3141 n += 1;
3143 if ((((1 << (mcReserved_colontok-mcReserved_eoftok)) & (stopset0)) != 0))
3145 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":", 1)));
3146 n += 1;
3148 if ((((1 << (mcReserved_periodperiodtok-mcReserved_eoftok)) & (stopset0)) != 0))
3150 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "..", 2)));
3151 n += 1;
3153 if ((((1 << (mcReserved_rdirectivetok-mcReserved_eoftok)) & (stopset0)) != 0))
3155 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*>", 2)));
3156 n += 1;
3158 if ((((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) & (stopset0)) != 0))
3160 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<*", 2)));
3161 n += 1;
3163 if ((((1 << (mcReserved_greaterequaltok-mcReserved_eoftok)) & (stopset0)) != 0))
3165 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">=", 2)));
3166 n += 1;
3168 if ((((1 << (mcReserved_lessequaltok-mcReserved_eoftok)) & (stopset0)) != 0))
3170 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<=", 2)));
3171 n += 1;
3173 if ((((1 << (mcReserved_lessgreatertok-mcReserved_eoftok)) & (stopset0)) != 0))
3175 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<>", 2)));
3176 n += 1;
3178 if ((((1 << (mcReserved_hashtok-mcReserved_eoftok)) & (stopset0)) != 0))
3180 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "#", 1)));
3181 n += 1;
3183 if ((((1 << (mcReserved_equaltok-mcReserved_eoftok)) & (stopset0)) != 0))
3185 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "=", 1)));
3186 n += 1;
3188 if ((((1 << (mcReserved_uparrowtok-mcReserved_eoftok)) & (stopset0)) != 0))
3190 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "^", 1)));
3191 n += 1;
3193 if ((((1 << (mcReserved_semicolontok-mcReserved_eoftok)) & (stopset0)) != 0))
3195 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ";", 1)));
3196 n += 1;
3198 if ((((1 << (mcReserved_commatok-mcReserved_eoftok)) & (stopset0)) != 0))
3200 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ",", 1)));
3201 n += 1;
3203 if ((((1 << (mcReserved_periodtok-mcReserved_eoftok)) & (stopset0)) != 0))
3205 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1)));
3206 n += 1;
3208 if ((((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) & (stopset0)) != 0))
3210 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "&", 1)));
3211 n += 1;
3213 if ((((1 << (mcReserved_dividetok-mcReserved_eoftok)) & (stopset0)) != 0))
3215 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "/", 1)));
3216 n += 1;
3218 if ((((1 << (mcReserved_timestok-mcReserved_eoftok)) & (stopset0)) != 0))
3220 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*", 1)));
3221 n += 1;
3223 if ((((1 << (mcReserved_minustok-mcReserved_eoftok)) & (stopset0)) != 0))
3225 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-", 1)));
3226 n += 1;
3228 if ((((1 << (mcReserved_plustok-mcReserved_eoftok)) & (stopset0)) != 0))
3230 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "+", 1)));
3231 n += 1;
3233 if ((((1 << (mcReserved_doublequotestok-mcReserved_eoftok)) & (stopset0)) != 0))
3235 message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '`'), '"'), '\''), ',');
3236 n += 1;
3238 if ((((1 << (mcReserved_singlequotetok-mcReserved_eoftok)) & (stopset0)) != 0))
3240 message = DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message, ' '), '"'), '\''), '"'), ',');
3241 n += 1;
3243 if ((((1 << (mcReserved_greatertok-mcReserved_eoftok)) & (stopset0)) != 0))
3245 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">", 1)));
3246 n += 1;
3248 if ((((1 << (mcReserved_lesstok-mcReserved_eoftok)) & (stopset0)) != 0))
3250 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<", 1)));
3251 n += 1;
3253 if ((((1 << (mcReserved_rparatok-mcReserved_eoftok)) & (stopset0)) != 0))
3255 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ")", 1)));
3256 n += 1;
3258 if ((((1 << (mcReserved_lparatok-mcReserved_eoftok)) & (stopset0)) != 0))
3260 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "(", 1)));
3261 n += 1;
3263 if ((((1 << (mcReserved_rcbratok-mcReserved_eoftok)) & (stopset0)) != 0))
3265 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "}", 1)));
3266 n += 1;
3268 if ((((1 << (mcReserved_lcbratok-mcReserved_eoftok)) & (stopset0)) != 0))
3270 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{", 1)));
3271 n += 1;
3273 if ((((1 << (mcReserved_rsbratok-mcReserved_eoftok)) & (stopset0)) != 0))
3275 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "]", 1)));
3276 n += 1;
3278 if ((((1 << (mcReserved_lsbratok-mcReserved_eoftok)) & (stopset0)) != 0))
3280 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "[", 1)));
3281 n += 1;
3283 if ((((1 << (mcReserved_bartok-mcReserved_eoftok)) & (stopset0)) != 0))
3285 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "|", 1)));
3286 n += 1;
3288 if ((((1 << (mcReserved_becomestok-mcReserved_eoftok)) & (stopset0)) != 0))
3290 message = DynamicStrings_ConCat (DynamicStrings_ConCatChar (message, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":=", 2)));
3291 n += 1;
3293 if ((((1 << (mcReserved_eoftok-mcReserved_eoftok)) & (stopset0)) != 0))
3294 {} /* empty. */
3295 /* eoftok has no token name (needed to generate error messages) */
3296 if (n == 0)
3298 str = DynamicStrings_InitString ((const char *) " syntax error", 13);
3299 message = DynamicStrings_KillString (message);
3301 else if (n == 1)
3303 /* avoid dangling else. */
3304 str = DynamicStrings_ConCat (message, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
3306 else
3308 /* avoid dangling else. */
3309 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message);
3310 message = DynamicStrings_KillString (message);
3312 return str;
3313 /* static analysis guarentees a RETURN statement will be used before here. */
3314 __builtin_unreachable ();
3319 DescribeError - issues a message explaining what tokens were expected
3322 static void DescribeError (void)
3324 DynamicStrings_String str;
3326 str = DynamicStrings_InitString ((const char *) "", 0);
3327 switch (mcLexBuf_currenttoken)
3329 case mcReserved_stringtok:
3330 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found string", 26), DynamicStrings_Mark (str));
3331 break;
3333 case mcReserved_realtok:
3334 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found real number", 31), DynamicStrings_Mark (str));
3335 break;
3337 case mcReserved_identtok:
3338 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found identifier", 30), DynamicStrings_Mark (str));
3339 break;
3341 case mcReserved_integertok:
3342 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found integer number", 34), DynamicStrings_Mark (str));
3343 break;
3345 case mcReserved_inlinetok:
3346 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __INLINE__", 30), DynamicStrings_Mark (str));
3347 break;
3349 case mcReserved_builtintok:
3350 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __BUILTIN__", 31), DynamicStrings_Mark (str));
3351 break;
3353 case mcReserved_attributetok:
3354 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __ATTRIBUTE__", 33), DynamicStrings_Mark (str));
3355 break;
3357 case mcReserved_filetok:
3358 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __FILE__", 28), DynamicStrings_Mark (str));
3359 break;
3361 case mcReserved_linetok:
3362 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __LINE__", 28), DynamicStrings_Mark (str));
3363 break;
3365 case mcReserved_datetok:
3366 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __DATE__", 28), DynamicStrings_Mark (str));
3367 break;
3369 case mcReserved_periodperiodperiodtok:
3370 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ...", 23), DynamicStrings_Mark (str));
3371 break;
3373 case mcReserved_volatiletok:
3374 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VOLATILE", 28), DynamicStrings_Mark (str));
3375 break;
3377 case mcReserved_asmtok:
3378 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ASM", 23), DynamicStrings_Mark (str));
3379 break;
3381 case mcReserved_withtok:
3382 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WITH", 24), DynamicStrings_Mark (str));
3383 break;
3385 case mcReserved_whiletok:
3386 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WHILE", 25), DynamicStrings_Mark (str));
3387 break;
3389 case mcReserved_vartok:
3390 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VAR", 23), DynamicStrings_Mark (str));
3391 break;
3393 case mcReserved_untiltok:
3394 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNTIL", 25), DynamicStrings_Mark (str));
3395 break;
3397 case mcReserved_typetok:
3398 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TYPE", 24), DynamicStrings_Mark (str));
3399 break;
3401 case mcReserved_totok:
3402 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TO", 22), DynamicStrings_Mark (str));
3403 break;
3405 case mcReserved_thentok:
3406 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found THEN", 24), DynamicStrings_Mark (str));
3407 break;
3409 case mcReserved_settok:
3410 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found SET", 23), DynamicStrings_Mark (str));
3411 break;
3413 case mcReserved_returntok:
3414 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETURN", 26), DynamicStrings_Mark (str));
3415 break;
3417 case mcReserved_retrytok:
3418 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETRY", 25), DynamicStrings_Mark (str));
3419 break;
3421 case mcReserved_repeattok:
3422 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REPEAT", 26), DynamicStrings_Mark (str));
3423 break;
3425 case mcReserved_remtok:
3426 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REM", 23), DynamicStrings_Mark (str));
3427 break;
3429 case mcReserved_recordtok:
3430 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RECORD", 26), DynamicStrings_Mark (str));
3431 break;
3433 case mcReserved_unqualifiedtok:
3434 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNQUALIFIED", 31), DynamicStrings_Mark (str));
3435 break;
3437 case mcReserved_qualifiedtok:
3438 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found QUALIFIED", 29), DynamicStrings_Mark (str));
3439 break;
3441 case mcReserved_proceduretok:
3442 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PROCEDURE", 29), DynamicStrings_Mark (str));
3443 break;
3445 case mcReserved_pointertok:
3446 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found POINTER", 27), DynamicStrings_Mark (str));
3447 break;
3449 case mcReserved_packedsettok:
3450 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PACKEDSET", 29), DynamicStrings_Mark (str));
3451 break;
3453 case mcReserved_ortok:
3454 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OR", 22), DynamicStrings_Mark (str));
3455 break;
3457 case mcReserved_oftok:
3458 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OF", 22), DynamicStrings_Mark (str));
3459 break;
3461 case mcReserved_nottok:
3462 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found NOT", 23), DynamicStrings_Mark (str));
3463 break;
3465 case mcReserved_moduletok:
3466 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MODULE", 26), DynamicStrings_Mark (str));
3467 break;
3469 case mcReserved_modtok:
3470 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MOD", 23), DynamicStrings_Mark (str));
3471 break;
3473 case mcReserved_looptok:
3474 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found LOOP", 24), DynamicStrings_Mark (str));
3475 break;
3477 case mcReserved_intok:
3478 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IN", 22), DynamicStrings_Mark (str));
3479 break;
3481 case mcReserved_importtok:
3482 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPORT", 26), DynamicStrings_Mark (str));
3483 break;
3485 case mcReserved_implementationtok:
3486 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPLEMENTATION", 34), DynamicStrings_Mark (str));
3487 break;
3489 case mcReserved_iftok:
3490 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IF", 22), DynamicStrings_Mark (str));
3491 break;
3493 case mcReserved_fromtok:
3494 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FROM", 24), DynamicStrings_Mark (str));
3495 break;
3497 case mcReserved_fortok:
3498 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FOR", 23), DynamicStrings_Mark (str));
3499 break;
3501 case mcReserved_finallytok:
3502 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FINALLY", 27), DynamicStrings_Mark (str));
3503 break;
3505 case mcReserved_exporttok:
3506 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXPORT", 26), DynamicStrings_Mark (str));
3507 break;
3509 case mcReserved_exittok:
3510 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXIT", 24), DynamicStrings_Mark (str));
3511 break;
3513 case mcReserved_excepttok:
3514 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXCEPT", 26), DynamicStrings_Mark (str));
3515 break;
3517 case mcReserved_endtok:
3518 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found END", 23), DynamicStrings_Mark (str));
3519 break;
3521 case mcReserved_elsiftok:
3522 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSIF", 25), DynamicStrings_Mark (str));
3523 break;
3525 case mcReserved_elsetok:
3526 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSE", 24), DynamicStrings_Mark (str));
3527 break;
3529 case mcReserved_dotok:
3530 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DO", 22), DynamicStrings_Mark (str));
3531 break;
3533 case mcReserved_divtok:
3534 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DIV", 23), DynamicStrings_Mark (str));
3535 break;
3537 case mcReserved_definitiontok:
3538 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DEFINITION", 30), DynamicStrings_Mark (str));
3539 break;
3541 case mcReserved_consttok:
3542 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CONST", 25), DynamicStrings_Mark (str));
3543 break;
3545 case mcReserved_casetok:
3546 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CASE", 24), DynamicStrings_Mark (str));
3547 break;
3549 case mcReserved_bytok:
3550 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BY", 22), DynamicStrings_Mark (str));
3551 break;
3553 case mcReserved_begintok:
3554 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BEGIN", 25), DynamicStrings_Mark (str));
3555 break;
3557 case mcReserved_arraytok:
3558 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ARRAY", 25), DynamicStrings_Mark (str));
3559 break;
3561 case mcReserved_andtok:
3562 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found AND", 23), DynamicStrings_Mark (str));
3563 break;
3565 case mcReserved_colontok:
3566 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :", 21), DynamicStrings_Mark (str));
3567 break;
3569 case mcReserved_periodperiodtok:
3570 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ..", 22), DynamicStrings_Mark (str));
3571 break;
3573 case mcReserved_rdirectivetok:
3574 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *>", 22), DynamicStrings_Mark (str));
3575 break;
3577 case mcReserved_ldirectivetok:
3578 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <*", 22), DynamicStrings_Mark (str));
3579 break;
3581 case mcReserved_greaterequaltok:
3582 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >=", 22), DynamicStrings_Mark (str));
3583 break;
3585 case mcReserved_lessequaltok:
3586 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <=", 22), DynamicStrings_Mark (str));
3587 break;
3589 case mcReserved_lessgreatertok:
3590 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <>", 22), DynamicStrings_Mark (str));
3591 break;
3593 case mcReserved_hashtok:
3594 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found #", 21), DynamicStrings_Mark (str));
3595 break;
3597 case mcReserved_equaltok:
3598 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found =", 21), DynamicStrings_Mark (str));
3599 break;
3601 case mcReserved_uparrowtok:
3602 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ^", 21), DynamicStrings_Mark (str));
3603 break;
3605 case mcReserved_semicolontok:
3606 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ;", 21), DynamicStrings_Mark (str));
3607 break;
3609 case mcReserved_commatok:
3610 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ,", 21), DynamicStrings_Mark (str));
3611 break;
3613 case mcReserved_periodtok:
3614 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found .", 21), DynamicStrings_Mark (str));
3615 break;
3617 case mcReserved_ambersandtok:
3618 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found &", 21), DynamicStrings_Mark (str));
3619 break;
3621 case mcReserved_dividetok:
3622 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found /", 21), DynamicStrings_Mark (str));
3623 break;
3625 case mcReserved_timestok:
3626 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *", 21), DynamicStrings_Mark (str));
3627 break;
3629 case mcReserved_minustok:
3630 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found -", 21), DynamicStrings_Mark (str));
3631 break;
3633 case mcReserved_plustok:
3634 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found +", 21), DynamicStrings_Mark (str));
3635 break;
3637 case mcReserved_doublequotestok:
3638 str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str));
3639 break;
3641 case mcReserved_singlequotetok:
3642 str = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str));
3643 break;
3645 case mcReserved_greatertok:
3646 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >", 21), DynamicStrings_Mark (str));
3647 break;
3649 case mcReserved_lesstok:
3650 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <", 21), DynamicStrings_Mark (str));
3651 break;
3653 case mcReserved_rparatok:
3654 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found )", 21), DynamicStrings_Mark (str));
3655 break;
3657 case mcReserved_lparatok:
3658 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found (", 21), DynamicStrings_Mark (str));
3659 break;
3661 case mcReserved_rcbratok:
3662 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found }", 21), DynamicStrings_Mark (str));
3663 break;
3665 case mcReserved_lcbratok:
3666 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {", 21), DynamicStrings_Mark (str));
3667 break;
3669 case mcReserved_rsbratok:
3670 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ]", 21), DynamicStrings_Mark (str));
3671 break;
3673 case mcReserved_lsbratok:
3674 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found [", 21), DynamicStrings_Mark (str));
3675 break;
3677 case mcReserved_bartok:
3678 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found |", 21), DynamicStrings_Mark (str));
3679 break;
3681 case mcReserved_becomestok:
3682 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :=", 22), DynamicStrings_Mark (str));
3683 break;
3685 case mcReserved_eoftok:
3686 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ", 20), DynamicStrings_Mark (str));
3687 break;
3690 default:
3691 break;
3693 ErrorString (str);
3698 SyntaxError - after a syntax error we skip all tokens up until we reach
3699 a stop symbol.
3702 static void SyntaxError (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3704 DescribeError ();
3705 if (Debugging)
3707 mcPrintf_printf0 ((const char *) "\\nskipping token *** ", 21);
3710 yes the ORD(currenttoken) looks ugly, but it is *much* safer than
3711 using currenttoken<sometok as a change to the ordering of the
3712 token declarations below would cause this to break. Using ORD() we are
3713 immune from such changes
3715 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)))))
3717 mcLexBuf_getToken ();
3719 if (Debugging)
3721 mcPrintf_printf0 ((const char *) " ***\\n", 6);
3727 SyntaxCheck -
3730 static void SyntaxCheck (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3732 /* and again (see above re: ORD)
3734 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)))))
3736 SyntaxError (stopset0, stopset1, stopset2);
3742 WarnMissingToken - generates a warning message about a missing token, t.
3745 static void WarnMissingToken (mcReserved_toktype t)
3747 mcp5_SetOfStop0 s0;
3748 mcp5_SetOfStop1 s1;
3749 mcp5_SetOfStop2 s2;
3750 DynamicStrings_String str;
3752 s0 = (mcp5_SetOfStop0) 0;
3753 s1 = (mcp5_SetOfStop1) 0;
3754 s2 = (mcp5_SetOfStop2) 0;
3755 if ( ((unsigned int) (t)) < 32)
3757 s0 = (mcp5_SetOfStop0) ((1 << (t-mcReserved_eoftok)));
3759 else if ( ((unsigned int) (t)) < 64)
3761 /* avoid dangling else. */
3762 s1 = (mcp5_SetOfStop1) ((1 << (t-mcReserved_arraytok)));
3764 else
3766 /* avoid dangling else. */
3767 s2 = (mcp5_SetOfStop2) ((1 << (t-mcReserved_recordtok)));
3769 str = DescribeStop (s0, s1, s2);
3770 str = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error,", 13), DynamicStrings_Mark (str));
3771 mcError_errorStringAt (str, mcLexBuf_getTokenNo ());
3776 MissingToken - generates a warning message about a missing token, t.
3779 static void MissingToken (mcReserved_toktype t)
3781 WarnMissingToken (t);
3782 if ((((t != mcReserved_identtok) && (t != mcReserved_integertok)) && (t != mcReserved_realtok)) && (t != mcReserved_stringtok))
3784 if (Debugging)
3786 mcPrintf_printf0 ((const char *) "inserting token\\n", 17);
3788 mcLexBuf_insertToken (t);
3794 CheckAndInsert -
3797 static bool CheckAndInsert (mcReserved_toktype t, mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3799 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))))
3801 WarnMissingToken (t);
3802 mcLexBuf_insertTokenAndRewind (t);
3803 return true;
3805 else
3807 return false;
3809 /* static analysis guarentees a RETURN statement will be used before here. */
3810 __builtin_unreachable ();
3815 InStopSet
3818 static bool InStopSet (mcReserved_toktype t, mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3820 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))))
3822 return true;
3824 else
3826 return false;
3828 /* static analysis guarentees a RETURN statement will be used before here. */
3829 __builtin_unreachable ();
3834 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
3835 If it is not then it will insert a token providing the token
3836 is one of ; ] ) } . OF END ,
3838 if the stopset contains <identtok> then we do not insert a token
3841 static void PeepToken (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3843 /* and again (see above re: ORD)
3845 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))))
3847 /* SyntaxCheck would fail since currentoken is not part of the stopset
3848 we check to see whether any of currenttoken might be a commonly omitted token */
3849 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)))
3850 {} /* empty. */
3856 Expect -
3859 static void Expect (mcReserved_toktype t, mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3861 if (mcLexBuf_currenttoken == t)
3863 /* avoid dangling else. */
3864 mcLexBuf_getToken ();
3865 if (Pass1)
3867 PeepToken (stopset0, stopset1, stopset2);
3870 else
3872 MissingToken (t);
3874 SyntaxCheck (stopset0, stopset1, stopset2);
3879 Ident - error checking varient of Ident
3882 static void Ident (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3884 curident = nameKey_makekey (mcLexBuf_currentstring);
3885 Expect (mcReserved_identtok, stopset0, stopset1, stopset2);
3890 string -
3893 static void string (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3895 curstring = nameKey_makekey (mcLexBuf_currentstring);
3896 Expect (mcReserved_stringtok, stopset0, stopset1, stopset2);
3901 Integer -
3904 static void Integer (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3906 decl_node n;
3908 n = push (decl_makeLiteralInt (nameKey_makekey (mcLexBuf_currentstring)));
3909 Expect (mcReserved_integertok, stopset0, stopset1, stopset2);
3914 Real -
3917 static void Real (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3919 decl_node n;
3921 n = push (decl_makeLiteralReal (nameKey_makekey (mcLexBuf_currentstring)));
3922 Expect (mcReserved_realtok, stopset0, stopset1, stopset2);
3927 FileUnit := DefinitionModule |
3928 ImplementationOrProgramModule
3930 first symbols:implementationtok, moduletok, definitiontok
3932 cannot reachend
3935 static void FileUnit (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3937 if (mcLexBuf_currenttoken == mcReserved_definitiontok)
3939 DefinitionModule (stopset0, stopset1, stopset2);
3941 else if (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_implementationtok-mcReserved_arraytok)) | (1 << (mcReserved_moduletok-mcReserved_arraytok))))) != 0)))
3943 /* avoid dangling else. */
3944 ImplementationOrProgramModule (stopset0, stopset1, stopset2);
3946 else
3948 /* avoid dangling else. */
3949 ErrorArray ((const char *) "expecting one of: IMPLEMENTATION MODULE DEFINITION", 50);
3955 ProgramModule := 'MODULE' Ident
3956 % curmodule := lookupModule (curident) %
3958 % addCommentBody (curmodule) %
3960 % enterScope (curmodule) %
3962 % resetConstExpPos (curmodule) %
3963 [ Priority ] ';' { Import } Block
3964 Ident
3965 % checkEndName (curmodule, curident, 'program module') %
3967 % leaveScope %
3970 first symbols:moduletok
3972 cannot reachend
3975 static void ProgramModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
3977 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3978 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
3979 curmodule = decl_lookupModule (curident);
3980 decl_addCommentBody (curmodule);
3981 decl_enterScope (curmodule);
3982 decl_resetConstExpPos (curmodule);
3983 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
3985 Priority (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
3987 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
3988 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
3990 Import (stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
3992 /* while */
3993 Block (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
3994 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
3995 checkEndName (curmodule, curident, (const char *) "program module", 14);
3996 decl_leaveScope ();
3997 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
4002 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
4003 Ident
4004 % curmodule := lookupImp (curident) %
4006 % addCommentBody (curmodule) %
4008 % enterScope (lookupDef (curident)) %
4010 % enterScope (curmodule) %
4012 % resetConstExpPos (curmodule) %
4013 [ Priority ] ';' { Import }
4014 Block Ident
4015 % checkEndName (curmodule, curident, 'implementation module') %
4017 % leaveScope ; leaveScope %
4020 first symbols:implementationtok
4022 cannot reachend
4025 static void ImplementationModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4027 Expect (mcReserved_implementationtok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2);
4028 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4029 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
4030 curmodule = decl_lookupImp (curident);
4031 decl_addCommentBody (curmodule);
4032 decl_enterScope (decl_lookupDef (curident));
4033 decl_enterScope (curmodule);
4034 decl_resetConstExpPos (curmodule);
4035 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
4037 Priority (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
4039 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
4040 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
4042 Import (stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
4044 /* while */
4045 Block (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4046 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
4047 checkEndName (curmodule, curident, (const char *) "implementation module", 21);
4048 decl_leaveScope ();
4049 decl_leaveScope ();
4050 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
4055 ImplementationOrProgramModule := ImplementationModule |
4056 ProgramModule
4058 first symbols:moduletok, implementationtok
4060 cannot reachend
4063 static void ImplementationOrProgramModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4065 if (mcLexBuf_currenttoken == mcReserved_implementationtok)
4067 ImplementationModule (stopset0, stopset1, stopset2);
4069 else if (mcLexBuf_currenttoken == mcReserved_moduletok)
4071 /* avoid dangling else. */
4072 ProgramModule (stopset0, stopset1, stopset2);
4074 else
4076 /* avoid dangling else. */
4077 ErrorArray ((const char *) "expecting one of: MODULE IMPLEMENTATION", 39);
4083 ConstInteger := Integer
4084 % VAR i: node ; %
4086 % i := pop () %
4089 first symbols:integertok
4091 cannot reachend
4094 static void ConstInteger (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4096 decl_node i;
4098 Integer (stopset0, stopset1, stopset2);
4099 i = pop ();
4104 ConstReal := Real
4105 % VAR r: node ; %
4107 % r := pop () %
4110 first symbols:realtok
4112 cannot reachend
4115 static void ConstReal (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4117 decl_node r;
4119 Real (stopset0, stopset1, stopset2);
4120 r = pop ();
4125 ConstNumber := ConstInteger | ConstReal
4127 first symbols:realtok, integertok
4129 cannot reachend
4132 static void ConstNumber (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4134 if (mcLexBuf_currenttoken == mcReserved_integertok)
4136 ConstInteger (stopset0, stopset1, stopset2);
4138 else if (mcLexBuf_currenttoken == mcReserved_realtok)
4140 /* avoid dangling else. */
4141 ConstReal (stopset0, stopset1, stopset2);
4143 else
4145 /* avoid dangling else. */
4146 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
4152 Number := Integer | Real
4154 first symbols:realtok, integertok
4156 cannot reachend
4159 static void Number (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4161 if (mcLexBuf_currenttoken == mcReserved_integertok)
4163 Integer (stopset0, stopset1, stopset2);
4165 else if (mcLexBuf_currenttoken == mcReserved_realtok)
4167 /* avoid dangling else. */
4168 Real (stopset0, stopset1, stopset2);
4170 else
4172 /* avoid dangling else. */
4173 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
4179 Qualident := Ident { '.' Ident }
4181 first symbols:identtok
4183 cannot reachend
4186 static void Qualident (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4188 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
4189 while (mcLexBuf_currenttoken == mcReserved_periodtok)
4191 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4192 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
4194 /* while */
4199 ConstantDeclaration := Ident '=' ConstExpressionNop
4201 first symbols:identtok
4203 cannot reachend
4206 static void ConstantDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4208 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
4209 Expect (mcReserved_equaltok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4210 ConstExpressionNop (stopset0, stopset1, stopset2);
4215 ConstExpressionNop :=
4216 % VAR c: node ; %
4218 % c := getNextConstExp () %
4219 SimpleConstExpr [ Relation
4220 SimpleConstExpr ]
4222 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4224 cannot reachend
4227 static void ConstExpressionNop (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4229 decl_node c;
4231 c = decl_getNextConstExp ();
4232 SimpleConstExpr (stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
4233 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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))
4235 Relation (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4236 SimpleConstExpr (stopset0, stopset1, stopset2);
4242 ConstExpression :=
4243 % VAR c: node ; %
4245 % c := push (getNextConstExp ()) %
4246 SimpleConstExpr [ Relation SimpleConstExpr ]
4248 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4250 cannot reachend
4253 static void ConstExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4255 decl_node c;
4257 c = push (decl_getNextConstExp ());
4258 SimpleConstExpr (stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
4259 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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))
4261 Relation (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4262 SimpleConstExpr (stopset0, stopset1, stopset2);
4268 Relation := '=' | '#' | '<>' | '<' | '<=' |
4269 '>' | '>=' | 'IN'
4271 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
4273 cannot reachend
4276 static void Relation (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4278 if (mcLexBuf_currenttoken == mcReserved_equaltok)
4280 Expect (mcReserved_equaltok, stopset0, stopset1, stopset2);
4282 else if (mcLexBuf_currenttoken == mcReserved_hashtok)
4284 /* avoid dangling else. */
4285 Expect (mcReserved_hashtok, stopset0, stopset1, stopset2);
4287 else if (mcLexBuf_currenttoken == mcReserved_lessgreatertok)
4289 /* avoid dangling else. */
4290 Expect (mcReserved_lessgreatertok, stopset0, stopset1, stopset2);
4292 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
4294 /* avoid dangling else. */
4295 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2);
4297 else if (mcLexBuf_currenttoken == mcReserved_lessequaltok)
4299 /* avoid dangling else. */
4300 Expect (mcReserved_lessequaltok, stopset0, stopset1, stopset2);
4302 else if (mcLexBuf_currenttoken == mcReserved_greatertok)
4304 /* avoid dangling else. */
4305 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
4307 else if (mcLexBuf_currenttoken == mcReserved_greaterequaltok)
4309 /* avoid dangling else. */
4310 Expect (mcReserved_greaterequaltok, stopset0, stopset1, stopset2);
4312 else if (mcLexBuf_currenttoken == mcReserved_intok)
4314 /* avoid dangling else. */
4315 Expect (mcReserved_intok, stopset0, stopset1, stopset2);
4317 else
4319 /* avoid dangling else. */
4320 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
4326 SimpleConstExpr := UnaryOrConstTerm { AddOperator
4327 ConstTerm }
4329 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4331 cannot reachend
4334 static void SimpleConstExpr (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4336 UnaryOrConstTerm (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
4337 while (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_ortok))
4339 AddOperator (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4340 ConstTerm (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
4342 /* while */
4347 UnaryOrConstTerm := '+' ConstTerm |
4348 '-' ConstTerm |
4349 ConstTerm
4351 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4353 cannot reachend
4356 static void UnaryOrConstTerm (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4358 if (mcLexBuf_currenttoken == mcReserved_plustok)
4360 Expect (mcReserved_plustok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4361 ConstTerm (stopset0, stopset1, stopset2);
4363 else if (mcLexBuf_currenttoken == mcReserved_minustok)
4365 /* avoid dangling else. */
4366 Expect (mcReserved_minustok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4367 ConstTerm (stopset0, stopset1, stopset2);
4369 else if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_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))))
4371 /* avoid dangling else. */
4372 ConstTerm (stopset0, stopset1, stopset2);
4374 else
4376 /* avoid dangling else. */
4377 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ identifier { string - +", 88);
4383 AddOperator := '+' | '-' | 'OR'
4385 first symbols:ortok, minustok, plustok
4387 cannot reachend
4390 static void AddOperator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4392 if (mcLexBuf_currenttoken == mcReserved_plustok)
4394 Expect (mcReserved_plustok, stopset0, stopset1, stopset2);
4396 else if (mcLexBuf_currenttoken == mcReserved_minustok)
4398 /* avoid dangling else. */
4399 Expect (mcReserved_minustok, stopset0, stopset1, stopset2);
4401 else if (mcLexBuf_currenttoken == mcReserved_ortok)
4403 /* avoid dangling else. */
4404 Expect (mcReserved_ortok, stopset0, stopset1, stopset2);
4406 else
4408 /* avoid dangling else. */
4409 ErrorArray ((const char *) "expecting one of: OR - +", 24);
4415 ConstTerm := ConstFactor { MulOperator ConstFactor }
4417 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
4419 cannot reachend
4422 static void ConstTerm (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4424 ConstFactor (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_timestok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_modtok-mcReserved_arraytok)) | (1 << (mcReserved_divtok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
4425 while ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))))) != 0)))) || (mcLexBuf_currenttoken == mcReserved_remtok))
4427 MulOperator (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4428 ConstFactor (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
4430 /* while */
4435 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
4436 'REM' | 'AND' | '&'
4438 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
4440 cannot reachend
4443 static void MulOperator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4445 if (mcLexBuf_currenttoken == mcReserved_timestok)
4447 Expect (mcReserved_timestok, stopset0, stopset1, stopset2);
4449 else if (mcLexBuf_currenttoken == mcReserved_dividetok)
4451 /* avoid dangling else. */
4452 Expect (mcReserved_dividetok, stopset0, stopset1, stopset2);
4454 else if (mcLexBuf_currenttoken == mcReserved_divtok)
4456 /* avoid dangling else. */
4457 Expect (mcReserved_divtok, stopset0, stopset1, stopset2);
4459 else if (mcLexBuf_currenttoken == mcReserved_modtok)
4461 /* avoid dangling else. */
4462 Expect (mcReserved_modtok, stopset0, stopset1, stopset2);
4464 else if (mcLexBuf_currenttoken == mcReserved_remtok)
4466 /* avoid dangling else. */
4467 Expect (mcReserved_remtok, stopset0, stopset1, stopset2);
4469 else if (mcLexBuf_currenttoken == mcReserved_andtok)
4471 /* avoid dangling else. */
4472 Expect (mcReserved_andtok, stopset0, stopset1, stopset2);
4474 else if (mcLexBuf_currenttoken == mcReserved_ambersandtok)
4476 /* avoid dangling else. */
4477 Expect (mcReserved_ambersandtok, stopset0, stopset1, stopset2);
4479 else
4481 /* avoid dangling else. */
4482 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
4488 NotConstFactor := 'NOT' ConstFactor
4489 % VAR n: node ; %
4491 % n := push (makeUnaryTok (nottok, pop ())) %
4494 first symbols:nottok
4496 cannot reachend
4499 static void NotConstFactor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4501 decl_node n;
4503 Expect (mcReserved_nottok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4504 ConstFactor (stopset0, stopset1, stopset2);
4505 n = push (decl_makeUnaryTok (mcReserved_nottok, pop ()));
4510 ConstFactor := ConstNumber | ConstString |
4511 ConstSetOrQualidentOrFunction |
4512 '(' ConstExpressionNop ')' |
4513 NotConstFactor |
4514 ConstAttribute
4516 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
4518 cannot reachend
4521 static void ConstFactor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4523 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok))))) != 0)))
4525 ConstNumber (stopset0, stopset1, stopset2);
4527 else if (mcLexBuf_currenttoken == mcReserved_stringtok)
4529 /* avoid dangling else. */
4530 ConstString (stopset0, stopset1, stopset2);
4532 else if ((mcLexBuf_currenttoken == mcReserved_lcbratok) || (mcLexBuf_currenttoken == mcReserved_identtok))
4534 /* avoid dangling else. */
4535 ConstSetOrQualidentOrFunction (stopset0, stopset1, stopset2);
4537 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
4539 /* avoid dangling else. */
4540 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4541 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4542 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4544 else if (mcLexBuf_currenttoken == mcReserved_nottok)
4546 /* avoid dangling else. */
4547 NotConstFactor (stopset0, stopset1, stopset2);
4549 else if (mcLexBuf_currenttoken == mcReserved_attributetok)
4551 /* avoid dangling else. */
4552 ConstAttribute (stopset0, stopset1, stopset2);
4554 else
4556 /* avoid dangling else. */
4557 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( identifier { string integer number real number", 84);
4563 ConstString := string
4565 first symbols:stringtok
4567 cannot reachend
4570 static void ConstString (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4572 string (stopset0, stopset1, stopset2);
4577 ConstComponentElement := ConstExpressionNop [ '..'
4578 ConstExpressionNop ]
4580 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4582 cannot reachend
4585 static void ConstComponentElement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4587 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
4588 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
4590 Expect (mcReserved_periodperiodtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4591 ConstExpressionNop (stopset0, stopset1, stopset2);
4597 ConstComponentValue := ConstComponentElement [ 'BY'
4598 ConstExpressionNop ]
4600 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4602 cannot reachend
4605 static void ConstComponentValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4607 ConstComponentElement (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok))), stopset2);
4608 if (mcLexBuf_currenttoken == mcReserved_bytok)
4610 Expect (mcReserved_bytok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4611 ConstExpressionNop (stopset0, stopset1, stopset2);
4617 ConstArraySetRecordValue := ConstComponentValue
4618 { ',' ConstComponentValue }
4620 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4622 cannot reachend
4625 static void ConstArraySetRecordValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4627 ConstComponentValue (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4628 while (mcLexBuf_currenttoken == mcReserved_commatok)
4630 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4631 ConstComponentValue (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4633 /* while */
4638 ConstConstructor := '{' [ ConstArraySetRecordValue ]
4641 first symbols:lcbratok
4643 cannot reachend
4646 static void ConstConstructor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4648 Expect (mcReserved_lcbratok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4649 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_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))))
4651 ConstArraySetRecordValue (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok))), stopset1, stopset2);
4653 Expect (mcReserved_rcbratok, stopset0, stopset1, stopset2);
4658 ConstSetOrQualidentOrFunction := Qualident [ ConstConstructor |
4659 ConstActualParameters ] |
4660 ConstConstructor
4662 first symbols:lcbratok, identtok
4664 cannot reachend
4667 static void ConstSetOrQualidentOrFunction (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4669 if (mcLexBuf_currenttoken == mcReserved_identtok)
4671 /* avoid dangling else. */
4672 Qualident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lcbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4673 if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0)))
4675 /* avoid gcc warning by using compound statement even if not strictly necessary. */
4676 /* seen optional [ | ] expression */
4677 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
4679 ConstConstructor (stopset0, stopset1, stopset2);
4681 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
4683 /* avoid dangling else. */
4684 ConstActualParameters (stopset0, stopset1, stopset2);
4686 else
4688 /* avoid dangling else. */
4689 ErrorArray ((const char *) "expecting one of: ( {", 21);
4692 /* end of optional [ | ] expression */
4694 else if (mcLexBuf_currenttoken == mcReserved_lcbratok)
4696 /* avoid dangling else. */
4697 ConstConstructor (stopset0, stopset1, stopset2);
4699 else
4701 /* avoid dangling else. */
4702 ErrorArray ((const char *) "expecting one of: { identifier", 30);
4708 ConstActualParameters := '(' [ ConstExpList ] ')'
4710 first symbols:lparatok
4712 cannot reachend
4715 static void ConstActualParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4717 Expect (mcReserved_lparatok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4718 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_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))))
4720 ConstExpList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4722 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4727 ConstExpList := ConstExpressionNop { ',' ConstExpressionNop }
4729 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4731 cannot reachend
4734 static void ConstExpList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4736 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4737 while (mcLexBuf_currenttoken == mcReserved_commatok)
4739 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4740 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4742 /* while */
4747 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4748 '(' '(' ConstAttributeExpression
4749 ')' ')'
4751 first symbols:attributetok
4753 cannot reachend
4756 static void ConstAttribute (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4758 Expect (mcReserved_attributetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_builtintok-mcReserved_recordtok))));
4759 Expect (mcReserved_builtintok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4760 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
4761 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lesstok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4762 ConstAttributeExpression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4763 Expect (mcReserved_rparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4764 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4769 ConstAttributeExpression := Ident | '<' Qualident
4770 ',' Ident '>'
4772 first symbols:lesstok, identtok
4774 cannot reachend
4777 static void ConstAttributeExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4779 if (mcLexBuf_currenttoken == mcReserved_identtok)
4781 Ident (stopset0, stopset1, stopset2);
4783 else if (mcLexBuf_currenttoken == mcReserved_lesstok)
4785 /* avoid dangling else. */
4786 Expect (mcReserved_lesstok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4787 Qualident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4788 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4789 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_greatertok-mcReserved_eoftok))), stopset1, stopset2);
4790 Expect (mcReserved_greatertok, stopset0, stopset1, stopset2);
4792 else
4794 /* avoid dangling else. */
4795 ErrorArray ((const char *) "expecting one of: < identifier", 30);
4801 ByteAlignment := ''
4803 first symbols:ldirectivetok
4805 cannot reachend
4808 static void ByteAlignment (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4810 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4811 AttributeExpression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4812 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4817 OptAlignmentExpression := [ AlignmentExpression ]
4819 first symbols:lparatok
4821 reachend
4824 static void OptAlignmentExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4826 if (mcLexBuf_currenttoken == mcReserved_lparatok)
4828 AlignmentExpression (stopset0, stopset1, stopset2);
4834 AlignmentExpression := '(' ConstExpressionNop ')'
4836 first symbols:lparatok
4838 cannot reachend
4841 static void AlignmentExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4843 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4844 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
4845 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
4850 Alignment := [ ByteAlignment ]
4852 first symbols:ldirectivetok
4854 reachend
4857 static void Alignment (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4859 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4861 ByteAlignment (stopset0, stopset1, stopset2);
4867 IdentList := Ident { ',' Ident }
4869 first symbols:identtok
4871 cannot reachend
4874 static void IdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4876 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4877 while (mcLexBuf_currenttoken == mcReserved_commatok)
4879 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4880 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4882 /* while */
4887 SubrangeType := '[' ConstExpressionNop '..' ConstExpressionNop
4890 first symbols:lsbratok
4892 cannot reachend
4895 static void SubrangeType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4897 Expect (mcReserved_lsbratok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4898 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
4899 Expect (mcReserved_periodperiodtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
4900 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
4901 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
4906 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
4907 'OF' Type
4909 first symbols:arraytok
4911 cannot reachend
4914 static void ArrayType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4916 Expect (mcReserved_arraytok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4917 SimpleType (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4918 while (mcLexBuf_currenttoken == mcReserved_commatok)
4920 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4921 SimpleType (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
4923 /* while */
4924 Expect (mcReserved_oftok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
4925 Type (stopset0, stopset1, stopset2);
4930 RecordType := 'RECORD' [ DefaultRecordAttributes ]
4931 FieldListSequence 'END'
4933 first symbols:recordtok
4935 cannot reachend
4938 static void RecordType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4940 Expect (mcReserved_recordtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4941 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4943 DefaultRecordAttributes (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4945 FieldListSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
4946 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
4951 DefaultRecordAttributes := ''
4953 first symbols:ldirectivetok
4955 cannot reachend
4958 static void DefaultRecordAttributes (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4960 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4961 AttributeExpression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4962 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4967 RecordFieldPragma := [ '' ]
4969 first symbols:ldirectivetok
4971 reachend
4974 static void RecordFieldPragma (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
4976 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
4978 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4979 FieldPragmaExpression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
4980 while (mcLexBuf_currenttoken == mcReserved_commatok)
4982 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
4983 FieldPragmaExpression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
4985 /* while */
4986 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
4992 FieldPragmaExpression := Ident PragmaConstExpression
4994 first symbols:identtok
4996 cannot reachend
4999 static void FieldPragmaExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5001 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5002 PragmaConstExpression (stopset0, stopset1, stopset2);
5007 PragmaConstExpression := [ '(' ConstExpressionNop
5008 ')' ]
5010 first symbols:lparatok
5012 reachend
5015 static void PragmaConstExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5017 if (mcLexBuf_currenttoken == mcReserved_lparatok)
5019 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5020 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5021 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5027 AttributeExpression := Ident '(' ConstExpressionNop
5030 first symbols:identtok
5032 cannot reachend
5035 static void AttributeExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5037 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5038 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5039 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5040 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5045 FieldListSequence := FieldListStatement { ';' FieldListStatement }
5047 first symbols:casetok, identtok, semicolontok
5049 reachend
5052 static void FieldListSequence (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5054 FieldListStatement (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
5055 while (mcLexBuf_currenttoken == mcReserved_semicolontok)
5057 Expect (mcReserved_semicolontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5058 FieldListStatement (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
5060 /* while */
5065 FieldListStatement := [ FieldList ]
5067 first symbols:identtok, casetok
5069 reachend
5072 static void FieldListStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5074 if ((mcLexBuf_currenttoken == mcReserved_casetok) || (mcLexBuf_currenttoken == mcReserved_identtok))
5076 FieldList (stopset0, stopset1, stopset2);
5082 FieldList := IdentList ':' Type RecordFieldPragma |
5083 'CASE' CaseTag 'OF' Varient { '|' Varient }
5084 [ 'ELSE' FieldListSequence ] 'END'
5086 first symbols:casetok, identtok
5088 cannot reachend
5091 static void FieldList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5093 if (mcLexBuf_currenttoken == mcReserved_identtok)
5095 IdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5096 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5097 Type (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
5098 RecordFieldPragma (stopset0, stopset1, stopset2);
5100 else if (mcLexBuf_currenttoken == mcReserved_casetok)
5102 /* avoid dangling else. */
5103 Expect (mcReserved_casetok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5104 CaseTag (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5105 Expect (mcReserved_oftok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5106 Varient (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5107 while (mcLexBuf_currenttoken == mcReserved_bartok)
5109 Expect (mcReserved_bartok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5110 Varient (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok))), stopset2);
5112 /* while */
5113 if (mcLexBuf_currenttoken == mcReserved_elsetok)
5115 Expect (mcReserved_elsetok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5116 FieldListSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
5118 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
5120 else
5122 /* avoid dangling else. */
5123 ErrorArray ((const char *) "expecting one of: CASE identifier", 33);
5129 TagIdent := Ident |
5130 % curident := NulName %
5133 first symbols:identtok
5135 reachend
5138 static void TagIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5140 if (mcLexBuf_currenttoken == mcReserved_identtok)
5142 Ident (stopset0, stopset1, stopset2);
5144 else
5146 curident = nameKey_NulName;
5152 CaseTag := TagIdent [ ':' Qualident ]
5154 first symbols:colontok, identtok
5156 reachend
5159 static void CaseTag (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5161 TagIdent (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5162 if (mcLexBuf_currenttoken == mcReserved_colontok)
5164 Expect (mcReserved_colontok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5165 Qualident (stopset0, stopset1, stopset2);
5171 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
5173 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5175 reachend
5178 static void Varient (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5180 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_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))))
5182 VarientCaseLabelList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5183 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_casetok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5184 FieldListSequence (stopset0, stopset1, stopset2);
5190 VarientCaseLabelList := VarientCaseLabels { ','
5191 VarientCaseLabels }
5193 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
5195 cannot reachend
5198 static void VarientCaseLabelList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5200 VarientCaseLabels (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5201 while (mcLexBuf_currenttoken == mcReserved_commatok)
5203 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5204 VarientCaseLabels (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5206 /* while */
5211 VarientCaseLabels := ConstExpressionNop [ '..' ConstExpressionNop ]
5213 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5215 cannot reachend
5218 static void VarientCaseLabels (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5220 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
5221 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
5223 Expect (mcReserved_periodperiodtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5224 ConstExpressionNop (stopset0, stopset1, stopset2);
5230 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
5232 first symbols:oftok, packedsettok, settok
5234 cannot reachend
5237 static void SetType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5239 if (mcLexBuf_currenttoken == mcReserved_settok)
5241 Expect (mcReserved_settok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5243 else if (mcLexBuf_currenttoken == mcReserved_packedsettok)
5245 /* avoid dangling else. */
5246 Expect (mcReserved_packedsettok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
5248 else
5250 /* avoid dangling else. */
5251 ErrorArray ((const char *) "expecting one of: PACKEDSET SET", 31);
5253 Expect (mcReserved_oftok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5254 SimpleType (stopset0, stopset1, stopset2);
5259 PointerType := 'POINTER' 'TO' Type
5261 first symbols:pointertok
5263 cannot reachend
5266 static void PointerType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5268 Expect (mcReserved_pointertok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_totok-mcReserved_recordtok))));
5269 Expect (mcReserved_totok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5270 Type (stopset0, stopset1, stopset2);
5275 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
5277 first symbols:proceduretok
5279 cannot reachend
5282 static void ProcedureType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5284 Expect (mcReserved_proceduretok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
5285 if (mcLexBuf_currenttoken == mcReserved_lparatok)
5287 FormalTypeList (stopset0, stopset1, stopset2);
5293 FormalTypeList := '(' ( ')' FormalReturn |
5294 ProcedureParameters ')'
5295 FormalReturn )
5297 first symbols:lparatok
5299 cannot reachend
5302 static void FormalTypeList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5304 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5305 if (mcLexBuf_currenttoken == mcReserved_rparatok)
5307 Expect (mcReserved_rparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5308 FormalReturn (stopset0, stopset1, stopset2);
5310 else if ((mcLexBuf_currenttoken == mcReserved_arraytok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5312 /* avoid dangling else. */
5313 ProcedureParameters (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5314 Expect (mcReserved_rparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5315 FormalReturn (stopset0, stopset1, stopset2);
5317 else
5319 /* avoid dangling else. */
5320 ErrorArray ((const char *) "expecting one of: VAR ... ARRAY identifier )", 44);
5326 FormalReturn := [ ':' OptReturnType ]
5328 first symbols:colontok
5330 reachend
5333 static void FormalReturn (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5335 if (mcLexBuf_currenttoken == mcReserved_colontok)
5337 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5338 OptReturnType (stopset0, stopset1, stopset2);
5344 OptReturnType := '[' Qualident ']' |
5345 Qualident
5347 first symbols:identtok, lsbratok
5349 cannot reachend
5352 static void OptReturnType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5354 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5356 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5357 Qualident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5358 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5360 else if (mcLexBuf_currenttoken == mcReserved_identtok)
5362 /* avoid dangling else. */
5363 Qualident (stopset0, stopset1, stopset2);
5365 else
5367 /* avoid dangling else. */
5368 ErrorArray ((const char *) "expecting one of: identifier [", 30);
5374 ProcedureParameters := ProcedureParameter { ','
5375 ProcedureParameter }
5377 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
5379 cannot reachend
5382 static void ProcedureParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5384 ProcedureParameter (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5385 while (mcLexBuf_currenttoken == mcReserved_commatok)
5387 Expect (mcReserved_commatok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5388 ProcedureParameter (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5390 /* while */
5395 ProcedureParameter := '...' | 'VAR' FormalType |
5396 FormalType
5398 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
5400 cannot reachend
5403 static void ProcedureParameter (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5405 if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
5407 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
5409 else if (mcLexBuf_currenttoken == mcReserved_vartok)
5411 /* avoid dangling else. */
5412 Expect (mcReserved_vartok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5413 FormalType (stopset0, stopset1, stopset2);
5415 else if ((mcLexBuf_currenttoken == mcReserved_arraytok) || (mcLexBuf_currenttoken == mcReserved_identtok))
5417 /* avoid dangling else. */
5418 FormalType (stopset0, stopset1, stopset2);
5420 else
5422 /* avoid dangling else. */
5423 ErrorArray ((const char *) "expecting one of: ARRAY identifier VAR ...", 42);
5429 VarIdent := Ident [ '[' ConstExpressionNop ']' ]
5431 first symbols:identtok
5433 cannot reachend
5436 static void VarIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5438 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
5439 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5441 Expect (mcReserved_lsbratok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5442 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5443 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5449 VarIdentList := VarIdent { ',' VarIdent }
5451 first symbols:identtok
5453 cannot reachend
5456 static void VarIdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5458 VarIdent (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5459 while (mcLexBuf_currenttoken == mcReserved_commatok)
5461 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5462 VarIdent (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5464 /* while */
5469 VariableDeclaration := VarIdentList ':' Type Alignment
5471 first symbols:identtok
5473 cannot reachend
5476 static void VariableDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5478 VarIdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
5479 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5480 Type (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
5481 Alignment (stopset0, stopset1, stopset2);
5486 Designator := PushQualident { SubDesignator }
5488 first symbols:identtok
5490 cannot reachend
5493 static void Designator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5495 PushQualident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
5496 while ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))))) != 0)))
5498 SubDesignator (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
5500 /* while */
5505 SubDesignator :=
5506 % VAR n, field, type: node ; %
5508 % n := peep () %
5510 % IF n = NIL
5511 THEN
5512 ErrorArray ('no expression found') ;
5513 flushErrors ;
5514 RETURN
5515 END %
5517 % type := skipType (getType (n)) %
5518 ( '.' Ident
5519 % IF isRecord (type)
5520 THEN
5521 field := lookupInScope (type, curident) ;
5522 IF field = NIL
5523 THEN
5524 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
5525 ELSE
5526 n := replace (makeComponentRef (n, field))
5528 ELSE
5529 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
5530 END %
5531 | '[' ArrayExpList
5532 % IF isArray (type)
5533 THEN
5534 n := replace (makeArrayRef (n, pop ()))
5535 ELSE
5536 metaError1 ('attempting to access an array but the expression is not an array but a {%1d}', type)
5537 END %
5538 ']' | SubPointer )
5540 first symbols:uparrowtok, lsbratok, periodtok
5542 cannot reachend
5545 static void SubDesignator (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5547 decl_node n;
5548 decl_node field;
5549 decl_node type;
5551 n = peep ();
5552 if (n == NULL)
5554 ErrorArray ((const char *) "no expression found", 19);
5555 mcError_flushErrors ();
5556 return;
5558 type = decl_skipType (decl_getType (n));
5559 if (mcLexBuf_currenttoken == mcReserved_periodtok)
5561 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5562 Ident (stopset0, stopset1, stopset2);
5563 if (decl_isRecord (type))
5565 field = decl_lookupInScope (type, curident);
5566 if (field == NULL)
5568 mcMetaError_metaError2 ((const char *) "field {%1k} cannot be found in record {%2ad}", 44, (const unsigned char *) &curident, (sizeof (curident)-1), (const unsigned char *) &type, (sizeof (type)-1));
5570 else
5572 n = replace (decl_makeComponentRef (n, field));
5575 else
5577 mcMetaError_metaError2 ((const char *) "attempting to access a field {%1k} from {%2ad} which does not have a record type", 80, (const unsigned char *) &curident, (sizeof (curident)-1), (const unsigned char *) &type, (sizeof (type)-1));
5580 else if (mcLexBuf_currenttoken == mcReserved_lsbratok)
5582 /* avoid dangling else. */
5583 Expect (mcReserved_lsbratok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5584 ArrayExpList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
5585 if (decl_isArray (type))
5587 n = replace (decl_makeArrayRef (n, pop ()));
5589 else
5591 mcMetaError_metaError1 ((const char *) "attempting to access an array but the expression is not an array but a {%1d}", 76, (const unsigned char *) &type, (sizeof (type)-1));
5593 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
5595 else if (mcLexBuf_currenttoken == mcReserved_uparrowtok)
5597 /* avoid dangling else. */
5598 SubPointer (stopset0, stopset1, stopset2);
5600 else
5602 /* avoid dangling else. */
5603 ErrorArray ((const char *) "expecting one of: ^ [ .", 23);
5609 SubPointer :=
5610 % VAR n, field, type: node ; %
5612 % n := peep () %
5614 % type := skipType (getType (n)) %
5615 '^' ( '.' Ident
5616 % IF isPointer (type)
5617 THEN
5618 type := skipType (getType (type)) ;
5619 IF isRecord (type)
5620 THEN
5621 field := lookupInScope (type, curident) ;
5622 IF field = NIL
5623 THEN
5624 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
5625 ELSE
5626 n := replace (makePointerRef (n, field))
5628 ELSE
5629 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
5631 ELSE
5632 metaError2 ('trying to dereference {%1k} which was not declared as a pointer but a {%2tad}', n, n)
5633 END %
5635 % IF isPointer (type)
5636 THEN
5637 n := replace (makeDeRef (n))
5638 ELSE
5639 metaError1 ('attempting to dereference a pointer but the expression is not a pointer but a {%1d}', type)
5640 END %
5643 first symbols:uparrowtok
5645 cannot reachend
5648 static void SubPointer (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5650 decl_node n;
5651 decl_node field;
5652 decl_node type;
5654 n = peep ();
5655 type = decl_skipType (decl_getType (n));
5656 Expect (mcReserved_uparrowtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
5657 if (mcLexBuf_currenttoken == mcReserved_periodtok)
5659 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
5660 Ident (stopset0, stopset1, stopset2);
5661 if (decl_isPointer (type))
5663 type = decl_skipType (decl_getType (type));
5664 if (decl_isRecord (type))
5666 field = decl_lookupInScope (type, curident);
5667 if (field == NULL)
5669 mcMetaError_metaError2 ((const char *) "field {%1k} cannot be found in record {%2ad}", 44, (const unsigned char *) &curident, (sizeof (curident)-1), (const unsigned char *) &type, (sizeof (type)-1));
5671 else
5673 n = replace (decl_makePointerRef (n, field));
5676 else
5678 mcMetaError_metaError2 ((const char *) "attempting to access a field {%1k} from {%2ad} which does not have a record type", 80, (const unsigned char *) &curident, (sizeof (curident)-1), (const unsigned char *) &type, (sizeof (type)-1));
5681 else
5683 mcMetaError_metaError2 ((const char *) "trying to dereference {%1k} which was not declared as a pointer but a {%2tad}", 77, (const unsigned char *) &n, (sizeof (n)-1), (const unsigned char *) &n, (sizeof (n)-1));
5686 else
5688 if (decl_isPointer (type))
5690 n = replace (decl_makeDeRef (n));
5692 else
5694 mcMetaError_metaError1 ((const char *) "attempting to dereference a pointer but the expression is not a pointer but a {%1d}", 83, (const unsigned char *) &type, (sizeof (type)-1));
5701 ArrayExpList :=
5702 % VAR l: node ; %
5704 % l := push (makeExpList ()) %
5705 Expression
5706 % putExpList (l, pop ()) %
5708 % assert (isExpList (peep ())) %
5709 { ',' Expression
5710 % putExpList (l, pop ()) %
5712 % assert (isExpList (peep ())) %
5715 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5717 cannot reachend
5720 static void ArrayExpList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5722 decl_node l;
5724 l = push (decl_makeExpList ());
5725 Expression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5726 decl_putExpList (l, pop ());
5727 mcDebug_assert (decl_isExpList (peep ()));
5728 while (mcLexBuf_currenttoken == mcReserved_commatok)
5730 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5731 Expression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5732 decl_putExpList (l, pop ());
5733 mcDebug_assert (decl_isExpList (peep ()));
5735 /* while */
5740 ExpList :=
5741 % VAR p, n: node ; %
5743 % p := peep () %
5745 % assert (isExpList (p)) %
5746 Expression
5747 % putExpList (p, pop ()) %
5749 % assert (isExpList (peep ())) %
5750 { ',' Expression
5751 % putExpList (p, pop ()) %
5753 % assert (isExpList (peep ())) %
5756 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5758 cannot reachend
5761 static void ExpList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5763 decl_node p;
5764 decl_node n;
5766 p = peep ();
5767 mcDebug_assert (decl_isExpList (p));
5768 Expression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5769 decl_putExpList (p, pop ());
5770 mcDebug_assert (decl_isExpList (peep ()));
5771 while (mcLexBuf_currenttoken == mcReserved_commatok)
5773 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5774 Expression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
5775 decl_putExpList (p, pop ());
5776 mcDebug_assert (decl_isExpList (peep ()));
5778 /* while */
5783 Expression :=
5784 % VAR c, l, r: node ; op: toktype ; %
5785 SimpleExpression
5786 % op := currenttoken %
5787 [ Relation
5788 % l := pop () %
5789 SimpleExpression
5790 % r := pop () %
5792 % r := push (makeBinaryTok (op, l, r)) %
5795 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5797 cannot reachend
5800 static void Expression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5802 decl_node c;
5803 decl_node l;
5804 decl_node r;
5805 mcReserved_toktype op;
5807 SimpleExpression (stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_intok-mcReserved_arraytok))), stopset2);
5808 op = mcLexBuf_currenttoken;
5809 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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))
5811 Relation (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5812 l = pop ();
5813 SimpleExpression (stopset0, stopset1, stopset2);
5814 r = pop ();
5815 r = push (decl_makeBinaryTok (op, l, r));
5821 SimpleExpression :=
5822 % VAR op: toktype ; n: node ; %
5823 UnaryOrTerm {
5824 % op := currenttoken %
5826 % n := pop () %
5827 AddOperator Term
5829 % n := push (makeBinaryTok (op, n, pop ())) %
5832 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5834 cannot reachend
5837 static void SimpleExpression (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5839 mcReserved_toktype op;
5840 decl_node n;
5842 UnaryOrTerm (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
5843 while (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_ortok))
5845 op = mcLexBuf_currenttoken;
5846 n = pop ();
5847 AddOperator (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5848 Term (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_ortok-mcReserved_arraytok))), stopset2);
5849 n = push (decl_makeBinaryTok (op, n, pop ()));
5851 /* while */
5856 UnaryOrTerm :=
5857 % VAR n: node ; %
5858 '+' Term
5859 % n := push (makeUnaryTok (plustok, pop ())) %
5860 | '-' Term
5861 % n := push (makeUnaryTok (minustok, pop ())) %
5862 | Term
5864 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5866 cannot reachend
5869 static void UnaryOrTerm (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5871 decl_node n;
5873 if (mcLexBuf_currenttoken == mcReserved_plustok)
5875 Expect (mcReserved_plustok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5876 Term (stopset0, stopset1, stopset2);
5877 n = push (decl_makeUnaryTok (mcReserved_plustok, pop ()));
5879 else if (mcLexBuf_currenttoken == mcReserved_minustok)
5881 /* avoid dangling else. */
5882 Expect (mcReserved_minustok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5883 Term (stopset0, stopset1, stopset2);
5884 n = push (decl_makeUnaryTok (mcReserved_minustok, pop ()));
5886 else if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
5888 /* avoid dangling else. */
5889 Term (stopset0, stopset1, stopset2);
5891 else
5893 /* avoid dangling else. */
5894 ErrorArray ((const char *) "expecting one of: NOT ( string integer number real number { identifier - +", 74);
5900 Term :=
5901 % VAR op: toktype ; n: node ; %
5902 Factor {
5903 % op := currenttoken %
5904 MulOperator
5905 % n := pop () %
5906 Factor
5907 % n := push (makeBinaryTok (op, n, pop ())) %
5910 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok
5912 cannot reachend
5915 static void Term (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5917 mcReserved_toktype op;
5918 decl_node n;
5920 Factor (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ambersandtok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_timestok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_modtok-mcReserved_arraytok)) | (1 << (mcReserved_divtok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
5921 while ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))))) != 0)))) || (mcLexBuf_currenttoken == mcReserved_remtok))
5923 op = mcLexBuf_currenttoken;
5924 MulOperator (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5925 n = pop ();
5926 Factor (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_timestok-mcReserved_eoftok)) | (1 << (mcReserved_dividetok-mcReserved_eoftok)) | (1 << (mcReserved_andtok-mcReserved_eoftok)) | (1 << (mcReserved_ambersandtok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_divtok-mcReserved_arraytok)) | (1 << (mcReserved_modtok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_remtok-mcReserved_recordtok))));
5927 n = push (decl_makeBinaryTok (op, n, pop ()));
5929 /* while */
5934 PushString := string
5935 % VAR n: node ; %
5937 % n := push (makeString (curstring)) %
5940 first symbols:stringtok
5942 cannot reachend
5945 static void PushString (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5947 decl_node n;
5949 string (stopset0, stopset1, stopset2);
5950 n = push (decl_makeString (curstring));
5955 Factor := Number | PushString | SetOrDesignatorOrFunction |
5956 '(' Expression ')' |
5957 'NOT' ( Factor
5958 % VAR n: node ; %
5960 % n := push (makeUnaryTok (nottok, pop ())) %
5961 | ConstAttribute
5962 % n := push (makeUnaryTok (nottok, pop ())) %
5965 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
5967 cannot reachend
5970 static void Factor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
5972 decl_node n;
5974 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok))))) != 0)))
5976 Number (stopset0, stopset1, stopset2);
5978 else if (mcLexBuf_currenttoken == mcReserved_stringtok)
5980 /* avoid dangling else. */
5981 PushString (stopset0, stopset1, stopset2);
5983 else if ((mcLexBuf_currenttoken == mcReserved_lcbratok) || (mcLexBuf_currenttoken == mcReserved_identtok))
5985 /* avoid dangling else. */
5986 SetOrDesignatorOrFunction (stopset0, stopset1, stopset2);
5988 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
5990 /* avoid dangling else. */
5991 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
5992 Expression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
5993 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
5995 else if (mcLexBuf_currenttoken == mcReserved_nottok)
5997 /* avoid dangling else. */
5998 Expect (mcReserved_nottok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
5999 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6001 Factor (stopset0, stopset1, stopset2);
6002 n = push (decl_makeUnaryTok (mcReserved_nottok, pop ()));
6004 else if (mcLexBuf_currenttoken == mcReserved_attributetok)
6006 /* avoid dangling else. */
6007 ConstAttribute (stopset0, stopset1, stopset2);
6008 n = push (decl_makeUnaryTok (mcReserved_nottok, pop ()));
6010 else
6012 /* avoid dangling else. */
6013 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ real number integer number string ( NOT { identifier", 84);
6016 else
6018 /* avoid dangling else. */
6019 ErrorArray ((const char *) "expecting one of: NOT ( { identifier string integer number real number", 70);
6025 ComponentElement := Expression
6026 % VAR l, h, n: node ; %
6028 % l := pop () %
6030 % h := NIL %
6031 [ '..' Expression
6032 % h := pop () %
6034 % ErrorArray ('implementation restriction range is not allowed') %
6036 % n := push (includeSetValue (pop (), l, h)) %
6039 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
6041 cannot reachend
6044 static void ComponentElement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6046 decl_node l;
6047 decl_node h;
6048 decl_node n;
6050 Expression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
6051 l = pop ();
6052 h = static_cast<decl_node> (NULL);
6053 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
6055 Expect (mcReserved_periodperiodtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6056 Expression (stopset0, stopset1, stopset2);
6057 h = pop ();
6058 ErrorArray ((const char *) "implementation restriction range is not allowed", 47);
6060 n = push (decl_includeSetValue (pop (), l, h));
6065 ComponentValue := ComponentElement [ 'BY'
6066 % ErrorArray ('implementation restriction BY not allowed') %
6067 Expression ]
6069 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
6071 cannot reachend
6074 static void ComponentValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6076 ComponentElement (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok))), stopset2);
6077 if (mcLexBuf_currenttoken == mcReserved_bytok)
6079 Expect (mcReserved_bytok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6080 ErrorArray ((const char *) "implementation restriction BY not allowed", 41);
6081 Expression (stopset0, stopset1, stopset2);
6087 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
6089 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
6091 cannot reachend
6094 static void ArraySetRecordValue (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6096 ComponentValue (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6097 while (mcLexBuf_currenttoken == mcReserved_commatok)
6099 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6100 ComponentValue (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6102 /* while */
6107 Constructor := '{'
6108 % VAR n: node ; %
6110 % n := push (makeSetValue ()) %
6111 [ ArraySetRecordValue ] '}'
6113 first symbols:lcbratok
6115 cannot reachend
6118 static void Constructor (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6120 decl_node n;
6122 Expect (mcReserved_lcbratok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6123 n = push (decl_makeSetValue ());
6124 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6126 ArraySetRecordValue (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rcbratok-mcReserved_eoftok))), stopset1, stopset2);
6128 Expect (mcReserved_rcbratok, stopset0, stopset1, stopset2);
6133 SetOrDesignatorOrFunction := PushQualident
6134 % VAR q, p, n: node ; %
6135 [ Constructor
6136 % p := pop () %
6138 % q := pop () %
6140 % n := push (putSetValue (p, q)) %
6141 | SimpleDes [
6142 % q := pop () %
6143 ActualParameters
6145 % p := pop () %
6147 % p := push (makeFuncCall (q, p)) %
6148 ] ] |
6149 Constructor
6151 first symbols:identtok, lcbratok
6153 cannot reachend
6156 static void SetOrDesignatorOrFunction (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6158 decl_node q;
6159 decl_node p;
6160 decl_node n;
6162 if (mcLexBuf_currenttoken == mcReserved_identtok)
6164 /* avoid dangling else. */
6165 PushQualident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lcbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
6166 if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))))) != 0)))
6168 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6169 /* seen optional [ | ] expression */
6170 if (mcLexBuf_currenttoken == mcReserved_lcbratok)
6172 Constructor (stopset0, stopset1, stopset2);
6173 p = pop ();
6174 q = pop ();
6175 n = push (decl_putSetValue (p, q));
6177 else if ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))))) != 0)))
6179 /* avoid dangling else. */
6180 SimpleDes (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
6181 if (mcLexBuf_currenttoken == mcReserved_lparatok)
6183 q = pop ();
6184 ActualParameters (stopset0, stopset1, stopset2);
6185 p = pop ();
6186 p = push (decl_makeFuncCall (q, p));
6189 else
6191 /* avoid dangling else. */
6192 ErrorArray ((const char *) "expecting one of: ( [ . ^ {", 27);
6195 /* end of optional [ | ] expression */
6197 else if (mcLexBuf_currenttoken == mcReserved_lcbratok)
6199 /* avoid dangling else. */
6200 Constructor (stopset0, stopset1, stopset2);
6202 else
6204 /* avoid dangling else. */
6205 ErrorArray ((const char *) "expecting one of: { identifier", 30);
6211 SimpleDes := { SubDesignator }
6213 first symbols:uparrowtok, periodtok, lsbratok
6215 reachend
6218 static void SimpleDes (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6220 while ((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))))) != 0)))
6222 SubDesignator (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok)) | (1 << (mcReserved_uparrowtok-mcReserved_eoftok))), stopset1, stopset2);
6224 /* while */
6229 ActualParameters := '('
6230 % VAR n: node ; %
6232 % n := push (makeExpList ()) %
6233 [ ExpList ] ')'
6234 % assert (isExpList (peep ())) %
6237 first symbols:lparatok
6239 cannot reachend
6242 static void ActualParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6244 decl_node n;
6246 Expect (mcReserved_lparatok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6247 n = push (decl_makeExpList ());
6248 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6250 ExpList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
6252 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
6253 mcDebug_assert (decl_isExpList (peep ()));
6258 ExitStatement :=
6259 % VAR n: node ; %
6260 'EXIT'
6261 % IF loopNo = 0
6262 THEN
6263 ErrorArray ('EXIT can only be used inside a LOOP statement')
6264 ELSE
6265 n := pushStmt (makeExit (peepLoop (), loopNo))
6266 END %
6269 first symbols:exittok
6271 cannot reachend
6274 static void ExitStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6276 decl_node n;
6278 Expect (mcReserved_exittok, stopset0, stopset1, stopset2);
6279 if (loopNo == 0)
6281 ErrorArray ((const char *) "EXIT can only be used inside a LOOP statement", 45);
6283 else
6285 n = pushStmt (decl_makeExit (peepLoop (), loopNo));
6291 ReturnStatement :=
6292 % VAR n: node ; %
6294 % n := pushStmt (makeReturn ()) %
6295 'RETURN' [ Expression
6296 % putReturn (n, pop ()) %
6298 % addCommentBody (peepStmt ()) %
6300 % addCommentAfter (peepStmt ()) %
6302 % assert (isReturn (peepStmt ())) %
6305 first symbols:returntok
6307 cannot reachend
6310 static void ReturnStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6312 decl_node n;
6314 n = pushStmt (decl_makeReturn ());
6315 Expect (mcReserved_returntok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6316 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
6318 Expression (stopset0, stopset1, stopset2);
6319 decl_putReturn (n, pop ());
6321 decl_addCommentBody (peepStmt ());
6322 decl_addCommentAfter (peepStmt ());
6323 mcDebug_assert (decl_isReturn (peepStmt ()));
6328 Statement := ( AssignmentOrProcedureCall |
6329 IfStatement | CaseStatement |
6330 WhileStatement |
6331 RepeatStatement |
6332 LoopStatement | ForStatement |
6333 WithStatement | AsmStatement |
6334 ExitStatement | ReturnStatement |
6335 RetryStatement |
6337 % VAR s: node ; %
6339 % s := pushStmt (NIL) %
6342 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok
6344 reachend
6347 static void Statement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6349 decl_node s;
6351 if (mcLexBuf_currenttoken == mcReserved_identtok)
6353 AssignmentOrProcedureCall (stopset0, stopset1, stopset2);
6355 else if (mcLexBuf_currenttoken == mcReserved_iftok)
6357 /* avoid dangling else. */
6358 IfStatement (stopset0, stopset1, stopset2);
6360 else if (mcLexBuf_currenttoken == mcReserved_casetok)
6362 /* avoid dangling else. */
6363 CaseStatement (stopset0, stopset1, stopset2);
6365 else if (mcLexBuf_currenttoken == mcReserved_whiletok)
6367 /* avoid dangling else. */
6368 WhileStatement (stopset0, stopset1, stopset2);
6370 else if (mcLexBuf_currenttoken == mcReserved_repeattok)
6372 /* avoid dangling else. */
6373 RepeatStatement (stopset0, stopset1, stopset2);
6375 else if (mcLexBuf_currenttoken == mcReserved_looptok)
6377 /* avoid dangling else. */
6378 LoopStatement (stopset0, stopset1, stopset2);
6380 else if (mcLexBuf_currenttoken == mcReserved_fortok)
6382 /* avoid dangling else. */
6383 ForStatement (stopset0, stopset1, stopset2);
6385 else if (mcLexBuf_currenttoken == mcReserved_withtok)
6387 /* avoid dangling else. */
6388 WithStatement (stopset0, stopset1, stopset2);
6390 else if (mcLexBuf_currenttoken == mcReserved_asmtok)
6392 /* avoid dangling else. */
6393 AsmStatement (stopset0, stopset1, stopset2);
6395 else if (mcLexBuf_currenttoken == mcReserved_exittok)
6397 /* avoid dangling else. */
6398 ExitStatement (stopset0, stopset1, stopset2);
6400 else if (mcLexBuf_currenttoken == mcReserved_returntok)
6402 /* avoid dangling else. */
6403 ReturnStatement (stopset0, stopset1, stopset2);
6405 else if (mcLexBuf_currenttoken == mcReserved_retrytok)
6407 /* avoid dangling else. */
6408 RetryStatement (stopset0, stopset1, stopset2);
6410 else
6412 /* avoid dangling else. */
6413 s = pushStmt (static_cast<decl_node> (NULL));
6419 RetryStatement :=
6420 % VAR s: node ; %
6422 % s := pushStmt (makeComment ("retry")) %
6423 'RETRY'
6425 first symbols:retrytok
6427 cannot reachend
6430 static void RetryStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6432 decl_node s;
6434 s = pushStmt (decl_makeComment ((const char *) "retry", 5));
6435 Expect (mcReserved_retrytok, stopset0, stopset1, stopset2);
6440 AssignmentOrProcedureCall :=
6441 % VAR d, a, p: node ; %
6442 Designator
6443 % d := pop () %
6444 ( ':=' Expression
6445 % a := pushStmt (makeAssignment (d, pop ())) %
6447 ActualParameters
6449 % a := pushStmt (makeFuncCall (d, pop ())) %
6452 % a := pushStmt (makeFuncCall (d, NIL)) %
6454 % addCommentBody (peepStmt ()) %
6456 % addCommentAfter (peepStmt ()) %
6459 first symbols:identtok
6461 cannot reachend
6464 static void AssignmentOrProcedureCall (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6466 decl_node d;
6467 decl_node a;
6468 decl_node p;
6470 Designator (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_becomestok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
6471 d = pop ();
6472 if (mcLexBuf_currenttoken == mcReserved_becomestok)
6474 Expect (mcReserved_becomestok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6475 Expression (stopset0, stopset1, stopset2);
6476 a = pushStmt (decl_makeAssignment (d, pop ()));
6478 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
6480 /* avoid dangling else. */
6481 ActualParameters (stopset0, stopset1, stopset2);
6482 a = pushStmt (decl_makeFuncCall (d, pop ()));
6484 else
6486 /* avoid dangling else. */
6487 a = pushStmt (decl_makeFuncCall (d, static_cast<decl_node> (NULL)));
6489 decl_addCommentBody (peepStmt ());
6490 decl_addCommentAfter (peepStmt ());
6495 StatementSequence :=
6496 % VAR s, t: node ; %
6498 % s := pushStmt (makeStatementSequence ()) %
6500 % assert (isStatementSequence (peepStmt ())) %
6501 Statement
6502 % addStatement (s, popStmt ()) %
6504 % assert (isStatementSequence (peepStmt ())) %
6505 { ';' Statement
6506 % addStatement (s, popStmt ()) %
6508 % assert (isStatementSequence (peepStmt ())) %
6511 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
6513 reachend
6516 static void StatementSequence (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6518 decl_node s;
6519 decl_node t;
6521 s = pushStmt (decl_makeStatementSequence ());
6522 mcDebug_assert (decl_isStatementSequence (peepStmt ()));
6523 Statement (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6524 decl_addStatement (s, popStmt ());
6525 mcDebug_assert (decl_isStatementSequence (peepStmt ()));
6526 while (mcLexBuf_currenttoken == mcReserved_semicolontok)
6528 Expect (mcReserved_semicolontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_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))));
6529 Statement (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
6530 decl_addStatement (s, popStmt ());
6531 mcDebug_assert (decl_isStatementSequence (peepStmt ()));
6533 /* while */
6538 IfStatement :=
6539 % VAR i, a, b: node ; %
6540 'IF'
6541 % b := makeCommentS (getBodyComment ()) %
6542 Expression
6543 % a := makeCommentS (getAfterComment ()) %
6544 'THEN' StatementSequence
6545 % i := pushStmt (makeIf (pop (), popStmt ())) %
6547 % addIfComments (i, b, a) %
6548 { 'ELSIF'
6549 % b := makeCommentS (getBodyComment ()) %
6550 Expression
6551 % a := makeCommentS (getAfterComment ()) %
6552 'THEN'
6553 % addElseComments (peepStmt (), b, a) %
6554 StatementSequence
6555 % i := makeElsif (i, pop (), popStmt ()) %
6556 } [ 'ELSE' StatementSequence
6557 % putElse (i, popStmt ()) %
6558 ] 'END'
6559 % b := makeCommentS (getBodyComment ()) %
6561 % a := makeCommentS (getAfterComment ()) %
6563 % assert (isIf (peepStmt ())) %
6565 % addIfEndComments (peepStmt (), b, a) %
6568 first symbols:iftok
6570 cannot reachend
6573 static void IfStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6575 decl_node i;
6576 decl_node a;
6577 decl_node b;
6579 Expect (mcReserved_iftok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6580 b = decl_makeCommentS (mcLexBuf_getBodyComment ());
6581 Expression (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_thentok-mcReserved_recordtok))));
6582 a = decl_makeCommentS (mcLexBuf_getAfterComment ());
6583 Expect (mcReserved_thentok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6584 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_elsiftok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6585 i = pushStmt (decl_makeIf (pop (), popStmt ()));
6586 decl_addIfComments (i, b, a);
6587 while (mcLexBuf_currenttoken == mcReserved_elsiftok)
6589 Expect (mcReserved_elsiftok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6590 b = decl_makeCommentS (mcLexBuf_getBodyComment ());
6591 Expression (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_thentok-mcReserved_recordtok))));
6592 a = decl_makeCommentS (mcLexBuf_getAfterComment ());
6593 Expect (mcReserved_thentok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6594 decl_addElseComments (peepStmt (), b, a);
6595 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_elsiftok-mcReserved_arraytok))), stopset2);
6596 i = decl_makeElsif (i, pop (), popStmt ());
6598 /* while */
6599 if (mcLexBuf_currenttoken == mcReserved_elsetok)
6601 Expect (mcReserved_elsetok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6602 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6603 decl_putElse (i, popStmt ());
6605 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6606 b = decl_makeCommentS (mcLexBuf_getBodyComment ());
6607 a = decl_makeCommentS (mcLexBuf_getAfterComment ());
6608 mcDebug_assert (decl_isIf (peepStmt ()));
6609 decl_addIfEndComments (peepStmt (), b, a);
6614 CaseStatement :=
6615 % VAR s, e: node ; %
6617 % s := pushStmt (makeCase ()) %
6618 'CASE' Expression
6619 % s := putCaseExpression (s, pop ()) %
6620 'OF' Case { '|' Case } CaseEndStatement
6622 first symbols:casetok
6624 cannot reachend
6627 static void CaseStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6629 decl_node s;
6630 decl_node e;
6632 s = pushStmt (decl_makeCase ());
6633 Expect (mcReserved_casetok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6634 Expression (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
6635 s = decl_putCaseExpression (s, pop ());
6636 Expect (mcReserved_oftok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
6637 Case (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6638 while (mcLexBuf_currenttoken == mcReserved_bartok)
6640 Expect (mcReserved_bartok, stopset0|(mcp5_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|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok)) | (1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
6641 Case (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_bartok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_elsetok-mcReserved_arraytok))), stopset2);
6643 /* while */
6644 CaseEndStatement (stopset0, stopset1, stopset2);
6649 CaseEndStatement :=
6650 % VAR c: node ; %
6651 'END' | 'ELSE'
6652 % c := peepStmt () %
6653 StatementSequence
6654 % c := putCaseElse (c, popStmt ()) %
6655 'END'
6657 first symbols:elsetok, endtok
6659 cannot reachend
6662 static void CaseEndStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6664 decl_node c;
6666 if (mcLexBuf_currenttoken == mcReserved_endtok)
6668 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6670 else if (mcLexBuf_currenttoken == mcReserved_elsetok)
6672 /* avoid dangling else. */
6673 Expect (mcReserved_elsetok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6674 c = peepStmt ();
6675 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6676 c = decl_putCaseElse (c, popStmt ());
6677 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6679 else
6681 /* avoid dangling else. */
6682 ErrorArray ((const char *) "expecting one of: ELSE END", 26);
6688 Case := [ CaseLabelList ':'
6689 % VAR l, c: node ; %
6691 % l := pop () %
6693 % c := peepStmt () %
6694 StatementSequence
6695 % c := putCaseStatement (c, l, popStmt ()) %
6698 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6700 reachend
6703 static void Case (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6705 decl_node l;
6706 decl_node c;
6708 if ((((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_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)) & ((mcp5_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))))
6710 CaseLabelList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
6711 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6712 l = pop ();
6713 c = peepStmt ();
6714 StatementSequence (stopset0, stopset1, stopset2);
6715 c = decl_putCaseStatement (c, l, popStmt ());
6721 CaseLabelList :=
6722 % VAR l: node ; %
6724 % l := push (makeCaseList ()) %
6725 CaseLabels { ',' CaseLabels }
6727 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
6729 cannot reachend
6732 static void CaseLabelList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6734 decl_node l;
6736 l = push (decl_makeCaseList ());
6737 CaseLabels (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6738 while (mcLexBuf_currenttoken == mcReserved_commatok)
6740 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
6741 CaseLabels (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
6743 /* while */
6748 CaseLabels :=
6749 % VAR lo, hi, l: node ; %
6751 % lo := NIL ; hi := NIL %
6753 % l := peep () %
6754 ConstExpression
6755 % lo := pop () %
6756 [ '..' ConstExpression
6757 % hi := pop () %
6759 % l := putCaseRange (l, lo, hi) %
6762 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6764 cannot reachend
6767 static void CaseLabels (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6769 decl_node lo;
6770 decl_node hi;
6771 decl_node l;
6773 lo = static_cast<decl_node> (NULL);
6774 hi = static_cast<decl_node> (NULL);
6775 l = peep ();
6776 ConstExpression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodperiodtok-mcReserved_eoftok))), stopset1, stopset2);
6777 lo = pop ();
6778 if (mcLexBuf_currenttoken == mcReserved_periodperiodtok)
6780 Expect (mcReserved_periodperiodtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
6781 ConstExpression (stopset0, stopset1, stopset2);
6782 hi = pop ();
6784 l = decl_putCaseRange (l, lo, hi);
6789 WhileStatement :=
6790 % VAR s, w, e, a, b: node ; %
6792 % w := pushStmt (makeWhile ()) %
6793 'WHILE' Expression 'DO'
6794 % b := makeCommentS (getBodyComment ()) %
6796 % a := makeCommentS (getAfterComment ()) %
6798 % addWhileDoComment (w, b, a) %
6800 % e := pop () %
6801 StatementSequence
6802 % s := popStmt () %
6803 'END'
6804 % assert (isStatementSequence (peepStmt ())) %
6806 % putWhile (w, e, s) %
6808 % b := makeCommentS (getBodyComment ()) %
6810 % a := makeCommentS (getAfterComment ()) %
6812 % addWhileEndComment (w, b, a) %
6815 first symbols:whiletok
6817 cannot reachend
6820 static void WhileStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6822 decl_node s;
6823 decl_node w;
6824 decl_node e;
6825 decl_node a;
6826 decl_node b;
6828 w = pushStmt (decl_makeWhile ());
6829 Expect (mcReserved_whiletok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6830 Expression (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6831 Expect (mcReserved_dotok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6832 b = decl_makeCommentS (mcLexBuf_getBodyComment ());
6833 a = decl_makeCommentS (mcLexBuf_getAfterComment ());
6834 decl_addWhileDoComment (w, b, a);
6835 e = pop ();
6836 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6837 s = popStmt ();
6838 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6839 /* assert (isStatementSequence (peepStmt ())) */
6840 decl_putWhile (w, e, s);
6841 b = decl_makeCommentS (mcLexBuf_getBodyComment ());
6842 a = decl_makeCommentS (mcLexBuf_getAfterComment ());
6843 decl_addWhileEndComment (w, b, a);
6848 RepeatStatement :=
6849 % VAR r, s, a, b: node ; %
6851 % r := pushStmt (makeRepeat ()) %
6852 'REPEAT'
6853 % b := makeCommentS (getBodyComment ()) %
6855 % a := makeCommentS (getAfterComment ()) %
6857 % addRepeatComment (r, b, a) %
6858 StatementSequence
6859 % s := popStmt () %
6860 'UNTIL' Expression
6861 % putRepeat (r, s, pop ()) %
6863 % b := makeCommentS (getBodyComment ()) %
6865 % a := makeCommentS (getAfterComment ()) %
6867 % addUntilComment (r, b, a) %
6870 first symbols:repeattok
6872 cannot reachend
6875 static void RepeatStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6877 decl_node r;
6878 decl_node s;
6879 decl_node a;
6880 decl_node b;
6882 r = pushStmt (decl_makeRepeat ());
6883 Expect (mcReserved_repeattok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-mcReserved_recordtok)) | (1 << (mcReserved_untiltok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6884 b = decl_makeCommentS (mcLexBuf_getBodyComment ());
6885 a = decl_makeCommentS (mcLexBuf_getAfterComment ());
6886 decl_addRepeatComment (r, b, a);
6887 StatementSequence (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_untiltok-mcReserved_recordtok))));
6888 s = popStmt ();
6889 Expect (mcReserved_untiltok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6890 Expression (stopset0, stopset1, stopset2);
6891 decl_putRepeat (r, s, pop ());
6892 b = decl_makeCommentS (mcLexBuf_getBodyComment ());
6893 a = decl_makeCommentS (mcLexBuf_getAfterComment ());
6894 decl_addUntilComment (r, b, a);
6899 ForStatement :=
6900 % VAR f, i, s, e, b: node ; %
6902 % b := NIL %
6904 % f := pushStmt (makeFor ()) %
6905 'FOR' Ident
6906 % i := lookupWithSym (curident) %
6907 ':=' Expression
6908 % s := pop () %
6909 'TO' Expression
6910 % e := pop () %
6911 [ 'BY' ConstExpression
6912 % b := pop () %
6913 ] 'DO' StatementSequence
6914 % putFor (f, i, s, e, b, popStmt ()) %
6915 'END'
6917 first symbols:fortok
6919 cannot reachend
6922 static void ForStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6924 decl_node f;
6925 decl_node i;
6926 decl_node s;
6927 decl_node e;
6928 decl_node b;
6930 b = static_cast<decl_node> (NULL);
6931 f = pushStmt (decl_makeFor ());
6932 Expect (mcReserved_fortok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
6933 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_becomestok-mcReserved_eoftok))), stopset1, stopset2);
6934 i = lookupWithSym (curident);
6935 Expect (mcReserved_becomestok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6936 Expression (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_totok-mcReserved_recordtok))));
6937 s = pop ();
6938 Expect (mcReserved_totok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6939 Expression (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_bytok-mcReserved_arraytok)) | (1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6940 e = pop ();
6941 if (mcLexBuf_currenttoken == mcReserved_bytok)
6943 Expect (mcReserved_bytok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
6944 ConstExpression (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
6945 b = pop ();
6947 Expect (mcReserved_dotok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6948 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6949 decl_putFor (f, i, s, e, b, popStmt ());
6950 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6955 LoopStatement :=
6956 % VAR l, s: node ; %
6957 'LOOP'
6958 % l := pushStmt (pushLoop (makeLoop ())) %
6960 % INC (loopNo) %
6961 StatementSequence
6962 % s := popStmt () %
6964 % putLoop (l, s) %
6966 % DEC (loopNo) %
6967 'END'
6968 % l := popLoop () %
6970 % assert (isLoop (peepStmt ())) %
6973 first symbols:looptok
6975 cannot reachend
6978 static void LoopStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
6980 decl_node l;
6981 decl_node s;
6983 Expect (mcReserved_looptok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
6984 l = pushStmt (pushLoop (decl_makeLoop ()));
6985 loopNo += 1;
6986 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
6987 s = popStmt ();
6988 decl_putLoop (l, s);
6989 loopNo -= 1;
6990 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
6991 l = popLoop ();
6992 mcDebug_assert (decl_isLoop (peepStmt ()));
6997 WithStatement := 'WITH' Designator 'DO'
6998 % startWith (pop ()) %
6999 StatementSequence 'END'
7000 % endWith %
7003 first symbols:withtok
7005 cannot reachend
7008 static void WithStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7010 Expect (mcReserved_withtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7011 Designator (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_dotok-mcReserved_arraytok))), stopset2);
7012 Expect (mcReserved_dotok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7013 startWith (pop ());
7014 StatementSequence (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
7015 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
7016 endWith ();
7021 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
7022 Ident
7023 % leaveScope %
7026 first symbols:proceduretok
7028 cannot reachend
7031 static void ProcedureDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7033 ProcedureHeading (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7034 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7035 ProcedureBlock (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7036 Ident (stopset0, stopset1, stopset2);
7037 decl_leaveScope ();
7042 ProcedureIdent := Ident
7043 % curproc := lookupSym (curident) %
7045 % enterScope (curproc) %
7047 % setProcedureComment (lastcomment, curident) %
7050 first symbols:identtok
7052 cannot reachend
7055 static void ProcedureIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7057 Ident (stopset0, stopset1, stopset2);
7058 curproc = decl_lookupSym (curident);
7059 decl_enterScope (curproc);
7060 mcComment_setProcedureComment (mcLexBuf_lastcomment, curident);
7065 DefProcedureIdent := Ident
7066 % curproc := lookupSym (curident) %
7069 first symbols:identtok
7071 cannot reachend
7074 static void DefProcedureIdent (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7076 Ident (stopset0, stopset1, stopset2);
7077 curproc = decl_lookupSym (curident);
7082 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
7083 '(' '(' Ident ')' ')' |
7084 '__INLINE__' ]
7086 first symbols:inlinetok, attributetok
7088 reachend
7091 static void DefineBuiltinProcedure (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7093 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok))))) != 0)))
7095 /* avoid gcc warning by using compound statement even if not strictly necessary. */
7096 /* seen optional [ | ] expression */
7097 if (mcLexBuf_currenttoken == mcReserved_attributetok)
7099 Expect (mcReserved_attributetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_builtintok-mcReserved_recordtok))));
7100 Expect (mcReserved_builtintok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
7101 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
7102 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7103 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7104 Expect (mcReserved_rparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7105 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
7107 else if (mcLexBuf_currenttoken == mcReserved_inlinetok)
7109 /* avoid dangling else. */
7110 Expect (mcReserved_inlinetok, stopset0, stopset1, stopset2);
7112 else
7114 /* avoid dangling else. */
7115 ErrorArray ((const char *) "expecting one of: __INLINE__ __ATTRIBUTE__", 42);
7118 /* end of optional [ | ] expression */
7123 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
7124 ( ProcedureIdent [ FormalParameters ]
7125 AttributeNoReturn )
7127 first symbols:proceduretok
7129 cannot reachend
7132 static void ProcedureHeading (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7134 Expect (mcReserved_proceduretok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_attributetok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7135 DefineBuiltinProcedure (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7136 ProcedureIdent (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7137 if (mcLexBuf_currenttoken == mcReserved_lparatok)
7139 FormalParameters (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7141 AttributeNoReturn (stopset0, stopset1, stopset2);
7146 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
7148 first symbols:inlinetok, builtintok
7150 reachend
7153 static void Builtin (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7155 if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_builtintok-mcReserved_recordtok))))) != 0)))
7157 /* avoid gcc warning by using compound statement even if not strictly necessary. */
7158 /* seen optional [ | ] expression */
7159 if (mcLexBuf_currenttoken == mcReserved_builtintok)
7161 Expect (mcReserved_builtintok, stopset0, stopset1, stopset2);
7163 else if (mcLexBuf_currenttoken == mcReserved_inlinetok)
7165 /* avoid dangling else. */
7166 Expect (mcReserved_inlinetok, stopset0, stopset1, stopset2);
7168 else
7170 /* avoid dangling else. */
7171 ErrorArray ((const char *) "expecting one of: __INLINE__ __BUILTIN__", 40);
7174 /* end of optional [ | ] expression */
7179 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
7180 [ DefFormalParameters ]
7181 AttributeNoReturn )
7183 first symbols:proceduretok
7185 cannot reachend
7188 static void DefProcedureHeading (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7190 Expect (mcReserved_proceduretok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_inlinetok-mcReserved_recordtok)) | (1 << (mcReserved_builtintok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7191 Builtin (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7192 DefProcedureIdent (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7193 if (mcLexBuf_currenttoken == mcReserved_lparatok)
7195 DefFormalParameters (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7197 AttributeNoReturn (stopset0, stopset1, stopset2);
7202 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
7203 'END'
7205 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
7207 cannot reachend
7210 static void ProcedureBlock (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7212 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_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)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
7214 Declaration (stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7216 /* while */
7217 if (mcLexBuf_currenttoken == mcReserved_begintok)
7219 Expect (mcReserved_begintok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7220 ProcedureBlockBody (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
7222 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
7227 Block := { Declaration } InitialBlock FinalBlock
7228 'END'
7230 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
7232 cannot reachend
7235 static void Block (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7237 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_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)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
7239 Declaration (stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7241 /* while */
7242 InitialBlock (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_finallytok-mcReserved_arraytok))), stopset2);
7243 FinalBlock (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok))), stopset2);
7244 Expect (mcReserved_endtok, stopset0, stopset1, stopset2);
7249 InitialBlock := [ 'BEGIN' InitialBlockBody ]
7251 first symbols:begintok
7253 reachend
7256 static void InitialBlock (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7258 if (mcLexBuf_currenttoken == mcReserved_begintok)
7260 Expect (mcReserved_begintok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7261 InitialBlockBody (stopset0, stopset1, stopset2);
7267 FinalBlock := [ 'FINALLY' FinalBlockBody ]
7269 first symbols:finallytok
7271 reachend
7274 static void FinalBlock (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7276 if (mcLexBuf_currenttoken == mcReserved_finallytok)
7278 Expect (mcReserved_finallytok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_returntok-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)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
7279 FinalBlockBody (stopset0, stopset1, stopset2);
7285 InitialBlockBody := NormalPart
7286 % putBegin (curmodule, popStmt ()) %
7287 [ 'EXCEPT' ExceptionalPart ]
7289 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
7291 reachend
7294 static void InitialBlockBody (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7296 NormalPart (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
7297 decl_putBegin (curmodule, popStmt ());
7298 if (mcLexBuf_currenttoken == mcReserved_excepttok)
7300 Expect (mcReserved_excepttok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_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))));
7301 ExceptionalPart (stopset0, stopset1, stopset2);
7307 FinalBlockBody := NormalPart
7308 % putFinally (curmodule, popStmt ()) %
7309 [ 'EXCEPT' ExceptionalPart ]
7311 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
7313 reachend
7316 static void FinalBlockBody (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7318 NormalPart (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
7319 decl_putFinally (curmodule, popStmt ());
7320 if (mcLexBuf_currenttoken == mcReserved_excepttok)
7322 Expect (mcReserved_excepttok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_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))));
7323 ExceptionalPart (stopset0, stopset1, stopset2);
7329 ProcedureBlockBody := ProcedureNormalPart [ 'EXCEPT'
7330 ExceptionalPart ]
7332 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
7334 reachend
7337 static void ProcedureBlockBody (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7339 ProcedureNormalPart (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_excepttok-mcReserved_arraytok))), stopset2);
7340 if (mcLexBuf_currenttoken == mcReserved_excepttok)
7342 Expect (mcReserved_excepttok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_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))));
7343 ExceptionalPart (stopset0, stopset1, stopset2);
7349 ProcedureNormalPart := StatementSequence
7350 % putBegin (curproc, popStmt ()) %
7353 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok, semicolontok
7355 reachend
7358 static void ProcedureNormalPart (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7360 StatementSequence (stopset0, stopset1, stopset2);
7361 decl_putBegin (curproc, popStmt ());
7366 NormalPart := StatementSequence
7368 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok, semicolontok
7370 reachend
7373 static void NormalPart (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7375 StatementSequence (stopset0, stopset1, stopset2);
7380 ExceptionalPart := StatementSequence
7382 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok, semicolontok
7384 reachend
7387 static void ExceptionalPart (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7389 StatementSequence (stopset0, stopset1, stopset2);
7394 Declaration := 'CONST' { ConstantDeclaration ';' } |
7395 'TYPE' { TypeDeclaration } |
7396 'VAR' { VariableDeclaration ';' } |
7397 ProcedureDeclaration ';' |
7398 ModuleDeclaration ';'
7400 first symbols:moduletok, proceduretok, vartok, typetok, consttok
7402 cannot reachend
7405 static void Declaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7407 if (mcLexBuf_currenttoken == mcReserved_consttok)
7409 Expect (mcReserved_consttok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7410 while (mcLexBuf_currenttoken == mcReserved_identtok)
7412 ConstantDeclaration (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7413 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7415 /* while */
7417 else if (mcLexBuf_currenttoken == mcReserved_typetok)
7419 /* avoid dangling else. */
7420 Expect (mcReserved_typetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7421 while (mcLexBuf_currenttoken == mcReserved_identtok)
7423 TypeDeclaration (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7425 /* while */
7427 else if (mcLexBuf_currenttoken == mcReserved_vartok)
7429 /* avoid dangling else. */
7430 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7431 while (mcLexBuf_currenttoken == mcReserved_identtok)
7433 VariableDeclaration (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7434 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7436 /* while */
7438 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
7440 /* avoid dangling else. */
7441 ProcedureDeclaration (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7442 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7444 else if (mcLexBuf_currenttoken == mcReserved_moduletok)
7446 /* avoid dangling else. */
7447 ModuleDeclaration (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7448 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7450 else
7452 /* avoid dangling else. */
7453 ErrorArray ((const char *) "expecting one of: MODULE PROCEDURE VAR TYPE CONST", 49);
7459 DefFormalParameters := '('
7460 % paramEnter (curproc) %
7461 [ DefMultiFPSection ] ')'
7463 % paramLeave (curproc) %
7464 FormalReturn
7466 first symbols:lparatok
7468 cannot reachend
7471 static void DefFormalParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7473 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7474 decl_paramEnter (curproc);
7475 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
7477 DefMultiFPSection (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7479 Expect (mcReserved_rparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7480 decl_paramLeave (curproc);
7481 FormalReturn (stopset0, stopset1, stopset2);
7486 AttributeNoReturn := [ '' ]
7488 first symbols:ldirectivetok
7490 reachend
7493 static void AttributeNoReturn (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7495 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
7497 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7498 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7499 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
7505 AttributeUnused := [ '' ]
7507 first symbols:ldirectivetok
7509 reachend
7512 static void AttributeUnused (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7514 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
7516 Expect (mcReserved_ldirectivetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7517 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rdirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7518 Expect (mcReserved_rdirectivetok, stopset0, stopset1, stopset2);
7524 DefMultiFPSection := DefExtendedFP |
7525 FPSection [ ';' DefMultiFPSection ]
7527 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
7529 cannot reachend
7532 static void DefMultiFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7534 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok))
7536 DefExtendedFP (stopset0, stopset1, stopset2);
7538 else if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0)))
7540 /* avoid dangling else. */
7541 FPSection (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7542 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
7544 Expect (mcReserved_semicolontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7545 DefMultiFPSection (stopset0, stopset1, stopset2);
7548 else
7550 /* avoid dangling else. */
7551 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
7557 FormalParameters := '('
7558 % paramEnter (curproc) %
7559 [ MultiFPSection ] ')'
7560 % paramLeave (curproc) %
7561 FormalReturn
7563 first symbols:lparatok
7565 cannot reachend
7568 static void FormalParameters (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7570 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7571 decl_paramEnter (curproc);
7572 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))))) != 0))))
7574 MultiFPSection (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
7576 Expect (mcReserved_rparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7577 decl_paramLeave (curproc);
7578 FormalReturn (stopset0, stopset1, stopset2);
7583 MultiFPSection := ExtendedFP | FPSection [ ';'
7584 MultiFPSection ]
7586 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
7588 cannot reachend
7591 static void MultiFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7593 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok))
7595 ExtendedFP (stopset0, stopset1, stopset2);
7597 else if ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0)))
7599 /* avoid dangling else. */
7600 FPSection (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7601 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
7603 Expect (mcReserved_semicolontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_periodperiodperiodtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7604 MultiFPSection (stopset0, stopset1, stopset2);
7607 else
7609 /* avoid dangling else. */
7610 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
7616 FPSection := NonVarFPSection |
7617 VarFPSection
7619 first symbols:vartok, identtok
7621 cannot reachend
7624 static void FPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7626 if (mcLexBuf_currenttoken == mcReserved_identtok)
7628 NonVarFPSection (stopset0, stopset1, stopset2);
7630 else if (mcLexBuf_currenttoken == mcReserved_vartok)
7632 /* avoid dangling else. */
7633 VarFPSection (stopset0, stopset1, stopset2);
7635 else
7637 /* avoid dangling else. */
7638 ErrorArray ((const char *) "expecting one of: VAR identifier", 32);
7644 DefExtendedFP := DefOptArg | '...'
7646 first symbols:lsbratok, periodperiodperiodtok
7648 cannot reachend
7651 static void DefExtendedFP (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7653 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7655 DefOptArg (stopset0, stopset1, stopset2);
7657 else if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
7659 /* avoid dangling else. */
7660 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
7662 else
7664 /* avoid dangling else. */
7665 ErrorArray ((const char *) "expecting one of: ... [", 23);
7671 ExtendedFP := OptArg | '...'
7673 first symbols:lsbratok, periodperiodperiodtok
7675 cannot reachend
7678 static void ExtendedFP (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7680 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7682 OptArg (stopset0, stopset1, stopset2);
7684 else if (mcLexBuf_currenttoken == mcReserved_periodperiodperiodtok)
7686 /* avoid dangling else. */
7687 Expect (mcReserved_periodperiodperiodtok, stopset0, stopset1, stopset2);
7689 else
7691 /* avoid dangling else. */
7692 ErrorArray ((const char *) "expecting one of: ... [", 23);
7698 VarFPSection := 'VAR' IdentList ':' FormalType [
7699 AttributeUnused ]
7701 first symbols:vartok
7703 cannot reachend
7706 static void VarFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7708 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7709 IdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7710 Expect (mcReserved_colontok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7711 FormalType (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7712 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
7714 AttributeUnused (stopset0, stopset1, stopset2);
7720 NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
7722 first symbols:identtok
7724 cannot reachend
7727 static void NonVarFPSection (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7729 IdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7730 Expect (mcReserved_colontok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7731 FormalType (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok))), stopset1, stopset2);
7732 if (mcLexBuf_currenttoken == mcReserved_ldirectivetok)
7734 AttributeUnused (stopset0, stopset1, stopset2);
7740 OptArg := '[' Ident ':' FormalType [ '=' ConstExpressionNop ]
7743 first symbols:lsbratok
7745 cannot reachend
7748 static void OptArg (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7750 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7751 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7752 Expect (mcReserved_colontok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7753 FormalType (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok)) | (1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7754 if (mcLexBuf_currenttoken == mcReserved_equaltok)
7756 Expect (mcReserved_equaltok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
7757 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7759 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
7764 DefOptArg := '[' Ident ':' FormalType '=' ConstExpressionNop
7767 first symbols:lsbratok
7769 cannot reachend
7772 static void DefOptArg (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7774 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7775 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
7776 Expect (mcReserved_colontok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7777 FormalType (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
7778 Expect (mcReserved_equaltok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
7779 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7780 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
7785 FormalType := { 'ARRAY' 'OF' } Qualident
7787 first symbols:identtok, arraytok
7789 cannot reachend
7792 static void FormalType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7794 while (mcLexBuf_currenttoken == mcReserved_arraytok)
7796 Expect (mcReserved_arraytok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_oftok-mcReserved_arraytok))), stopset2);
7797 Expect (mcReserved_oftok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_arraytok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7799 /* while */
7800 Qualident (stopset0, stopset1, stopset2);
7805 ModuleDeclaration := 'MODULE' Ident [ Priority ]
7806 ';' { Import } [ Export ]
7807 Block Ident
7809 first symbols:moduletok
7811 cannot reachend
7814 static void ModuleDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7816 Expect (mcReserved_moduletok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7817 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
7818 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
7820 Priority (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7822 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
7823 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
7825 Import (stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
7827 /* while */
7828 if (mcLexBuf_currenttoken == mcReserved_exporttok)
7830 Export (stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
7832 Block (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7833 Ident (stopset0, stopset1, stopset2);
7838 Priority := '[' ConstExpressionNop ']'
7840 first symbols:lsbratok
7842 cannot reachend
7845 static void Priority (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7847 Expect (mcReserved_lsbratok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_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))));
7848 ConstExpressionNop (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
7849 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
7854 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
7855 'UNQUALIFIED' IdentList |
7856 IdentList ) ';'
7858 first symbols:exporttok
7860 cannot reachend
7863 static void Export (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7865 Expect (mcReserved_exporttok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_qualifiedtok-mcReserved_arraytok)) | (1 << (mcReserved_unqualifiedtok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7866 if (mcLexBuf_currenttoken == mcReserved_qualifiedtok)
7868 Expect (mcReserved_qualifiedtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7869 IdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7871 else if (mcLexBuf_currenttoken == mcReserved_unqualifiedtok)
7873 /* avoid dangling else. */
7874 Expect (mcReserved_unqualifiedtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7875 IdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7877 else if (mcLexBuf_currenttoken == mcReserved_identtok)
7879 /* avoid dangling else. */
7880 IdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7882 else
7884 /* avoid dangling else. */
7885 ErrorArray ((const char *) "expecting one of: identifier UNQUALIFIED QUALIFIED", 50);
7887 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7892 FromIdentList := Ident { ',' Ident }
7894 first symbols:identtok
7896 cannot reachend
7899 static void FromIdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7901 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7902 while (mcLexBuf_currenttoken == mcReserved_commatok)
7904 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7905 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7907 /* while */
7912 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
7915 first symbols:fromtok
7917 cannot reachend
7920 static void FromImport (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7922 Expect (mcReserved_fromtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7923 Ident (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_importtok-mcReserved_arraytok))), stopset2);
7924 Expect (mcReserved_importtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7925 FromIdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7926 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7931 ImportModuleList := Ident { ',' Ident }
7933 first symbols:identtok
7935 cannot reachend
7938 static void ImportModuleList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7940 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7941 while (mcLexBuf_currenttoken == mcReserved_commatok)
7943 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7944 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
7946 /* while */
7951 WithoutFromImport := 'IMPORT' ImportModuleList ';'
7953 first symbols:importtok
7955 cannot reachend
7958 static void WithoutFromImport (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7960 Expect (mcReserved_importtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
7961 ImportModuleList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
7962 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
7967 Import := FromImport | WithoutFromImport
7969 first symbols:importtok, fromtok
7971 cannot reachend
7974 static void Import (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
7976 if (mcLexBuf_currenttoken == mcReserved_fromtok)
7978 FromImport (stopset0, stopset1, stopset2);
7980 else if (mcLexBuf_currenttoken == mcReserved_importtok)
7982 /* avoid dangling else. */
7983 WithoutFromImport (stopset0, stopset1, stopset2);
7985 else
7987 /* avoid dangling else. */
7988 ErrorArray ((const char *) "expecting one of: IMPORT FROM", 29);
7994 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
7995 string ]
7996 Ident ';'
7997 % curmodule := lookupDef (curident) %
7999 % enterScope (curmodule) %
8000 { Import } [ Export ] { Definition }
8001 'END' Ident '.'
8002 % checkEndName (curmodule, curident, 'definition module') %
8004 % leaveScope %
8007 first symbols:definitiontok
8009 cannot reachend
8012 static void DefinitionModule (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8014 Expect (mcReserved_definitiontok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_moduletok-mcReserved_arraytok))), stopset2);
8015 Expect (mcReserved_moduletok, stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_fortok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8016 if (mcLexBuf_currenttoken == mcReserved_fortok)
8018 Expect (mcReserved_fortok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8019 string (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8021 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
8022 Expect (mcReserved_semicolontok, stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_vartok-mcReserved_recordtok)) | (1 << (mcReserved_typetok-mcReserved_recordtok))));
8023 curmodule = decl_lookupDef (curident);
8024 decl_enterScope (curmodule);
8025 while (((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_fromtok-mcReserved_arraytok)) | (1 << (mcReserved_importtok-mcReserved_arraytok))))) != 0)))
8027 Import (stopset0, stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
8029 /* while */
8030 if (mcLexBuf_currenttoken == mcReserved_exporttok)
8032 Export (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
8034 while ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))))) != 0))) || ((mcLexBuf_currenttoken >= mcReserved_recordtok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_recordtok)) & ((mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))))) != 0))))
8036 Definition (stopset0, stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_endtok-mcReserved_arraytok)) | (1 << (mcReserved_consttok-mcReserved_arraytok)) | (1 << (mcReserved_proceduretok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_typetok-mcReserved_recordtok)) | (1 << (mcReserved_vartok-mcReserved_recordtok))));
8038 /* while */
8039 Expect (mcReserved_endtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8040 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
8041 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2);
8042 checkEndName (curmodule, curident, (const char *) "definition module", 17);
8043 decl_leaveScope ();
8048 PushQualident :=
8049 % VAR type, field: node ; %
8050 Ident
8051 % qualid := push (lookupWithSym (curident)) %
8053 % IF qualid = NIL
8054 THEN
8055 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
8056 END %
8057 [ '.'
8058 % IF NOT isQualident (qualid)
8059 THEN
8060 ErrorArray ('the first component of this qualident must be a definition module or a parameter/variable/constant which has record type')
8061 END %
8062 Ident
8063 % IF isDef (qualid)
8064 THEN
8065 qualid := replace (lookupInScope (qualid, curident))
8066 ELSE
8067 type := skipType (getType (qualid)) ;
8068 field := lookupInScope (type, curident) ;
8069 IF field = NIL
8070 THEN
8071 metaError2 ('field {%1k} cannot be found in {%2ad}', curident, qualid)
8072 ELSE
8073 qualid := replace (makeComponentRef (qualid, field))
8075 END ;
8076 IF qualid = NIL
8077 THEN
8078 metaError1 ('qualified component of the identifier {%1k} cannot be found', curident)
8079 END %
8082 first symbols:identtok
8084 cannot reachend
8087 static void PushQualident (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8089 decl_node type;
8090 decl_node field;
8092 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_periodtok-mcReserved_eoftok))), stopset1, stopset2);
8093 qualid = push (lookupWithSym (curident));
8094 if (qualid == NULL)
8096 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));
8098 if (mcLexBuf_currenttoken == mcReserved_periodtok)
8100 Expect (mcReserved_periodtok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8101 if (! (isQualident (qualid)))
8103 ErrorArray ((const char *) "the first component of this qualident must be a definition module or a parameter/variable/constant which has record type", 120);
8105 Ident (stopset0, stopset1, stopset2);
8106 if (decl_isDef (qualid))
8108 qualid = replace (decl_lookupInScope (qualid, curident));
8110 else
8112 type = decl_skipType (decl_getType (qualid));
8113 field = decl_lookupInScope (type, curident);
8114 if (field == NULL)
8116 mcMetaError_metaError2 ((const char *) "field {%1k} cannot be found in {%2ad}", 37, (const unsigned char *) &curident, (sizeof (curident)-1), (const unsigned char *) &qualid, (sizeof (qualid)-1));
8118 else
8120 qualid = replace (decl_makeComponentRef (qualid, field));
8123 if (qualid == NULL)
8125 mcMetaError_metaError1 ((const char *) "qualified component of the identifier {%1k} cannot be found", 59, (const unsigned char *) &curident, (sizeof (curident)-1));
8132 OptSubrange := [ SubrangeType ]
8134 first symbols:lsbratok
8136 reachend
8139 static void OptSubrange (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8141 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
8143 SubrangeType (stopset0, stopset1, stopset2);
8149 TypeEquiv := Qualident OptSubrange
8151 first symbols:identtok
8153 cannot reachend
8156 static void TypeEquiv (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8158 Qualident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2);
8159 OptSubrange (stopset0, stopset1, stopset2);
8164 EnumIdentList := Ident { ',' Ident }
8166 first symbols:identtok
8168 cannot reachend
8171 static void EnumIdentList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8173 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
8174 while (mcLexBuf_currenttoken == mcReserved_commatok)
8176 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8177 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
8179 /* while */
8184 Enumeration := '(' EnumIdentList ')'
8186 first symbols:lparatok
8188 cannot reachend
8191 static void Enumeration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8193 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8194 EnumIdentList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
8195 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
8200 SimpleType := TypeEquiv | Enumeration |
8201 SubrangeType
8203 first symbols:lsbratok, lparatok, identtok
8205 cannot reachend
8208 static void SimpleType (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8210 if (mcLexBuf_currenttoken == mcReserved_identtok)
8212 TypeEquiv (stopset0, stopset1, stopset2);
8214 else if (mcLexBuf_currenttoken == mcReserved_lparatok)
8216 /* avoid dangling else. */
8217 Enumeration (stopset0, stopset1, stopset2);
8219 else if (mcLexBuf_currenttoken == mcReserved_lsbratok)
8221 /* avoid dangling else. */
8222 SubrangeType (stopset0, stopset1, stopset2);
8224 else
8226 /* avoid dangling else. */
8227 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
8233 Type := SimpleType | ArrayType | RecordType |
8234 SetType | PointerType | ProcedureType
8236 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
8238 cannot reachend
8241 static void Type (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8243 if (((mcLexBuf_currenttoken < mcReserved_arraytok) && ((((1 << (mcLexBuf_currenttoken-mcReserved_eoftok)) & ((mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_identtok))
8245 SimpleType (stopset0, stopset1, stopset2);
8247 else if (mcLexBuf_currenttoken == mcReserved_arraytok)
8249 /* avoid dangling else. */
8250 ArrayType (stopset0, stopset1, stopset2);
8252 else if (mcLexBuf_currenttoken == mcReserved_recordtok)
8254 /* avoid dangling else. */
8255 RecordType (stopset0, stopset1, stopset2);
8257 else if ((((mcLexBuf_currenttoken >= mcReserved_arraytok) && (mcLexBuf_currenttoken < mcReserved_recordtok)) && ((((1 << (mcLexBuf_currenttoken-mcReserved_arraytok)) & ((mcp5_SetOfStop1) ((1 << (mcReserved_packedsettok-mcReserved_arraytok)) | (1 << (mcReserved_oftok-mcReserved_arraytok))))) != 0))) || (mcLexBuf_currenttoken == mcReserved_settok))
8259 /* avoid dangling else. */
8260 SetType (stopset0, stopset1, stopset2);
8262 else if (mcLexBuf_currenttoken == mcReserved_pointertok)
8264 /* avoid dangling else. */
8265 PointerType (stopset0, stopset1, stopset2);
8267 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
8269 /* avoid dangling else. */
8270 ProcedureType (stopset0, stopset1, stopset2);
8272 else
8274 /* avoid dangling else. */
8275 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
8281 TypeDeclaration := { Ident ( ';' | '=' Type Alignment
8282 ';' ) }
8284 first symbols:identtok
8286 reachend
8289 static void TypeDeclaration (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8291 while (mcLexBuf_currenttoken == mcReserved_identtok)
8293 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok)) | (1 << (mcReserved_equaltok-mcReserved_eoftok))), stopset1, stopset2);
8294 if (mcLexBuf_currenttoken == mcReserved_semicolontok)
8296 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8298 else if (mcLexBuf_currenttoken == mcReserved_equaltok)
8300 /* avoid dangling else. */
8301 Expect (mcReserved_equaltok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1|(mcp5_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|(mcp5_SetOfStop2) ((1 << (mcReserved_settok-mcReserved_recordtok)) | (1 << (mcReserved_recordtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
8302 Type (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_ldirectivetok-mcReserved_eoftok)) | (1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
8303 Alignment (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
8304 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8306 else
8308 /* avoid dangling else. */
8309 ErrorArray ((const char *) "expecting one of: = ;", 21);
8312 /* while */
8317 Definition := 'CONST' { ConstantDeclaration ';' } |
8318 'TYPE' { TypeDeclaration } |
8319 'VAR' { VariableDeclaration ';' } |
8320 DefProcedureHeading ';'
8322 first symbols:proceduretok, vartok, typetok, consttok
8324 cannot reachend
8327 static void Definition (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8329 if (mcLexBuf_currenttoken == mcReserved_consttok)
8331 Expect (mcReserved_consttok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8332 while (mcLexBuf_currenttoken == mcReserved_identtok)
8334 ConstantDeclaration (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
8335 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8337 /* while */
8339 else if (mcLexBuf_currenttoken == mcReserved_typetok)
8341 /* avoid dangling else. */
8342 Expect (mcReserved_typetok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8343 while (mcLexBuf_currenttoken == mcReserved_identtok)
8345 TypeDeclaration (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8347 /* while */
8349 else if (mcLexBuf_currenttoken == mcReserved_vartok)
8351 /* avoid dangling else. */
8352 Expect (mcReserved_vartok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8353 while (mcLexBuf_currenttoken == mcReserved_identtok)
8355 VariableDeclaration (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
8356 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8358 /* while */
8360 else if (mcLexBuf_currenttoken == mcReserved_proceduretok)
8362 /* avoid dangling else. */
8363 DefProcedureHeading (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_semicolontok-mcReserved_eoftok))), stopset1, stopset2);
8364 Expect (mcReserved_semicolontok, stopset0, stopset1, stopset2);
8366 else
8368 /* avoid dangling else. */
8369 ErrorArray ((const char *) "expecting one of: PROCEDURE VAR TYPE CONST", 42);
8375 AsmStatement :=
8376 % VAR s: node ; %
8378 % s := pushStmt (makeComment ("asm")) %
8379 'ASM' [ 'VOLATILE' ] '(' AsmOperands
8382 first symbols:asmtok
8384 cannot reachend
8387 static void AsmStatement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8389 decl_node s;
8391 s = pushStmt (decl_makeComment ((const char *) "asm", 3));
8392 Expect (mcReserved_asmtok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_volatiletok-mcReserved_recordtok))));
8393 if (mcLexBuf_currenttoken == mcReserved_volatiletok)
8395 Expect (mcReserved_volatiletok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
8397 Expect (mcReserved_lparatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8398 AsmOperands (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
8399 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
8404 AsmOperands := string [ AsmOperandSpec ]
8406 first symbols:stringtok
8408 cannot reachend
8411 static void AsmOperands (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8413 string (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
8414 if (mcLexBuf_currenttoken == mcReserved_colontok)
8416 AsmOperandSpec (stopset0, stopset1, stopset2);
8422 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
8423 ':' TrashList ] ] ]
8425 first symbols:colontok
8427 reachend
8430 static void AsmOperandSpec (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8432 if (mcLexBuf_currenttoken == mcReserved_colontok)
8434 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8435 AsmList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
8436 if (mcLexBuf_currenttoken == mcReserved_colontok)
8438 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok)) | (1 << (mcReserved_commatok-mcReserved_eoftok)) | (1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8439 AsmList (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_colontok-mcReserved_eoftok))), stopset1, stopset2);
8440 if (mcLexBuf_currenttoken == mcReserved_colontok)
8442 Expect (mcReserved_colontok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8443 TrashList (stopset0, stopset1, stopset2);
8451 AsmList := [ AsmElement ] { ',' AsmElement }
8453 first symbols:lsbratok, stringtok, commatok
8455 reachend
8458 static void AsmList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8460 if ((mcLexBuf_currenttoken == mcReserved_lsbratok) || (mcLexBuf_currenttoken == mcReserved_stringtok))
8462 AsmElement (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
8464 while (mcLexBuf_currenttoken == mcReserved_commatok)
8466 Expect (mcReserved_commatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lsbratok-mcReserved_eoftok))), stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8467 AsmElement (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
8469 /* while */
8474 NamedOperand := '[' Ident ']'
8476 first symbols:lsbratok
8478 cannot reachend
8481 static void NamedOperand (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8483 Expect (mcReserved_lsbratok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_identtok-mcReserved_recordtok))));
8484 Ident (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rsbratok-mcReserved_eoftok))), stopset1, stopset2);
8485 Expect (mcReserved_rsbratok, stopset0, stopset1, stopset2);
8490 AsmOperandName := [ NamedOperand ]
8492 first symbols:lsbratok
8494 reachend
8497 static void AsmOperandName (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8499 if (mcLexBuf_currenttoken == mcReserved_lsbratok)
8501 NamedOperand (stopset0, stopset1, stopset2);
8507 AsmElement := AsmOperandName string '(' Expression
8510 first symbols:stringtok, lsbratok
8512 cannot reachend
8515 static void AsmElement (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8517 AsmOperandName (stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8518 string (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_lparatok-mcReserved_eoftok))), stopset1, stopset2);
8519 Expect (mcReserved_lparatok, stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_minustok-mcReserved_eoftok)) | (1 << (mcReserved_plustok-mcReserved_eoftok)) | (1 << (mcReserved_lparatok-mcReserved_eoftok)) | (1 << (mcReserved_lcbratok-mcReserved_eoftok))), stopset1|(mcp5_SetOfStop1) ((1 << (mcReserved_nottok-mcReserved_arraytok))), stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok)) | (1 << (mcReserved_integertok-mcReserved_recordtok)) | (1 << (mcReserved_realtok-mcReserved_recordtok)) | (1 << (mcReserved_identtok-mcReserved_recordtok))));
8520 Expression (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_rparatok-mcReserved_eoftok))), stopset1, stopset2);
8521 Expect (mcReserved_rparatok, stopset0, stopset1, stopset2);
8526 TrashList := [ string ] { ',' string }
8528 first symbols:commatok, stringtok
8530 reachend
8533 static void TrashList (mcp5_SetOfStop0 stopset0, mcp5_SetOfStop1 stopset1, mcp5_SetOfStop2 stopset2)
8535 if (mcLexBuf_currenttoken == mcReserved_stringtok)
8537 string (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
8539 while (mcLexBuf_currenttoken == mcReserved_commatok)
8541 Expect (mcReserved_commatok, stopset0, stopset1, stopset2|(mcp5_SetOfStop2) ((1 << (mcReserved_stringtok-mcReserved_recordtok))));
8542 string (stopset0|(mcp5_SetOfStop0) ((1 << (mcReserved_commatok-mcReserved_eoftok))), stopset1, stopset2);
8544 /* while */
8549 CompilationUnit - returns TRUE if the input was correct enough to parse
8550 in future passes.
8553 extern "C" bool mcp5_CompilationUnit (void)
8555 stk = mcStack_init ();
8556 withStk = mcStack_init ();
8557 stmtStk = mcStack_init ();
8558 loopStk = mcStack_init ();
8559 loopNo = 0;
8560 WasNoError = true;
8561 FileUnit ((mcp5_SetOfStop0) ((1 << (mcReserved_eoftok-mcReserved_eoftok))), (mcp5_SetOfStop1) 0, (mcp5_SetOfStop2) 0);
8562 mcStack_kill (&stk);
8563 mcStack_kill (&withStk);
8564 mcStack_kill (&stmtStk);
8565 mcStack_kill (&loopStk);
8566 return WasNoError;
8567 /* static analysis guarentees a RETURN statement will be used before here. */
8568 __builtin_unreachable ();
8571 extern "C" void _M2_mcp5_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
8575 extern "C" void _M2_mcp5_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])