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)
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/>. */
26 # if !defined (PROC_D)
28 typedef void (*PROC_t
) (void);
29 typedef struct { PROC_t proc
; } PROC
;
40 #if defined(__cplusplus)
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"
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
93 extern "C" bool mcp5_CompilationUnit (void);
99 static void followNode (decl_node n
);
105 static decl_node
push (decl_node n
);
111 static decl_node
pop (void);
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);
135 static void checkDuplicate (bool b
);
138 isQualident - returns TRUE if, n, is a qualident.
141 static bool isQualident (decl_node n
);
147 static void startWith (decl_node n
);
153 static void endWith (void);
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
);
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
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
257 static void SyntaxError (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
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
);
281 static bool CheckAndInsert (mcReserved_toktype t
, mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
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
);
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
);
315 static void string (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
321 static void Integer (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
327 static void Real (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
330 FileUnit := DefinitionModule |
331 ImplementationOrProgramModule
333 first symbols:implementationtok, moduletok, definitiontok
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
351 % checkEndName (curmodule, curident, 'program module') %
356 first symbols:moduletok
361 static void ProgramModule (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
364 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
366 % curmodule := lookupImp (curident) %
368 % addCommentBody (curmodule) %
370 % enterScope (lookupDef (curident)) %
372 % enterScope (curmodule) %
374 % resetConstExpPos (curmodule) %
375 [ Priority ] ';' { Import }
377 % checkEndName (curmodule, curident, 'implementation module') %
379 % leaveScope ; leaveScope %
382 first symbols:implementationtok
387 static void ImplementationModule (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
390 ImplementationOrProgramModule := ImplementationModule |
393 first symbols:moduletok, implementationtok
398 static void ImplementationOrProgramModule (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
401 ConstInteger := Integer
407 first symbols:integertok
412 static void ConstInteger (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
421 first symbols:realtok
426 static void ConstReal (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
429 ConstNumber := ConstInteger | ConstReal
431 first symbols:realtok, integertok
436 static void ConstNumber (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
439 Number := Integer | Real
441 first symbols:realtok, integertok
446 static void Number (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
449 Qualident := Ident { '.' Ident }
451 first symbols:identtok
456 static void Qualident (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
459 ConstantDeclaration := Ident '=' ConstExpressionNop
461 first symbols:identtok
466 static void ConstantDeclaration (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
469 ConstExpressionNop :=
472 % c := getNextConstExp () %
473 SimpleConstExpr [ Relation
476 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
481 static void ConstExpressionNop (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
487 % c := push (getNextConstExp ()) %
488 SimpleConstExpr [ Relation SimpleConstExpr ]
490 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
495 static void ConstExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
498 Relation := '=' | '#' | '<>' | '<' | '<=' |
501 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
506 static void Relation (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
509 SimpleConstExpr := UnaryOrConstTerm { AddOperator
512 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
517 static void SimpleConstExpr (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
520 UnaryOrConstTerm := '+' ConstTerm |
524 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
529 static void UnaryOrConstTerm (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
532 AddOperator := '+' | '-' | 'OR'
534 first symbols:ortok, minustok, plustok
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
549 static void ConstTerm (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
552 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
555 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
560 static void MulOperator (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
563 NotConstFactor := 'NOT' ConstFactor
566 % n := push (makeUnaryTok (nottok, pop ())) %
574 static void NotConstFactor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
577 ConstFactor := ConstNumber | ConstString |
578 ConstSetOrQualidentOrFunction |
579 '(' ConstExpressionNop ')' |
583 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
588 static void ConstFactor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
591 ConstString := string
593 first symbols:stringtok
598 static void ConstString (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
601 ConstComponentElement := ConstExpressionNop [ '..'
604 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
609 static void ConstComponentElement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
612 ConstComponentValue := ConstComponentElement [ 'BY'
615 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
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
631 static void ConstArraySetRecordValue (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
634 ConstConstructor := '{' [ ConstArraySetRecordValue ]
637 first symbols:lcbratok
642 static void ConstConstructor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
645 ConstSetOrQualidentOrFunction := Qualident [ ConstConstructor |
646 ConstActualParameters ] |
649 first symbols:lcbratok, identtok
654 static void ConstSetOrQualidentOrFunction (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
657 ConstActualParameters := '(' [ ConstExpList ] ')'
659 first symbols:lparatok
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
674 static void ConstExpList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
677 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
678 '(' '(' ConstAttributeExpression
681 first symbols:attributetok
686 static void ConstAttribute (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
689 ConstAttributeExpression := Ident | '<' Qualident
692 first symbols:lesstok, identtok
697 static void ConstAttributeExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
702 first symbols:ldirectivetok
707 static void ByteAlignment (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
710 OptAlignmentExpression := [ AlignmentExpression ]
712 first symbols:lparatok
717 static void OptAlignmentExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
720 AlignmentExpression := '(' ConstExpressionNop ')'
722 first symbols:lparatok
727 static void AlignmentExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
730 Alignment := [ ByteAlignment ]
732 first symbols:ldirectivetok
737 static void Alignment (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
740 IdentList := Ident { ',' Ident }
742 first symbols:identtok
747 static void IdentList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
750 SubrangeType := '[' ConstExpressionNop '..' ConstExpressionNop
753 first symbols:lsbratok
758 static void SubrangeType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
761 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
764 first symbols:arraytok
769 static void ArrayType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
772 RecordType := 'RECORD' [ DefaultRecordAttributes ]
773 FieldListSequence 'END'
775 first symbols:recordtok
780 static void RecordType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
783 DefaultRecordAttributes := ''
785 first symbols:ldirectivetok
790 static void DefaultRecordAttributes (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
793 RecordFieldPragma := [ '' ]
795 first symbols:ldirectivetok
800 static void RecordFieldPragma (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
803 FieldPragmaExpression := Ident PragmaConstExpression
805 first symbols:identtok
810 static void FieldPragmaExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
813 PragmaConstExpression := [ '(' ConstExpressionNop
816 first symbols:lparatok
821 static void PragmaConstExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
824 AttributeExpression := Ident '(' ConstExpressionNop
827 first symbols:identtok
832 static void AttributeExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
835 FieldListSequence := FieldListStatement { ';' FieldListStatement }
837 first symbols:casetok, identtok, semicolontok
842 static void FieldListSequence (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
845 FieldListStatement := [ FieldList ]
847 first symbols:identtok, casetok
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
864 static void FieldList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
868 % curident := NulName %
871 first symbols:identtok
876 static void TagIdent (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
879 CaseTag := TagIdent [ ':' Qualident ]
881 first symbols:colontok, identtok
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
896 static void Varient (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
899 VarientCaseLabelList := VarientCaseLabels { ','
902 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
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
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
927 static void SetType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
930 PointerType := 'POINTER' 'TO' Type
932 first symbols:pointertok
937 static void PointerType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
940 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
942 first symbols:proceduretok
947 static void ProcedureType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
950 FormalTypeList := '(' ( ')' FormalReturn |
951 ProcedureParameters ')'
954 first symbols:lparatok
959 static void FormalTypeList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
962 FormalReturn := [ ':' OptReturnType ]
964 first symbols:colontok
969 static void FormalReturn (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
972 OptReturnType := '[' Qualident ']' |
975 first symbols:identtok, lsbratok
980 static void OptReturnType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
983 ProcedureParameters := ProcedureParameter { ','
986 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
991 static void ProcedureParameters (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
994 ProcedureParameter := '...' | 'VAR' FormalType |
997 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
1002 static void ProcedureParameter (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1005 VarIdent := Ident [ '[' ConstExpressionNop ']' ]
1007 first symbols:identtok
1012 static void VarIdent (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1015 VarIdentList := VarIdent { ',' VarIdent }
1017 first symbols:identtok
1022 static void VarIdentList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1025 VariableDeclaration := VarIdentList ':' Type Alignment
1027 first symbols:identtok
1032 static void VariableDeclaration (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1035 Designator := PushQualident { SubDesignator }
1037 first symbols:identtok
1042 static void Designator (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1046 % VAR n, field, type: node ; %
1052 ErrorArray ('no expression found') ;
1057 % type := skipType (getType (n)) %
1059 % IF isRecord (type)
1061 field := lookupInScope (type, curident) ;
1064 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
1066 n := replace (makeComponentRef (n, field))
1069 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
1074 n := replace (makeArrayRef (n, pop ()))
1076 metaError1 ('attempting to access an array but the expression is not an array but a {%1d}', type)
1080 first symbols:uparrowtok, lsbratok, periodtok
1085 static void SubDesignator (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1089 % VAR n, field, type: node ; %
1093 % type := skipType (getType (n)) %
1095 % IF isPointer (type)
1097 type := skipType (getType (type)) ;
1100 field := lookupInScope (type, curident) ;
1103 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
1105 n := replace (makePointerRef (n, field))
1108 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
1111 metaError2 ('trying to dereference {%1k} which was not declared as a pointer but a {%2tad}', n, n)
1114 % IF isPointer (type)
1116 n := replace (makeDeRef (n))
1118 metaError1 ('attempting to dereference a pointer but the expression is not a pointer but a {%1d}', type)
1122 first symbols:uparrowtok
1127 static void SubPointer (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1133 % l := push (makeExpList ()) %
1135 % putExpList (l, pop ()) %
1137 % assert (isExpList (peep ())) %
1139 % putExpList (l, pop ()) %
1141 % assert (isExpList (peep ())) %
1144 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1149 static void ArrayExpList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1153 % VAR p, n: node ; %
1157 % assert (isExpList (p)) %
1159 % putExpList (p, pop ()) %
1161 % assert (isExpList (peep ())) %
1163 % putExpList (p, pop ()) %
1165 % assert (isExpList (peep ())) %
1168 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1173 static void ExpList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1177 % VAR c, l, r: node ; op: toktype ; %
1179 % op := currenttoken %
1185 % r := push (makeBinaryTok (op, l, r)) %
1188 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1193 static void Expression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1197 % VAR op: toktype ; n: node ; %
1199 % op := currenttoken %
1204 % n := push (makeBinaryTok (op, n, pop ())) %
1207 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1212 static void SimpleExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1218 % n := push (makeUnaryTok (plustok, pop ())) %
1220 % n := push (makeUnaryTok (minustok, pop ())) %
1223 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1228 static void UnaryOrTerm (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1232 % VAR op: toktype ; n: node ; %
1234 % op := currenttoken %
1238 % n := push (makeBinaryTok (op, n, pop ())) %
1241 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok
1246 static void Term (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1249 PushString := string
1252 % n := push (makeString (curstring)) %
1255 first symbols:stringtok
1260 static void PushString (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1263 Factor := Number | PushString | SetOrDesignatorOrFunction |
1264 '(' Expression ')' |
1268 % n := push (makeUnaryTok (nottok, pop ())) %
1270 % n := push (makeUnaryTok (nottok, pop ())) %
1273 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1278 static void Factor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1281 ComponentElement := Expression
1282 % VAR l, h, n: node ; %
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
1300 static void ComponentElement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1303 ComponentValue := ComponentElement [ 'BY'
1304 % ErrorArray ('implementation restriction BY not allowed') %
1307 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
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
1322 static void ArraySetRecordValue (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1328 % n := push (makeSetValue ()) %
1329 [ ArraySetRecordValue ] '}'
1331 first symbols:lcbratok
1336 static void Constructor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1339 SetOrDesignatorOrFunction := PushQualident
1340 % VAR q, p, n: node ; %
1346 % n := push (putSetValue (p, q)) %
1353 % p := push (makeFuncCall (q, p)) %
1357 first symbols:identtok, lcbratok
1362 static void SetOrDesignatorOrFunction (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1365 SimpleDes := { SubDesignator }
1367 first symbols:uparrowtok, periodtok, lsbratok
1372 static void SimpleDes (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1375 ActualParameters := '('
1378 % n := push (makeExpList ()) %
1380 % assert (isExpList (peep ())) %
1383 first symbols:lparatok
1388 static void ActualParameters (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1396 ErrorArray ('EXIT can only be used inside a LOOP statement')
1398 n := pushStmt (makeExit (peepLoop (), loopNo))
1402 first symbols:exittok
1407 static void ExitStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
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
1429 static void ReturnStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1432 Statement := ( AssignmentOrProcedureCall |
1433 IfStatement | CaseStatement |
1436 LoopStatement | ForStatement |
1437 WithStatement | AsmStatement |
1438 ExitStatement | ReturnStatement |
1443 % s := pushStmt (NIL) %
1446 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok
1451 static void Statement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1457 % s := pushStmt (makeComment ("retry")) %
1460 first symbols:retrytok
1465 static void RetryStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1468 AssignmentOrProcedureCall :=
1469 % VAR d, a, p: node ; %
1473 % a := pushStmt (makeAssignment (d, pop ())) %
1477 % a := pushStmt (makeFuncCall (d, pop ())) %
1480 % a := pushStmt (makeFuncCall (d, NIL)) %
1482 % addCommentBody (peepStmt ()) %
1484 % addCommentAfter (peepStmt ()) %
1487 first symbols:identtok
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 ())) %
1502 % addStatement (s, popStmt ()) %
1504 % assert (isStatementSequence (peepStmt ())) %
1506 % addStatement (s, popStmt ()) %
1508 % assert (isStatementSequence (peepStmt ())) %
1511 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1516 static void StatementSequence (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1520 % VAR i, a, b: node ; %
1522 % b := makeCommentS (getBodyComment ()) %
1524 % a := makeCommentS (getAfterComment ()) %
1525 'THEN' StatementSequence
1526 % i := pushStmt (makeIf (pop (), popStmt ())) %
1528 % addIfComments (i, b, a) %
1530 % b := makeCommentS (getBodyComment ()) %
1532 % a := makeCommentS (getAfterComment ()) %
1534 % addElseComments (peepStmt (), b, a) %
1536 % i := makeElsif (i, pop (), popStmt ()) %
1537 } [ 'ELSE' StatementSequence
1538 % putElse (i, popStmt ()) %
1540 % b := makeCommentS (getBodyComment ()) %
1542 % a := makeCommentS (getAfterComment ()) %
1544 % assert (isIf (peepStmt ())) %
1546 % addIfEndComments (peepStmt (), b, a) %
1554 static void IfStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1558 % VAR s, e: node ; %
1560 % s := pushStmt (makeCase ()) %
1562 % s := putCaseExpression (s, pop ()) %
1563 'OF' Case { '|' Case } CaseEndStatement
1565 first symbols:casetok
1570 static void CaseStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1576 % c := peepStmt () %
1578 % c := putCaseElse (c, popStmt ()) %
1581 first symbols:elsetok, endtok
1586 static void CaseEndStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1589 Case := [ CaseLabelList ':'
1590 % VAR l, c: node ; %
1594 % c := peepStmt () %
1596 % c := putCaseStatement (c, l, popStmt ()) %
1599 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1604 static void Case (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1610 % l := push (makeCaseList ()) %
1611 CaseLabels { ',' CaseLabels }
1613 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1618 static void CaseLabelList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1622 % VAR lo, hi, l: node ; %
1624 % lo := NIL ; hi := NIL %
1629 [ '..' ConstExpression
1632 % l := putCaseRange (l, lo, hi) %
1635 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1640 static void CaseLabels (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
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) %
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
1674 static void WhileStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1678 % VAR r, s, a, b: node ; %
1680 % r := pushStmt (makeRepeat ()) %
1682 % b := makeCommentS (getBodyComment ()) %
1684 % a := makeCommentS (getAfterComment ()) %
1686 % addRepeatComment (r, b, a) %
1690 % putRepeat (r, s, pop ()) %
1692 % b := makeCommentS (getBodyComment ()) %
1694 % a := makeCommentS (getAfterComment ()) %
1696 % addUntilComment (r, b, a) %
1699 first symbols:repeattok
1704 static void RepeatStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1708 % VAR f, i, s, e, b: node ; %
1712 % f := pushStmt (makeFor ()) %
1714 % i := lookupWithSym (curident) %
1719 [ 'BY' ConstExpression
1721 ] 'DO' StatementSequence
1722 % putFor (f, i, s, e, b, popStmt ()) %
1725 first symbols:fortok
1730 static void ForStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1734 % VAR l, s: node ; %
1736 % l := pushStmt (pushLoop (makeLoop ())) %
1748 % assert (isLoop (peepStmt ())) %
1751 first symbols:looptok
1756 static void LoopStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1759 WithStatement := 'WITH' Designator 'DO'
1760 % startWith (pop ()) %
1761 StatementSequence 'END'
1765 first symbols:withtok
1770 static void WithStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1773 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
1778 first symbols:proceduretok
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
1799 static void ProcedureIdent (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1802 DefProcedureIdent := Ident
1803 % curproc := lookupSym (curident) %
1806 first symbols:identtok
1811 static void DefProcedureIdent (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1814 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
1815 '(' '(' Ident ')' ')' |
1818 first symbols:inlinetok, attributetok
1823 static void DefineBuiltinProcedure (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1826 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
1827 ( ProcedureIdent [ FormalParameters ]
1830 first symbols:proceduretok
1835 static void ProcedureHeading (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1838 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
1840 first symbols:inlinetok, builtintok
1845 static void Builtin (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1848 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
1849 [ DefFormalParameters ]
1852 first symbols:proceduretok
1857 static void DefProcedureHeading (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1860 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
1863 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
1868 static void ProcedureBlock (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1871 Block := { Declaration } InitialBlock FinalBlock
1874 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
1879 static void Block (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1882 InitialBlock := [ 'BEGIN' InitialBlockBody ]
1884 first symbols:begintok
1889 static void InitialBlock (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1892 FinalBlock := [ 'FINALLY' FinalBlockBody ]
1894 first symbols:finallytok
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
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
1923 static void FinalBlockBody (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1926 ProcedureBlockBody := ProcedureNormalPart [ 'EXCEPT'
1929 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
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
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
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
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
1980 static void Declaration (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1983 DefFormalParameters := '('
1984 % paramEnter (curproc) %
1985 [ DefMultiFPSection ] ')'
1987 % paramLeave (curproc) %
1990 first symbols:lparatok
1995 static void DefFormalParameters (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
1998 AttributeNoReturn := [ '' ]
2000 first symbols:ldirectivetok
2005 static void AttributeNoReturn (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2008 AttributeUnused := [ '' ]
2010 first symbols:ldirectivetok
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
2026 static void DefMultiFPSection (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2029 FormalParameters := '('
2030 % paramEnter (curproc) %
2031 [ MultiFPSection ] ')'
2032 % paramLeave (curproc) %
2035 first symbols:lparatok
2040 static void FormalParameters (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2043 MultiFPSection := ExtendedFP | FPSection [ ';'
2046 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
2051 static void MultiFPSection (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2054 FPSection := NonVarFPSection |
2057 first symbols:vartok, identtok
2062 static void FPSection (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2065 DefExtendedFP := DefOptArg | '...'
2067 first symbols:lsbratok, periodperiodperiodtok
2072 static void DefExtendedFP (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2075 ExtendedFP := OptArg | '...'
2077 first symbols:lsbratok, periodperiodperiodtok
2082 static void ExtendedFP (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2085 VarFPSection := 'VAR' IdentList ':' FormalType [
2088 first symbols:vartok
2093 static void VarFPSection (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2096 NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
2098 first symbols:identtok
2103 static void NonVarFPSection (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2106 OptArg := '[' Ident ':' FormalType [ '=' ConstExpressionNop ]
2109 first symbols:lsbratok
2114 static void OptArg (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2117 DefOptArg := '[' Ident ':' FormalType '=' ConstExpressionNop
2120 first symbols:lsbratok
2125 static void DefOptArg (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2128 FormalType := { 'ARRAY' 'OF' } Qualident
2130 first symbols:identtok, arraytok
2135 static void FormalType (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2138 ModuleDeclaration := 'MODULE' Ident [ Priority ]
2139 ';' { Import } [ Export ]
2142 first symbols:moduletok
2147 static void ModuleDeclaration (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2150 Priority := '[' ConstExpressionNop ']'
2152 first symbols:lsbratok
2157 static void Priority (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2160 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
2161 'UNQUALIFIED' IdentList |
2164 first symbols:exporttok
2169 static void Export (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2172 FromIdentList := Ident { ',' Ident }
2174 first symbols:identtok
2179 static void FromIdentList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2182 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
2185 first symbols:fromtok
2190 static void FromImport (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2193 ImportModuleList := Ident { ',' Ident }
2195 first symbols:identtok
2200 static void ImportModuleList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2203 WithoutFromImport := 'IMPORT' ImportModuleList ';'
2205 first symbols:importtok
2210 static void WithoutFromImport (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2213 Import := FromImport | WithoutFromImport
2215 first symbols:importtok, fromtok
2220 static void Import (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2223 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
2226 % curmodule := lookupDef (curident) %
2228 % enterScope (curmodule) %
2229 { Import } [ Export ] { Definition }
2231 % checkEndName (curmodule, curident, 'definition module') %
2236 first symbols:definitiontok
2241 static void DefinitionModule (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2245 % VAR type, field: node ; %
2247 % qualid := push (lookupWithSym (curident)) %
2251 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
2254 % IF NOT isQualident (qualid)
2256 ErrorArray ('the first component of this qualident must be a definition module or a parameter/variable/constant which has record type')
2261 qualid := replace (lookupInScope (qualid, curident))
2263 type := skipType (getType (qualid)) ;
2264 field := lookupInScope (type, curident) ;
2267 metaError2 ('field {%1k} cannot be found in {%2ad}', curident, qualid)
2269 qualid := replace (makeComponentRef (qualid, field))
2274 metaError1 ('qualified component of the identifier {%1k} cannot be found', curident)
2278 first symbols:identtok
2283 static void PushQualident (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2286 OptSubrange := [ SubrangeType ]
2288 first symbols:lsbratok
2293 static void OptSubrange (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2296 TypeEquiv := Qualident OptSubrange
2298 first symbols:identtok
2303 static void TypeEquiv (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2306 EnumIdentList := Ident { ',' Ident }
2308 first symbols:identtok
2313 static void EnumIdentList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2316 Enumeration := '(' EnumIdentList ')'
2318 first symbols:lparatok
2323 static void Enumeration (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2326 SimpleType := TypeEquiv | Enumeration |
2329 first symbols:lsbratok, lparatok, identtok
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
2345 static void Type (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2348 TypeDeclaration := { Ident ( ';' | '=' Type Alignment
2351 first symbols:identtok
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
2369 static void Definition (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2375 % s := pushStmt (makeComment ("asm")) %
2376 'ASM' [ 'VOLATILE' ] '(' AsmOperands
2379 first symbols:asmtok
2384 static void AsmStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2387 AsmOperands := string [ AsmOperandSpec ]
2389 first symbols:stringtok
2394 static void AsmOperands (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2397 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
2400 first symbols:colontok
2405 static void AsmOperandSpec (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2408 AsmList := [ AsmElement ] { ',' AsmElement }
2410 first symbols:lsbratok, stringtok, commatok
2415 static void AsmList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2418 NamedOperand := '[' Ident ']'
2420 first symbols:lsbratok
2425 static void NamedOperand (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2428 AsmOperandName := [ NamedOperand ]
2430 first symbols:lsbratok
2435 static void AsmOperandName (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2438 AsmElement := AsmOperandName string '(' Expression
2441 first symbols:stringtok, lsbratok
2446 static void AsmElement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2449 TrashList := [ string ] { ',' string }
2451 first symbols:commatok, stringtok
2456 static void TrashList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
);
2463 static void followNode (decl_node 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);
2491 /* avoid dangling else. */
2492 mcPrintf_printf0 ((const char *) "other\\n", 7);
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 ();
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 ();
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 ();
2561 static void checkDuplicate (bool b
)
2567 isQualident - returns TRUE if, n, is a qualident.
2570 static bool isQualident (decl_node n
)
2580 type
= decl_skipType (decl_getType (n
));
2581 return (type
!= NULL
) && (decl_isRecord (type
));
2584 /* static analysis guarentees a RETURN statement will be used before here. */
2585 __builtin_unreachable ();
2593 static void startWith (decl_node n
)
2595 n
= static_cast<decl_node
> (mcStack_push (withStk
, reinterpret_cast <void *> (n
)));
2603 static void endWith (void)
2607 n
= static_cast<decl_node
> (mcStack_pop (withStk
));
2615 static decl_node
lookupWithSym (nameKey_Name i
)
2622 d
= mcStack_depth (withStk
);
2625 n
= static_cast<decl_node
> (mcStack_access (withStk
, d
));
2626 t
= decl_skipType (decl_getType (n
));
2627 m
= decl_lookupInScope (t
, i
);
2630 n
= decl_dupExpr (n
);
2631 return decl_makeComponentRef (n
, m
);
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 ());
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
)
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
));
2747 static void pushNunbounded (unsigned int c
)
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
);
2767 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
2770 static decl_node
makeIndexedArray (unsigned int c
, decl_node t
)
2776 t
= decl_makeArray (pop (), 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
2792 static void importInto (decl_node m
, nameKey_Name name
, decl_node current
)
2797 mcDebug_assert (decl_isDef (m
));
2798 mcDebug_assert (((decl_isDef (current
)) || (decl_isModule (current
))) || (decl_isImp (current
)));
2799 s
= decl_lookupExported (m
, name
);
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));
2806 o
= decl_import (current
, s
);
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
)));
2837 DescribeStop - issues a message explaining what tokens were expected
2840 static DynamicStrings_String
DescribeStop (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
2843 DynamicStrings_String str
;
2844 DynamicStrings_String message
;
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)));
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)));
2858 if ((((1 << (mcReserved_identtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2860 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "identifier", 10)));
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)));
2868 if ((((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2870 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__INLINE__", 10)));
2873 if ((((1 << (mcReserved_builtintok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2875 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__BUILTIN__", 11)));
2878 if ((((1 << (mcReserved_attributetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2880 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__ATTRIBUTE__", 13)));
2883 if ((((1 << (mcReserved_filetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2885 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__FILE__", 8)));
2888 if ((((1 << (mcReserved_linetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2890 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__LINE__", 8)));
2893 if ((((1 << (mcReserved_datetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2895 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__DATE__", 8)));
2898 if ((((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2900 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "...", 3)));
2903 if ((((1 << (mcReserved_volatiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2905 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VOLATILE", 8)));
2908 if ((((1 << (mcReserved_asmtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2910 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ASM", 3)));
2913 if ((((1 << (mcReserved_withtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2915 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WITH", 4)));
2918 if ((((1 << (mcReserved_whiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2920 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WHILE", 5)));
2923 if ((((1 << (mcReserved_vartok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2925 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VAR", 3)));
2928 if ((((1 << (mcReserved_untiltok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2930 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNTIL", 5)));
2933 if ((((1 << (mcReserved_typetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2935 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TYPE", 4)));
2938 if ((((1 << (mcReserved_totok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2940 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TO", 2)));
2943 if ((((1 << (mcReserved_thentok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2945 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "THEN", 4)));
2948 if ((((1 << (mcReserved_settok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2950 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "SET", 3)));
2953 if ((((1 << (mcReserved_returntok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2955 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETURN", 6)));
2958 if ((((1 << (mcReserved_retrytok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2960 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETRY", 5)));
2963 if ((((1 << (mcReserved_repeattok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2965 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REPEAT", 6)));
2968 if ((((1 << (mcReserved_remtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2970 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REM", 3)));
2973 if ((((1 << (mcReserved_recordtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2975 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RECORD", 6)));
2978 if ((((1 << (mcReserved_unqualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2980 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNQUALIFIED", 11)));
2983 if ((((1 << (mcReserved_qualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2985 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "QUALIFIED", 9)));
2988 if ((((1 << (mcReserved_proceduretok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2990 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PROCEDURE", 9)));
2993 if ((((1 << (mcReserved_pointertok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2995 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "POINTER", 7)));
2998 if ((((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3000 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PACKEDSET", 9)));
3003 if ((((1 << (mcReserved_ortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3005 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OR", 2)));
3008 if ((((1 << (mcReserved_oftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3010 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OF", 2)));
3013 if ((((1 << (mcReserved_nottok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3015 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "NOT", 3)));
3018 if ((((1 << (mcReserved_moduletok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3020 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MODULE", 6)));
3023 if ((((1 << (mcReserved_modtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3025 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MOD", 3)));
3028 if ((((1 << (mcReserved_looptok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3030 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "LOOP", 4)));
3033 if ((((1 << (mcReserved_intok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3035 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IN", 2)));
3038 if ((((1 << (mcReserved_importtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3040 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPORT", 6)));
3043 if ((((1 << (mcReserved_implementationtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3045 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPLEMENTATION", 14)));
3048 if ((((1 << (mcReserved_iftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3050 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IF", 2)));
3053 if ((((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3055 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FROM", 4)));
3058 if ((((1 << (mcReserved_fortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3060 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FOR", 3)));
3063 if ((((1 << (mcReserved_finallytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3065 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FINALLY", 7)));
3068 if ((((1 << (mcReserved_exporttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3070 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXPORT", 6)));
3073 if ((((1 << (mcReserved_exittok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3075 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXIT", 4)));
3078 if ((((1 << (mcReserved_excepttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3080 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXCEPT", 6)));
3083 if ((((1 << (mcReserved_endtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3085 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "END", 3)));
3088 if ((((1 << (mcReserved_elsiftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3090 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSIF", 5)));
3093 if ((((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3095 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSE", 4)));
3098 if ((((1 << (mcReserved_dotok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3100 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DO", 2)));
3103 if ((((1 << (mcReserved_divtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3105 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DIV", 3)));
3108 if ((((1 << (mcReserved_definitiontok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3110 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DEFINITION", 10)));
3113 if ((((1 << (mcReserved_consttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3115 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CONST", 5)));
3118 if ((((1 << (mcReserved_casetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3120 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CASE", 4)));
3123 if ((((1 << (mcReserved_bytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3125 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BY", 2)));
3128 if ((((1 << (mcReserved_begintok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3130 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BEGIN", 5)));
3133 if ((((1 << (mcReserved_arraytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
3135 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ARRAY", 5)));
3138 if ((((1 << (mcReserved_andtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3140 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "AND", 3)));
3143 if ((((1 << (mcReserved_colontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3145 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":", 1)));
3148 if ((((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3150 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "..", 2)));
3153 if ((((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3155 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*>", 2)));
3158 if ((((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3160 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<*", 2)));
3163 if ((((1 << (mcReserved_greaterequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3165 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">=", 2)));
3168 if ((((1 << (mcReserved_lessequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3170 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<=", 2)));
3173 if ((((1 << (mcReserved_lessgreatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3175 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<>", 2)));
3178 if ((((1 << (mcReserved_hashtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3180 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "#", 1)));
3183 if ((((1 << (mcReserved_equaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3185 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "=", 1)));
3188 if ((((1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3190 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "^", 1)));
3193 if ((((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3195 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ";", 1)));
3198 if ((((1 << (mcReserved_commatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3200 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ",", 1)));
3203 if ((((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3205 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1)));
3208 if ((((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3210 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "&", 1)));
3213 if ((((1 << (mcReserved_dividetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3215 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "/", 1)));
3218 if ((((1 << (mcReserved_timestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3220 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*", 1)));
3223 if ((((1 << (mcReserved_minustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3225 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-", 1)));
3228 if ((((1 << (mcReserved_plustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3230 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "+", 1)));
3233 if ((((1 << (mcReserved_doublequotestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3235 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '`'), '"'), '\''), ',');
3238 if ((((1 << (mcReserved_singlequotetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3240 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '"'), '\''), '"'), ',');
3243 if ((((1 << (mcReserved_greatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3245 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">", 1)));
3248 if ((((1 << (mcReserved_lesstok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3250 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<", 1)));
3253 if ((((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3255 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ")", 1)));
3258 if ((((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3260 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "(", 1)));
3263 if ((((1 << (mcReserved_rcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3265 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "}", 1)));
3268 if ((((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3270 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{", 1)));
3273 if ((((1 << (mcReserved_rsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3275 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "]", 1)));
3278 if ((((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3280 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "[", 1)));
3283 if ((((1 << (mcReserved_bartok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3285 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "|", 1)));
3288 if ((((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3290 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":=", 2)));
3293 if ((((1 << (mcReserved_eoftok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
3295 /* eoftok has no token name (needed to generate error messages) */
3298 str
= DynamicStrings_InitString ((const char *) " syntax error", 13);
3299 message
= DynamicStrings_KillString (message
);
3303 /* avoid dangling else. */
3304 str
= DynamicStrings_ConCat (message
, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
3308 /* avoid dangling else. */
3309 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message
);
3310 message
= DynamicStrings_KillString (message
);
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
));
3333 case mcReserved_realtok
:
3334 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found real number", 31), DynamicStrings_Mark (str
));
3337 case mcReserved_identtok
:
3338 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found identifier", 30), DynamicStrings_Mark (str
));
3341 case mcReserved_integertok
:
3342 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found integer number", 34), DynamicStrings_Mark (str
));
3345 case mcReserved_inlinetok
:
3346 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __INLINE__", 30), DynamicStrings_Mark (str
));
3349 case mcReserved_builtintok
:
3350 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __BUILTIN__", 31), DynamicStrings_Mark (str
));
3353 case mcReserved_attributetok
:
3354 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __ATTRIBUTE__", 33), DynamicStrings_Mark (str
));
3357 case mcReserved_filetok
:
3358 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __FILE__", 28), DynamicStrings_Mark (str
));
3361 case mcReserved_linetok
:
3362 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __LINE__", 28), DynamicStrings_Mark (str
));
3365 case mcReserved_datetok
:
3366 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __DATE__", 28), DynamicStrings_Mark (str
));
3369 case mcReserved_periodperiodperiodtok
:
3370 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ...", 23), DynamicStrings_Mark (str
));
3373 case mcReserved_volatiletok
:
3374 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VOLATILE", 28), DynamicStrings_Mark (str
));
3377 case mcReserved_asmtok
:
3378 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ASM", 23), DynamicStrings_Mark (str
));
3381 case mcReserved_withtok
:
3382 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WITH", 24), DynamicStrings_Mark (str
));
3385 case mcReserved_whiletok
:
3386 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WHILE", 25), DynamicStrings_Mark (str
));
3389 case mcReserved_vartok
:
3390 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VAR", 23), DynamicStrings_Mark (str
));
3393 case mcReserved_untiltok
:
3394 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNTIL", 25), DynamicStrings_Mark (str
));
3397 case mcReserved_typetok
:
3398 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TYPE", 24), DynamicStrings_Mark (str
));
3401 case mcReserved_totok
:
3402 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TO", 22), DynamicStrings_Mark (str
));
3405 case mcReserved_thentok
:
3406 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found THEN", 24), DynamicStrings_Mark (str
));
3409 case mcReserved_settok
:
3410 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found SET", 23), DynamicStrings_Mark (str
));
3413 case mcReserved_returntok
:
3414 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETURN", 26), DynamicStrings_Mark (str
));
3417 case mcReserved_retrytok
:
3418 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETRY", 25), DynamicStrings_Mark (str
));
3421 case mcReserved_repeattok
:
3422 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REPEAT", 26), DynamicStrings_Mark (str
));
3425 case mcReserved_remtok
:
3426 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REM", 23), DynamicStrings_Mark (str
));
3429 case mcReserved_recordtok
:
3430 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RECORD", 26), DynamicStrings_Mark (str
));
3433 case mcReserved_unqualifiedtok
:
3434 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNQUALIFIED", 31), DynamicStrings_Mark (str
));
3437 case mcReserved_qualifiedtok
:
3438 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found QUALIFIED", 29), DynamicStrings_Mark (str
));
3441 case mcReserved_proceduretok
:
3442 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PROCEDURE", 29), DynamicStrings_Mark (str
));
3445 case mcReserved_pointertok
:
3446 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found POINTER", 27), DynamicStrings_Mark (str
));
3449 case mcReserved_packedsettok
:
3450 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PACKEDSET", 29), DynamicStrings_Mark (str
));
3453 case mcReserved_ortok
:
3454 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OR", 22), DynamicStrings_Mark (str
));
3457 case mcReserved_oftok
:
3458 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OF", 22), DynamicStrings_Mark (str
));
3461 case mcReserved_nottok
:
3462 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found NOT", 23), DynamicStrings_Mark (str
));
3465 case mcReserved_moduletok
:
3466 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MODULE", 26), DynamicStrings_Mark (str
));
3469 case mcReserved_modtok
:
3470 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MOD", 23), DynamicStrings_Mark (str
));
3473 case mcReserved_looptok
:
3474 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found LOOP", 24), DynamicStrings_Mark (str
));
3477 case mcReserved_intok
:
3478 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IN", 22), DynamicStrings_Mark (str
));
3481 case mcReserved_importtok
:
3482 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPORT", 26), DynamicStrings_Mark (str
));
3485 case mcReserved_implementationtok
:
3486 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPLEMENTATION", 34), DynamicStrings_Mark (str
));
3489 case mcReserved_iftok
:
3490 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IF", 22), DynamicStrings_Mark (str
));
3493 case mcReserved_fromtok
:
3494 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FROM", 24), DynamicStrings_Mark (str
));
3497 case mcReserved_fortok
:
3498 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FOR", 23), DynamicStrings_Mark (str
));
3501 case mcReserved_finallytok
:
3502 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FINALLY", 27), DynamicStrings_Mark (str
));
3505 case mcReserved_exporttok
:
3506 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXPORT", 26), DynamicStrings_Mark (str
));
3509 case mcReserved_exittok
:
3510 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXIT", 24), DynamicStrings_Mark (str
));
3513 case mcReserved_excepttok
:
3514 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXCEPT", 26), DynamicStrings_Mark (str
));
3517 case mcReserved_endtok
:
3518 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found END", 23), DynamicStrings_Mark (str
));
3521 case mcReserved_elsiftok
:
3522 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSIF", 25), DynamicStrings_Mark (str
));
3525 case mcReserved_elsetok
:
3526 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSE", 24), DynamicStrings_Mark (str
));
3529 case mcReserved_dotok
:
3530 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DO", 22), DynamicStrings_Mark (str
));
3533 case mcReserved_divtok
:
3534 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DIV", 23), DynamicStrings_Mark (str
));
3537 case mcReserved_definitiontok
:
3538 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DEFINITION", 30), DynamicStrings_Mark (str
));
3541 case mcReserved_consttok
:
3542 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CONST", 25), DynamicStrings_Mark (str
));
3545 case mcReserved_casetok
:
3546 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CASE", 24), DynamicStrings_Mark (str
));
3549 case mcReserved_bytok
:
3550 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BY", 22), DynamicStrings_Mark (str
));
3553 case mcReserved_begintok
:
3554 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BEGIN", 25), DynamicStrings_Mark (str
));
3557 case mcReserved_arraytok
:
3558 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ARRAY", 25), DynamicStrings_Mark (str
));
3561 case mcReserved_andtok
:
3562 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found AND", 23), DynamicStrings_Mark (str
));
3565 case mcReserved_colontok
:
3566 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :", 21), DynamicStrings_Mark (str
));
3569 case mcReserved_periodperiodtok
:
3570 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ..", 22), DynamicStrings_Mark (str
));
3573 case mcReserved_rdirectivetok
:
3574 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *>", 22), DynamicStrings_Mark (str
));
3577 case mcReserved_ldirectivetok
:
3578 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <*", 22), DynamicStrings_Mark (str
));
3581 case mcReserved_greaterequaltok
:
3582 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >=", 22), DynamicStrings_Mark (str
));
3585 case mcReserved_lessequaltok
:
3586 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <=", 22), DynamicStrings_Mark (str
));
3589 case mcReserved_lessgreatertok
:
3590 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <>", 22), DynamicStrings_Mark (str
));
3593 case mcReserved_hashtok
:
3594 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found #", 21), DynamicStrings_Mark (str
));
3597 case mcReserved_equaltok
:
3598 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found =", 21), DynamicStrings_Mark (str
));
3601 case mcReserved_uparrowtok
:
3602 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ^", 21), DynamicStrings_Mark (str
));
3605 case mcReserved_semicolontok
:
3606 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ;", 21), DynamicStrings_Mark (str
));
3609 case mcReserved_commatok
:
3610 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ,", 21), DynamicStrings_Mark (str
));
3613 case mcReserved_periodtok
:
3614 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found .", 21), DynamicStrings_Mark (str
));
3617 case mcReserved_ambersandtok
:
3618 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found &", 21), DynamicStrings_Mark (str
));
3621 case mcReserved_dividetok
:
3622 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found /", 21), DynamicStrings_Mark (str
));
3625 case mcReserved_timestok
:
3626 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *", 21), DynamicStrings_Mark (str
));
3629 case mcReserved_minustok
:
3630 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found -", 21), DynamicStrings_Mark (str
));
3633 case mcReserved_plustok
:
3634 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found +", 21), DynamicStrings_Mark (str
));
3637 case mcReserved_doublequotestok
:
3638 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str
));
3641 case mcReserved_singlequotetok
:
3642 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str
));
3645 case mcReserved_greatertok
:
3646 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >", 21), DynamicStrings_Mark (str
));
3649 case mcReserved_lesstok
:
3650 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <", 21), DynamicStrings_Mark (str
));
3653 case mcReserved_rparatok
:
3654 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found )", 21), DynamicStrings_Mark (str
));
3657 case mcReserved_lparatok
:
3658 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found (", 21), DynamicStrings_Mark (str
));
3661 case mcReserved_rcbratok
:
3662 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found }", 21), DynamicStrings_Mark (str
));
3665 case mcReserved_lcbratok
:
3666 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {", 21), DynamicStrings_Mark (str
));
3669 case mcReserved_rsbratok
:
3670 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ]", 21), DynamicStrings_Mark (str
));
3673 case mcReserved_lsbratok
:
3674 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found [", 21), DynamicStrings_Mark (str
));
3677 case mcReserved_bartok
:
3678 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found |", 21), DynamicStrings_Mark (str
));
3681 case mcReserved_becomestok
:
3682 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :=", 22), DynamicStrings_Mark (str
));
3685 case mcReserved_eoftok
:
3686 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ", 20), DynamicStrings_Mark (str
));
3698 SyntaxError - after a syntax error we skip all tokens up until we reach
3702 static void SyntaxError (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ();
3721 mcPrintf_printf0 ((const char *) " ***\\n", 6);
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
)
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
)));
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
))
3786 mcPrintf_printf0 ((const char *) "inserting token\\n", 17);
3788 mcLexBuf_insertToken (t
);
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
);
3809 /* static analysis guarentees a RETURN statement will be used before here. */
3810 __builtin_unreachable ();
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))))
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
)))
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 ();
3867 PeepToken (stopset0
, stopset1
, stopset2
);
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
);
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
);
3904 static void Integer (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
3908 n
= push (decl_makeLiteralInt (nameKey_makekey (mcLexBuf_currentstring
)));
3909 Expect (mcReserved_integertok
, stopset0
, stopset1
, stopset2
);
3917 static void Real (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
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
);
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
3965 % checkEndName (curmodule, curident, 'program module') %
3970 first symbols:moduletok
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
))));
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);
3997 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
4002 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
4004 % curmodule := lookupImp (curident) %
4006 % addCommentBody (curmodule) %
4008 % enterScope (lookupDef (curident)) %
4010 % enterScope (curmodule) %
4012 % resetConstExpPos (curmodule) %
4013 [ Priority ] ';' { Import }
4015 % checkEndName (curmodule, curident, 'implementation module') %
4017 % leaveScope ; leaveScope %
4020 first symbols:implementationtok
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
))));
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);
4050 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
4055 ImplementationOrProgramModule := ImplementationModule |
4058 first symbols:moduletok, implementationtok
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
);
4076 /* avoid dangling else. */
4077 ErrorArray ((const char *) "expecting one of: MODULE IMPLEMENTATION", 39);
4083 ConstInteger := Integer
4089 first symbols:integertok
4094 static void ConstInteger (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
4098 Integer (stopset0
, stopset1
, stopset2
);
4110 first symbols:realtok
4115 static void ConstReal (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
4119 Real (stopset0
, stopset1
, stopset2
);
4125 ConstNumber := ConstInteger | ConstReal
4127 first symbols:realtok, integertok
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
);
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
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
);
4172 /* avoid dangling else. */
4173 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
4179 Qualident := Ident { '.' Ident }
4181 first symbols:identtok
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
);
4199 ConstantDeclaration := Ident '=' ConstExpressionNop
4201 first symbols:identtok
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 :=
4218 % c := getNextConstExp () %
4219 SimpleConstExpr [ Relation
4222 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4227 static void ConstExpressionNop (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
4245 % c := push (getNextConstExp ()) %
4246 SimpleConstExpr [ Relation SimpleConstExpr ]
4248 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4253 static void ConstExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 := '=' | '#' | '<>' | '<' | '<=' |
4271 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
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
);
4319 /* avoid dangling else. */
4320 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
4326 SimpleConstExpr := UnaryOrConstTerm { AddOperator
4329 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
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
);
4347 UnaryOrConstTerm := '+' ConstTerm |
4351 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
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
);
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
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
);
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
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
))));
4435 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
4438 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
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
);
4481 /* avoid dangling else. */
4482 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
4488 NotConstFactor := 'NOT' ConstFactor
4491 % n := push (makeUnaryTok (nottok, pop ())) %
4494 first symbols:nottok
4499 static void NotConstFactor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ')' |
4516 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
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
);
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
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
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
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
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
);
4638 ConstConstructor := '{' [ ConstArraySetRecordValue ]
4641 first symbols:lcbratok
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 ] |
4662 first symbols:lcbratok, identtok
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
);
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
);
4701 /* avoid dangling else. */
4702 ErrorArray ((const char *) "expecting one of: { identifier", 30);
4708 ConstActualParameters := '(' [ ConstExpList ] ')'
4710 first symbols:lparatok
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
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
);
4747 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4748 '(' '(' ConstAttributeExpression
4751 first symbols:attributetok
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
4772 first symbols:lesstok, identtok
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
);
4794 /* avoid dangling else. */
4795 ErrorArray ((const char *) "expecting one of: < identifier", 30);
4803 first symbols:ldirectivetok
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
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
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
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
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
);
4887 SubrangeType := '[' ConstExpressionNop '..' ConstExpressionNop
4890 first symbols:lsbratok
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 }
4909 first symbols:arraytok
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
);
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
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
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
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
);
4986 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4992 FieldPragmaExpression := Ident PragmaConstExpression
4994 first symbols:identtok
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
5010 first symbols:lparatok
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
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
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
);
5065 FieldListStatement := [ FieldList ]
5067 first symbols:identtok, casetok
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
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
);
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
);
5122 /* avoid dangling else. */
5123 ErrorArray ((const char *) "expecting one of: CASE identifier", 33);
5130 % curident := NulName %
5133 first symbols:identtok
5138 static void TagIdent (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
5140 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5142 Ident (stopset0
, stopset1
, stopset2
);
5146 curident
= nameKey_NulName
;
5152 CaseTag := TagIdent [ ':' Qualident ]
5154 first symbols:colontok, identtok
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
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 { ','
5193 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
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
);
5211 VarientCaseLabels := ConstExpressionNop [ '..' ConstExpressionNop ]
5213 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
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
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
);
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
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
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 ')'
5297 first symbols:lparatok
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
);
5319 /* avoid dangling else. */
5320 ErrorArray ((const char *) "expecting one of: VAR ... ARRAY identifier )", 44);
5326 FormalReturn := [ ':' OptReturnType ]
5328 first symbols:colontok
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 ']' |
5347 first symbols:identtok, lsbratok
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
);
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
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
);
5395 ProcedureParameter := '...' | 'VAR' FormalType |
5398 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
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
);
5422 /* avoid dangling else. */
5423 ErrorArray ((const char *) "expecting one of: ARRAY identifier VAR ...", 42);
5429 VarIdent := Ident [ '[' ConstExpressionNop ']' ]
5431 first symbols:identtok
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
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
);
5469 VariableDeclaration := VarIdentList ':' Type Alignment
5471 first symbols:identtok
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
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
);
5506 % VAR n, field, type: node ; %
5512 ErrorArray ('no expression found') ;
5517 % type := skipType (getType (n)) %
5519 % IF isRecord (type)
5521 field := lookupInScope (type, curident) ;
5524 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
5526 n := replace (makeComponentRef (n, field))
5529 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
5534 n := replace (makeArrayRef (n, pop ()))
5536 metaError1 ('attempting to access an array but the expression is not an array but a {%1d}', type)
5540 first symbols:uparrowtok, lsbratok, periodtok
5545 static void SubDesignator (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
5554 ErrorArray ((const char *) "no expression found", 19);
5555 mcError_flushErrors ();
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
);
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));
5572 n
= replace (decl_makeComponentRef (n
, field
));
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 ()));
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
);
5602 /* avoid dangling else. */
5603 ErrorArray ((const char *) "expecting one of: ^ [ .", 23);
5610 % VAR n, field, type: node ; %
5614 % type := skipType (getType (n)) %
5616 % IF isPointer (type)
5618 type := skipType (getType (type)) ;
5621 field := lookupInScope (type, curident) ;
5624 metaError2 ('field {%1k} cannot be found in record {%2ad}', curident, type)
5626 n := replace (makePointerRef (n, field))
5629 metaError2 ('attempting to access a field {%1k} from {%2ad} which does not have a record type', curident, type)
5632 metaError2 ('trying to dereference {%1k} which was not declared as a pointer but a {%2tad}', n, n)
5635 % IF isPointer (type)
5637 n := replace (makeDeRef (n))
5639 metaError1 ('attempting to dereference a pointer but the expression is not a pointer but a {%1d}', type)
5643 first symbols:uparrowtok
5648 static void SubPointer (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
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));
5673 n
= replace (decl_makePointerRef (n
, field
));
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));
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));
5688 if (decl_isPointer (type
))
5690 n
= replace (decl_makeDeRef (n
));
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));
5704 % l := push (makeExpList ()) %
5706 % putExpList (l, pop ()) %
5708 % assert (isExpList (peep ())) %
5710 % putExpList (l, pop ()) %
5712 % assert (isExpList (peep ())) %
5715 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5720 static void ArrayExpList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ()));
5741 % VAR p, n: node ; %
5745 % assert (isExpList (p)) %
5747 % putExpList (p, pop ()) %
5749 % assert (isExpList (peep ())) %
5751 % putExpList (p, pop ()) %
5753 % assert (isExpList (peep ())) %
5756 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5761 static void ExpList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ()));
5784 % VAR c, l, r: node ; op: toktype ; %
5786 % op := currenttoken %
5792 % r := push (makeBinaryTok (op, l, r)) %
5795 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5800 static void Expression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
))));
5813 SimpleExpression (stopset0
, stopset1
, stopset2
);
5815 r
= push (decl_makeBinaryTok (op
, l
, r
));
5822 % VAR op: toktype ; n: node ; %
5824 % op := currenttoken %
5829 % n := push (makeBinaryTok (op, n, pop ())) %
5832 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5837 static void SimpleExpression (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
5839 mcReserved_toktype op
;
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
;
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 ()));
5859 % n := push (makeUnaryTok (plustok, pop ())) %
5861 % n := push (makeUnaryTok (minustok, pop ())) %
5864 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5869 static void UnaryOrTerm (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
5893 /* avoid dangling else. */
5894 ErrorArray ((const char *) "expecting one of: NOT ( string integer number real number { identifier - +", 74);
5901 % VAR op: toktype ; n: node ; %
5903 % op := currenttoken %
5907 % n := push (makeBinaryTok (op, n, pop ())) %
5910 first symbols:identtok, lcbratok, realtok, integertok, stringtok, lparatok, nottok
5915 static void Term (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
5917 mcReserved_toktype op
;
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
))));
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 ()));
5934 PushString := string
5937 % n := push (makeString (curstring)) %
5940 first symbols:stringtok
5945 static void PushString (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
5949 string (stopset0
, stopset1
, stopset2
);
5950 n
= push (decl_makeString (curstring
));
5955 Factor := Number | PushString | SetOrDesignatorOrFunction |
5956 '(' Expression ')' |
5960 % n := push (makeUnaryTok (nottok, pop ())) %
5962 % n := push (makeUnaryTok (nottok, pop ())) %
5965 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
5970 static void Factor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ()));
6012 /* avoid dangling else. */
6013 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ real number integer number string ( NOT { identifier", 84);
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 ; %
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
6044 static void ComponentElement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
6050 Expression (stopset0
|(mcp5_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
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
);
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') %
6069 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
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
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
);
6110 % n := push (makeSetValue ()) %
6111 [ ArraySetRecordValue ] '}'
6113 first symbols:lcbratok
6118 static void Constructor (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ; %
6140 % n := push (putSetValue (p, q)) %
6147 % p := push (makeFuncCall (q, p)) %
6151 first symbols:identtok, lcbratok
6156 static void SetOrDesignatorOrFunction (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
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
)
6184 ActualParameters (stopset0
, stopset1
, stopset2
);
6186 p
= push (decl_makeFuncCall (q
, p
));
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
);
6204 /* avoid dangling else. */
6205 ErrorArray ((const char *) "expecting one of: { identifier", 30);
6211 SimpleDes := { SubDesignator }
6213 first symbols:uparrowtok, periodtok, lsbratok
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
);
6229 ActualParameters := '('
6232 % n := push (makeExpList ()) %
6234 % assert (isExpList (peep ())) %
6237 first symbols:lparatok
6242 static void ActualParameters (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ()));
6263 ErrorArray ('EXIT can only be used inside a LOOP statement')
6265 n := pushStmt (makeExit (peepLoop (), loopNo))
6269 first symbols:exittok
6274 static void ExitStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
6278 Expect (mcReserved_exittok
, stopset0
, stopset1
, stopset2
);
6281 ErrorArray ((const char *) "EXIT can only be used inside a LOOP statement", 45);
6285 n
= pushStmt (decl_makeExit (peepLoop (), loopNo
));
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
6310 static void ReturnStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 |
6332 LoopStatement | ForStatement |
6333 WithStatement | AsmStatement |
6334 ExitStatement | ReturnStatement |
6339 % s := pushStmt (NIL) %
6342 first symbols:identtok, retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, returntok, exittok
6347 static void Statement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
6412 /* avoid dangling else. */
6413 s
= pushStmt (static_cast<decl_node
> (NULL
));
6422 % s := pushStmt (makeComment ("retry")) %
6425 first symbols:retrytok
6430 static void RetryStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
6434 s
= pushStmt (decl_makeComment ((const char *) "retry", 5));
6435 Expect (mcReserved_retrytok
, stopset0
, stopset1
, stopset2
);
6440 AssignmentOrProcedureCall :=
6441 % VAR d, a, p: node ; %
6445 % a := pushStmt (makeAssignment (d, pop ())) %
6449 % a := pushStmt (makeFuncCall (d, pop ())) %
6452 % a := pushStmt (makeFuncCall (d, NIL)) %
6454 % addCommentBody (peepStmt ()) %
6456 % addCommentAfter (peepStmt ()) %
6459 first symbols:identtok
6464 static void AssignmentOrProcedureCall (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
6470 Designator (stopset0
|(mcp5_SetOfStop0
) ((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
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 ()));
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 ())) %
6502 % addStatement (s, popStmt ()) %
6504 % assert (isStatementSequence (peepStmt ())) %
6506 % addStatement (s, popStmt ()) %
6508 % assert (isStatementSequence (peepStmt ())) %
6511 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
6516 static void StatementSequence (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ()));
6539 % VAR i, a, b: node ; %
6541 % b := makeCommentS (getBodyComment ()) %
6543 % a := makeCommentS (getAfterComment ()) %
6544 'THEN' StatementSequence
6545 % i := pushStmt (makeIf (pop (), popStmt ())) %
6547 % addIfComments (i, b, a) %
6549 % b := makeCommentS (getBodyComment ()) %
6551 % a := makeCommentS (getAfterComment ()) %
6553 % addElseComments (peepStmt (), b, a) %
6555 % i := makeElsif (i, pop (), popStmt ()) %
6556 } [ 'ELSE' StatementSequence
6557 % putElse (i, popStmt ()) %
6559 % b := makeCommentS (getBodyComment ()) %
6561 % a := makeCommentS (getAfterComment ()) %
6563 % assert (isIf (peepStmt ())) %
6565 % addIfEndComments (peepStmt (), b, a) %
6573 static void IfStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ());
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
);
6615 % VAR s, e: node ; %
6617 % s := pushStmt (makeCase ()) %
6619 % s := putCaseExpression (s, pop ()) %
6620 'OF' Case { '|' Case } CaseEndStatement
6622 first symbols:casetok
6627 static void CaseStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
6644 CaseEndStatement (stopset0
, stopset1
, stopset2
);
6652 % c := peepStmt () %
6654 % c := putCaseElse (c, popStmt ()) %
6657 first symbols:elsetok, endtok
6662 static void CaseEndStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
))));
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
);
6681 /* avoid dangling else. */
6682 ErrorArray ((const char *) "expecting one of: ELSE END", 26);
6688 Case := [ CaseLabelList ':'
6689 % VAR l, c: node ; %
6693 % c := peepStmt () %
6695 % c := putCaseStatement (c, l, popStmt ()) %
6698 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6703 static void Case (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
))));
6714 StatementSequence (stopset0
, stopset1
, stopset2
);
6715 c
= decl_putCaseStatement (c
, l
, popStmt ());
6724 % l := push (makeCaseList ()) %
6725 CaseLabels { ',' CaseLabels }
6727 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
6732 static void CaseLabelList (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
6749 % VAR lo, hi, l: node ; %
6751 % lo := NIL ; hi := NIL %
6756 [ '..' ConstExpression
6759 % l := putCaseRange (l, lo, hi) %
6762 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6767 static void CaseLabels (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
6773 lo
= static_cast<decl_node
> (NULL
);
6774 hi
= static_cast<decl_node
> (NULL
);
6776 ConstExpression (stopset0
|(mcp5_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
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
);
6784 l
= decl_putCaseRange (l
, lo
, hi
);
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) %
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
6820 static void WhileStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
);
6836 StatementSequence (stopset0
, stopset1
|(mcp5_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
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
);
6849 % VAR r, s, a, b: node ; %
6851 % r := pushStmt (makeRepeat ()) %
6853 % b := makeCommentS (getBodyComment ()) %
6855 % a := makeCommentS (getAfterComment ()) %
6857 % addRepeatComment (r, b, a) %
6861 % putRepeat (r, s, pop ()) %
6863 % b := makeCommentS (getBodyComment ()) %
6865 % a := makeCommentS (getAfterComment ()) %
6867 % addUntilComment (r, b, a) %
6870 first symbols:repeattok
6875 static void RepeatStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
))));
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
);
6900 % VAR f, i, s, e, b: node ; %
6904 % f := pushStmt (makeFor ()) %
6906 % i := lookupWithSym (curident) %
6911 [ 'BY' ConstExpression
6913 ] 'DO' StatementSequence
6914 % putFor (f, i, s, e, b, popStmt ()) %
6917 first symbols:fortok
6922 static void ForStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
))));
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
);
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
);
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
);
6956 % VAR l, s: node ; %
6958 % l := pushStmt (pushLoop (makeLoop ())) %
6970 % assert (isLoop (peepStmt ())) %
6973 first symbols:looptok
6978 static void LoopStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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 ()));
6986 StatementSequence (stopset0
, stopset1
|(mcp5_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6988 decl_putLoop (l
, s
);
6990 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6992 mcDebug_assert (decl_isLoop (peepStmt ()));
6997 WithStatement := 'WITH' Designator 'DO'
6998 % startWith (pop ()) %
6999 StatementSequence 'END'
7003 first symbols:withtok
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
))));
7014 StatementSequence (stopset0
, stopset1
|(mcp5_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
7015 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
7021 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
7026 first symbols:proceduretok
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
);
7042 ProcedureIdent := Ident
7043 % curproc := lookupSym (curident) %
7045 % enterScope (curproc) %
7047 % setProcedureComment (lastcomment, curident) %
7050 first symbols:identtok
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
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 ')' ')' |
7086 first symbols:inlinetok, attributetok
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
);
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 ]
7127 first symbols:proceduretok
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
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
);
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 ]
7183 first symbols:proceduretok
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 ]
7205 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
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
))));
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
7230 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
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
))));
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
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
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
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
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'
7332 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
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
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
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
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
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
))));
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
))));
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
))));
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
);
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) %
7466 first symbols:lparatok
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
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
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
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
);
7550 /* avoid dangling else. */
7551 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
7557 FormalParameters := '('
7558 % paramEnter (curproc) %
7559 [ MultiFPSection ] ')'
7560 % paramLeave (curproc) %
7563 first symbols:lparatok
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 [ ';'
7586 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
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
);
7609 /* avoid dangling else. */
7610 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
7616 FPSection := NonVarFPSection |
7619 first symbols:vartok, identtok
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
);
7637 /* avoid dangling else. */
7638 ErrorArray ((const char *) "expecting one of: VAR identifier", 32);
7644 DefExtendedFP := DefOptArg | '...'
7646 first symbols:lsbratok, periodperiodperiodtok
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
);
7664 /* avoid dangling else. */
7665 ErrorArray ((const char *) "expecting one of: ... [", 23);
7671 ExtendedFP := OptArg | '...'
7673 first symbols:lsbratok, periodperiodperiodtok
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
);
7691 /* avoid dangling else. */
7692 ErrorArray ((const char *) "expecting one of: ... [", 23);
7698 VarFPSection := 'VAR' IdentList ':' FormalType [
7701 first symbols:vartok
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
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
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
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
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
))));
7800 Qualident (stopset0
, stopset1
, stopset2
);
7805 ModuleDeclaration := 'MODULE' Ident [ Priority ]
7806 ';' { Import } [ Export ]
7809 first symbols:moduletok
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
))));
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
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 |
7858 first symbols:exporttok
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
);
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
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
);
7912 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
7915 first symbols:fromtok
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
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
);
7951 WithoutFromImport := 'IMPORT' ImportModuleList ';'
7953 first symbols:importtok
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
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
);
7987 /* avoid dangling else. */
7988 ErrorArray ((const char *) "expecting one of: IMPORT FROM", 29);
7994 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
7997 % curmodule := lookupDef (curident) %
7999 % enterScope (curmodule) %
8000 { Import } [ Export ] { Definition }
8002 % checkEndName (curmodule, curident, 'definition module') %
8007 first symbols:definitiontok
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
))));
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
))));
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);
8049 % VAR type, field: node ; %
8051 % qualid := push (lookupWithSym (curident)) %
8055 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
8058 % IF NOT isQualident (qualid)
8060 ErrorArray ('the first component of this qualident must be a definition module or a parameter/variable/constant which has record type')
8065 qualid := replace (lookupInScope (qualid, curident))
8067 type := skipType (getType (qualid)) ;
8068 field := lookupInScope (type, curident) ;
8071 metaError2 ('field {%1k} cannot be found in {%2ad}', curident, qualid)
8073 qualid := replace (makeComponentRef (qualid, field))
8078 metaError1 ('qualified component of the identifier {%1k} cannot be found', curident)
8082 first symbols:identtok
8087 static void PushQualident (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
8092 Ident (stopset0
|(mcp5_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
8093 qualid
= push (lookupWithSym (curident
));
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
));
8112 type
= decl_skipType (decl_getType (qualid
));
8113 field
= decl_lookupInScope (type
, curident
);
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));
8120 qualid
= replace (decl_makeComponentRef (qualid
, field
));
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
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
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
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
);
8184 Enumeration := '(' EnumIdentList ')'
8186 first symbols:lparatok
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 |
8203 first symbols:lsbratok, lparatok, identtok
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
);
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
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
);
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
8284 first symbols:identtok
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
))));
8308 /* avoid dangling else. */
8309 ErrorArray ((const char *) "expecting one of: = ;", 21);
8317 Definition := 'CONST' { ConstantDeclaration ';' } |
8318 'TYPE' { TypeDeclaration } |
8319 'VAR' { VariableDeclaration ';' } |
8320 DefProcedureHeading ';'
8322 first symbols:proceduretok, vartok, typetok, consttok
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
))));
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
))));
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
))));
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
);
8368 /* avoid dangling else. */
8369 ErrorArray ((const char *) "expecting one of: PROCEDURE VAR TYPE CONST", 42);
8378 % s := pushStmt (makeComment ("asm")) %
8379 'ASM' [ 'VOLATILE' ] '(' AsmOperands
8382 first symbols:asmtok
8387 static void AsmStatement (mcp5_SetOfStop0 stopset0
, mcp5_SetOfStop1 stopset1
, mcp5_SetOfStop2 stopset2
)
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
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 [
8425 first symbols:colontok
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
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
);
8474 NamedOperand := '[' Ident ']'
8476 first symbols:lsbratok
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
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
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
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
);
8549 CompilationUnit - returns TRUE if the input was correct enough to parse
8553 extern "C" bool mcp5_CompilationUnit (void)
8555 stk
= mcStack_init ();
8556 withStk
= mcStack_init ();
8557 stmtStk
= mcStack_init ();
8558 loopStk
= mcStack_init ();
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
);
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
[])