1 /* do not edit automatically generated by mc from mcp4. */
2 /* output from mc-4.bnf, automatically generated do not edit.
4 Copyright (C) 2016-2023 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/>. */
25 # if !defined (PROC_D)
27 typedef void (*PROC_t
) (void);
28 typedef struct { PROC_t proc
; } PROC
;
39 #if defined(__cplusplus)
46 # include "GDynamicStrings.h"
47 # include "GmcError.h"
48 # include "GnameKey.h"
49 # include "GmcPrintf.h"
50 # include "GmcDebug.h"
51 # include "GmcReserved.h"
52 # include "GmcMetaError.h"
53 # include "GmcStack.h"
54 # include "GmcLexBuf.h"
58 # define Debugging FALSE
59 typedef unsigned int mcp4_stop0
;
61 typedef unsigned int mcp4_SetOfStop0
;
63 typedef unsigned int mcp4_stop1
;
65 typedef unsigned int mcp4_SetOfStop1
;
67 typedef unsigned int mcp4_stop2
;
69 typedef unsigned int mcp4_SetOfStop2
;
71 static unsigned int WasNoError
;
72 static nameKey_Name curstring
;
73 static nameKey_Name curident
;
74 static decl_node curproc
;
75 static decl_node typeDes
;
76 static decl_node typeExp
;
77 static decl_node curmodule
;
78 static mcStack_stack stk
;
81 CompilationUnit - returns TRUE if the input was correct enough to parse
85 extern "C" unsigned int mcp4_CompilationUnit (void);
91 static decl_node
push (decl_node n
);
97 static decl_node
pop (void);
103 static decl_node
replace (decl_node n
);
106 peep - returns the top node on the stack without removing it.
109 static decl_node
peep (void);
112 depth - returns the depth of the stack.
115 static unsigned int depth (void);
121 static void checkDuplicate (unsigned int b
);
127 static void ErrorString (DynamicStrings_String s
);
133 static void ErrorArray (const char *a_
, unsigned int _a_high
);
139 static void pushNunbounded (unsigned int c
);
142 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
145 static decl_node
makeIndexedArray (unsigned int c
, decl_node t
);
148 importInto - from, m, import, name, into module, current.
149 It checks to see if curident is an enumeration type
150 and if so automatically includes all enumeration fields
154 static void importInto (decl_node m
, nameKey_Name name
, decl_node current
);
157 checkEndName - if module does not have, name, then issue an error containing, desc.
160 static void checkEndName (decl_node module
, nameKey_Name name
, const char *desc_
, unsigned int _desc_high
);
163 DescribeStop - issues a message explaining what tokens were expected
166 static DynamicStrings_String
DescribeStop (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
169 DescribeError - issues a message explaining what tokens were expected
172 static void DescribeError (void);
175 SyntaxError - after a syntax error we skip all tokens up until we reach
179 static void SyntaxError (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
185 static void SyntaxCheck (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
188 WarnMissingToken - generates a warning message about a missing token, t.
191 static void WarnMissingToken (mcReserved_toktype t
);
194 MissingToken - generates a warning message about a missing token, t.
197 static void MissingToken (mcReserved_toktype t
);
203 static unsigned int CheckAndInsert (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
209 static unsigned int InStopSet (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
212 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
213 If it is not then it will insert a token providing the token
214 is one of ; ] ) } . OF END ,
216 if the stopset contains <identtok> then we do not insert a token
219 static void PeepToken (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
225 static void Expect (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
228 Ident - error checking varient of Ident
231 static void Ident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
237 static void string (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
243 static void Integer (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
249 static void Real (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
252 FileUnit := DefinitionModule |
253 ImplementationOrProgramModule
255 first symbols:implementationtok, moduletok, definitiontok
260 static void FileUnit (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
263 ProgramModule := 'MODULE' Ident
264 % curmodule := lookupModule (curident) %
266 % enterScope (curmodule) %
268 % resetConstExpPos (curmodule) %
269 [ Priority ] ';' { Import } Block
271 % checkEndName (curmodule, curident, 'program module') %
276 first symbols:moduletok
281 static void ProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
284 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
286 % curmodule := lookupImp (curident) %
288 % enterScope (lookupDef (curident)) %
290 % enterScope (curmodule) %
292 % resetConstExpPos (curmodule) %
293 [ Priority ] ';' { Import }
295 % checkEndName (curmodule, curident, 'implementation module') %
297 % leaveScope ; leaveScope %
300 first symbols:implementationtok
305 static void ImplementationModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
308 ImplementationOrProgramModule := ImplementationModule |
311 first symbols:moduletok, implementationtok
316 static void ImplementationOrProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
319 Number := Integer | Real
321 first symbols:realtok, integertok
326 static void Number (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
329 Qualident := Ident { '.' Ident }
331 first symbols:identtok
336 static void Qualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
339 ConstantDeclaration :=
342 % d := lookupSym (curident) %
346 % assert (isConst (d)) %
351 first symbols:identtok
356 static void ConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
360 % VAR c, l, r: node ; op: toktype ; d: CARDINAL ; %
364 % c := push (getNextConstExp ()) %
366 % op := currenttoken %
367 [ Relation SimpleConstExpr
372 % l := push (makeBinaryTok (op, l, r)) %
374 % c := replace (fixupConstExp (c, pop ())) %
376 % assert (d+1 = depth ()) %
379 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
384 static void ConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
387 Relation := '=' | '#' | '<>' | '<' | '<=' |
390 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
395 static void Relation (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
399 % VAR op: toktype ; n: node ; %
403 % op := currenttoken %
404 AddOperator ConstTerm
405 % n := makeBinaryTok (op, n, pop ()) %
410 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
415 static void SimpleConstExpr (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
421 % n := push (makeUnaryTok (plustok, pop ())) %
423 % n := push (makeUnaryTok (minustok, pop ())) %
426 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
431 static void UnaryOrConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
434 AddOperator := '+' | '-' | 'OR'
436 first symbols:ortok, minustok, plustok
441 static void AddOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
445 % VAR op: toktype ; n: node ; %
449 % op := currenttoken %
450 MulOperator ConstFactor
451 % n := makeBinaryTok (op, n, pop ()) %
456 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
461 static void ConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
464 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
467 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
472 static void MulOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
475 NotConstFactor := 'NOT' ConstFactor
478 % n := push (makeUnaryTok (nottok, pop ())) %
486 static void NotConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
489 ConstFactor := Number | ConstString |
490 ConstSetOrQualidentOrFunction |
491 '(' ConstExpression ')' |
495 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
500 static void ConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
503 ConstString := string
506 % n := push (makeString (curstring)) %
509 first symbols:stringtok
514 static void ConstString (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
517 ConstComponentElement := ConstExpression
518 % VAR l, h, n: node ; %
523 [ '..' ConstExpression
527 % ErrorArray ('implementation restriction range is not allowed') %
529 % n := push (includeSetValue (pop (), l, h)) %
532 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
537 static void ConstComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
540 ConstComponentValue := ConstComponentElement [ 'BY'
542 % ErrorArray ('implementation restriction BY not allowed') %
545 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
550 static void ConstComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
553 ConstArraySetRecordValue := ConstComponentValue
554 { ',' ConstComponentValue }
556 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
561 static void ConstArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
564 ConstConstructor := '{'
567 % n := push (makeSetValue ()) %
568 [ ConstArraySetRecordValue ]
571 first symbols:lcbratok
576 static void ConstConstructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
579 ConstSetOrQualidentOrFunction :=
580 % VAR q, p, n: node ; d: CARDINAL ; %
584 % assert (d+1 = depth ()) %
591 % n := push (putSetValue (p, q)) %
593 % assert (d+1 = depth ()) %
595 ConstActualParameters
601 % n := push (makeFuncCall (q, p)) %
603 % assert (d+1 = depth ()) %
609 % assert (d+1 = depth ()) %
612 first symbols:identtok, lcbratok
617 static void ConstSetOrQualidentOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
620 ConstActualParameters := '('
623 % n := push (makeExpList ()) %
625 % assert (isExpList (peep ())) %
628 first symbols:lparatok
633 static void ConstActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
641 % assert (isExpList (p)) %
643 % putExpList (p, pop ()) %
645 % assert (p = peep ()) %
647 % assert (isExpList (peep ())) %
648 { ',' ConstExpression
649 % putExpList (p, pop ()) %
651 % assert (isExpList (peep ())) %
654 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
659 static void ConstExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
662 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
663 '(' '(' ConstAttributeExpression
666 first symbols:attributetok
671 static void ConstAttribute (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
674 ConstAttributeExpression := Ident
677 % n := push (getBuiltinConst (curident)) %
681 first symbols:lesstok, identtok
686 static void ConstAttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
691 first symbols:ldirectivetok
696 static void ByteAlignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
699 OptAlignmentExpression := [ AlignmentExpression ]
701 first symbols:lparatok
706 static void OptAlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
709 AlignmentExpression := '(' ConstExpression ')'
711 first symbols:lparatok
716 static void AlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
719 Alignment := [ ByteAlignment ]
721 first symbols:ldirectivetok
726 static void Alignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
729 IdentList := Ident { ',' Ident }
731 first symbols:identtok
736 static void IdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
742 % n := makeIdentList () %
744 % checkDuplicate (putIdent (n, curident)) %
746 % checkDuplicate (putIdent (n, curident)) %
751 first symbols:identtok
756 static void PushIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
759 SubrangeType := '[' ConstExpression '..' ConstExpression
762 first symbols:lsbratok
767 static void SubrangeType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
770 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
773 first symbols:arraytok
778 static void ArrayType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
781 RecordType := 'RECORD' [ DefaultRecordAttributes ]
782 FieldListSequence 'END'
784 first symbols:recordtok
789 static void RecordType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
792 DefaultRecordAttributes := ''
794 first symbols:ldirectivetok
799 static void DefaultRecordAttributes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
802 RecordFieldPragma := [ '' ]
804 first symbols:ldirectivetok
809 static void RecordFieldPragma (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
812 FieldPragmaExpression := Ident PragmaConstExpression
814 first symbols:identtok
819 static void FieldPragmaExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
822 PragmaConstExpression := [ '(' ConstExpression ')' ]
824 first symbols:lparatok
829 static void PragmaConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
832 AttributeExpression := Ident '(' ConstExpression
835 first symbols:identtok
840 static void AttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
843 FieldListSequence := FieldListStatement { ';' FieldListStatement }
845 first symbols:casetok, identtok, semicolontok
850 static void FieldListSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
853 FieldListStatement := [ FieldList ]
855 first symbols:identtok, casetok
860 static void FieldListStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
863 FieldList := IdentList ':' Type RecordFieldPragma |
864 'CASE' CaseTag 'OF' Varient { '|' Varient }
865 [ 'ELSE' FieldListSequence ] 'END'
867 first symbols:casetok, identtok
872 static void FieldList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
876 % curident := NulName %
879 first symbols:identtok
884 static void TagIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
887 CaseTag := TagIdent [ ':' Qualident ]
889 first symbols:colontok, identtok
894 static void CaseTag (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
897 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
899 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
904 static void Varient (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
907 VarientCaseLabelList := VarientCaseLabels { ','
910 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
915 static void VarientCaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
918 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
920 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
925 static void VarientCaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
928 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
930 first symbols:oftok, packedsettok, settok
935 static void SetType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
938 PointerType := 'POINTER' 'TO' Type
940 first symbols:pointertok
945 static void PointerType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
948 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
950 first symbols:proceduretok
955 static void ProcedureType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
958 FormalTypeList := '(' ( ')' FormalReturn |
959 ProcedureParameters ')'
962 first symbols:lparatok
967 static void FormalTypeList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
970 FormalReturn := [ ':' OptReturnType ]
972 first symbols:colontok
977 static void FormalReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
980 OptReturnType := '[' Qualident ']' |
983 first symbols:identtok, lsbratok
988 static void OptReturnType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
991 ProcedureParameters := ProcedureParameter { ','
994 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
999 static void ProcedureParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1002 ProcedureParameter := '...' | 'VAR' FormalType |
1005 first symbols:identtok, arraytok, vartok, periodperiodperiodtok
1010 static void ProcedureParameter (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1013 VarIdent := Ident [ '[' ConstExpression
1019 first symbols:identtok
1024 static void VarIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1027 VarIdentList := VarIdent { ',' VarIdent }
1029 first symbols:identtok
1034 static void VarIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1037 VariableDeclaration := VarIdentList ':' Type Alignment
1039 first symbols:identtok
1044 static void VariableDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1047 Designator := Qualident { SubDesignator }
1049 first symbols:identtok
1054 static void Designator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1057 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
1060 first symbols:uparrowtok, lsbratok, periodtok
1065 static void SubDesignator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1068 ArrayExpList := Expression { ',' Expression }
1070 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1075 static void ArrayExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1078 ExpList := Expression { ',' Expression }
1080 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1085 static void ExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1088 Expression := SimpleExpression [ Relation SimpleExpression ]
1090 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1095 static void Expression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1098 SimpleExpression := UnaryOrTerm { AddOperator Term }
1100 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1105 static void SimpleExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1108 UnaryOrTerm := '+' Term | '-' Term |
1111 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1116 static void UnaryOrTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1119 Term := Factor { MulOperator Factor }
1121 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
1126 static void Term (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1129 Factor := Number | string | SetOrDesignatorOrFunction |
1130 '(' Expression ')' |
1131 'NOT' ( Factor | ConstAttribute )
1133 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1138 static void Factor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1141 ComponentElement := Expression [ '..' Expression
1143 % ErrorArray ('implementation restriction range not allowed') %
1146 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1151 static void ComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1154 ComponentValue := ComponentElement [ 'BY'
1155 % ErrorArray ('implementation restriction BY not allowed') %
1158 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1163 static void ComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1166 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
1168 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1173 static void ArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1176 Constructor := '{' [ ArraySetRecordValue ] '}'
1178 first symbols:lcbratok
1183 static void Constructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1186 SetOrDesignatorOrFunction := Qualident [ Constructor |
1188 [ ActualParameters ] ] |
1191 first symbols:lcbratok, identtok
1196 static void SetOrDesignatorOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1199 SimpleDes := { SubDesignator }
1201 first symbols:periodtok, lsbratok, uparrowtok
1206 static void SimpleDes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1209 ActualParameters := '(' [ ExpList ] ')'
1211 first symbols:lparatok
1216 static void ActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1219 ExitStatement := 'EXIT'
1221 first symbols:exittok
1226 static void ExitStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1229 ReturnStatement := 'RETURN' [ Expression ]
1231 first symbols:returntok
1236 static void ReturnStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1239 Statement := [ AssignmentOrProcedureCall |
1240 IfStatement | CaseStatement |
1243 LoopStatement | ForStatement |
1244 WithStatement | AsmStatement |
1245 ExitStatement | ReturnStatement |
1248 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
1253 static void Statement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1256 RetryStatement := 'RETRY'
1258 first symbols:retrytok
1263 static void RetryStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1266 AssignmentOrProcedureCall := Designator ( ':=' Expression |
1272 first symbols:identtok
1277 static void AssignmentOrProcedureCall (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1280 StatementSequence := Statement { ';' Statement }
1282 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1287 static void StatementSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1290 IfStatement := 'IF' Expression 'THEN' StatementSequence
1291 { 'ELSIF' Expression 'THEN' StatementSequence }
1292 [ 'ELSE' StatementSequence ] 'END'
1299 static void IfStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1302 CaseStatement := 'CASE' Expression 'OF' Case { '|'
1306 first symbols:casetok
1311 static void CaseStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1314 CaseEndStatement := 'END' | 'ELSE' StatementSequence
1317 first symbols:elsetok, endtok
1322 static void CaseEndStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1325 Case := [ CaseLabelList ':' StatementSequence ]
1327 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1332 static void Case (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1335 CaseLabelList := CaseLabels { ',' CaseLabels }
1337 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1342 static void CaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1345 CaseLabels := ConstExpression [ '..' ConstExpression ]
1347 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1352 static void CaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1355 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
1358 first symbols:whiletok
1363 static void WhileStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1366 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
1369 first symbols:repeattok
1374 static void RepeatStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1377 ForStatement := 'FOR' Ident ':=' Expression 'TO'
1378 Expression [ 'BY' ConstExpression ]
1379 'DO' StatementSequence 'END'
1381 first symbols:fortok
1386 static void ForStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1389 LoopStatement := 'LOOP' StatementSequence 'END'
1391 first symbols:looptok
1396 static void LoopStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1399 WithStatement := 'WITH' Designator 'DO' StatementSequence
1402 first symbols:withtok
1407 static void WithStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1410 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
1415 first symbols:proceduretok
1420 static void ProcedureDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1423 ProcedureIdent := Ident
1424 % curproc := lookupSym (curident) %
1426 % enterScope (curproc) %
1429 first symbols:identtok
1434 static void ProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1437 DefProcedureIdent := Ident
1438 % curproc := lookupSym (curident) %
1441 first symbols:identtok
1446 static void DefProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1449 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
1450 '(' '(' Ident ')' ')' |
1453 first symbols:inlinetok, attributetok
1458 static void DefineBuiltinProcedure (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1461 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
1462 ( ProcedureIdent [ FormalParameters ]
1465 first symbols:proceduretok
1470 static void ProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1473 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
1475 first symbols:inlinetok, builtintok
1480 static void Builtin (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1483 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
1484 [ DefFormalParameters ]
1487 first symbols:proceduretok
1492 static void DefProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1495 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
1498 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
1503 static void ProcedureBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1506 Block := { Declaration } InitialBlock FinalBlock
1509 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
1514 static void Block (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1517 InitialBlock := [ 'BEGIN' InitialBlockBody ]
1519 first symbols:begintok
1524 static void InitialBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1527 FinalBlock := [ 'FINALLY' FinalBlockBody ]
1529 first symbols:finallytok
1534 static void FinalBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1537 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1539 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1544 static void InitialBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1547 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1549 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1554 static void FinalBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1557 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1559 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1564 static void ProcedureBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1567 NormalPart := StatementSequence
1569 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1574 static void NormalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1577 ExceptionalPart := StatementSequence
1579 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1584 static void ExceptionalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1587 Declaration := 'CONST' { ConstantDeclaration ';' } |
1588 'TYPE' { TypeDeclaration } |
1589 'VAR' { VariableDeclaration ';' } |
1590 ProcedureDeclaration ';' |
1591 ModuleDeclaration ';'
1593 first symbols:moduletok, proceduretok, vartok, typetok, consttok
1598 static void Declaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1601 DefFormalParameters := '('
1602 % paramEnter (curproc) %
1603 [ DefMultiFPSection ] ')'
1605 % paramLeave (curproc) %
1608 first symbols:lparatok
1613 static void DefFormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1616 DefMultiFPSection := DefExtendedFP |
1617 FPSection [ ';' DefMultiFPSection ]
1619 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1624 static void DefMultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1627 FormalParameters := '('
1628 % paramEnter (curproc) %
1629 [ MultiFPSection ] ')'
1630 % paramLeave (curproc) %
1633 first symbols:lparatok
1638 static void FormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1641 AttributeNoReturn := [ '' ]
1643 first symbols:ldirectivetok
1648 static void AttributeNoReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1651 AttributeUnused := [ '' ]
1653 first symbols:ldirectivetok
1658 static void AttributeUnused (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1661 MultiFPSection := ExtendedFP | FPSection [ ';'
1664 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1669 static void MultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1672 FPSection := NonVarFPSection |
1675 first symbols:vartok, identtok
1680 static void FPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1683 DefExtendedFP := DefOptArg | '...'
1685 first symbols:lsbratok, periodperiodperiodtok
1690 static void DefExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1693 ExtendedFP := OptArg | '...'
1695 first symbols:lsbratok, periodperiodperiodtok
1700 static void ExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1703 VarFPSection := 'VAR' PushIdentList ':' FormalType
1706 first symbols:vartok
1711 static void VarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1714 NonVarFPSection := PushIdentList ':' FormalType
1717 first symbols:identtok
1722 static void NonVarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1725 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
1728 first symbols:lsbratok
1733 static void OptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1736 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
1739 first symbols:lsbratok
1744 static void DefOptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1747 FormalType := { 'ARRAY' 'OF' } PushQualident
1749 first symbols:identtok, arraytok
1754 static void FormalType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1757 ModuleDeclaration := 'MODULE' Ident [ Priority ]
1758 ';' { Import } [ Export ]
1761 first symbols:moduletok
1766 static void ModuleDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1769 Priority := '[' ConstExpression ']'
1771 first symbols:lsbratok
1776 static void Priority (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1779 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
1780 'UNQUALIFIED' IdentList |
1783 first symbols:exporttok
1788 static void Export (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1791 FromIdentList := Ident { ',' Ident }
1793 first symbols:identtok
1798 static void FromIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1801 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
1804 first symbols:fromtok
1809 static void FromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1812 ImportModuleList := Ident { ',' Ident }
1814 first symbols:identtok
1819 static void ImportModuleList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1822 WithoutFromImport := 'IMPORT' ImportModuleList ';'
1824 first symbols:importtok
1829 static void WithoutFromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1832 Import := FromImport | WithoutFromImport
1834 first symbols:importtok, fromtok
1839 static void Import (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1842 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
1845 % curmodule := lookupDef (curident) %
1847 % addCommentBody (curmodule) %
1849 % enterScope (curmodule) %
1851 % resetConstExpPos (curmodule) %
1852 { Import } [ Export ] { Definition }
1854 % checkEndName (curmodule, curident, 'definition module') %
1859 first symbols:definitiontok
1864 static void DefinitionModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1867 PushQualident := Ident
1868 % typeExp := push (lookupSym (curident)) %
1872 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
1875 % IF NOT isDef (typeExp)
1877 ErrorArray ('the first component of this qualident must be a definition module')
1880 % typeExp := replace (lookupInScope (typeExp, curident)) ;
1883 ErrorArray ('identifier not found in definition module')
1887 first symbols:identtok
1892 static void PushQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1895 OptSubrange := [ SubrangeType ]
1897 first symbols:lsbratok
1902 static void OptSubrange (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1905 TypeEquiv := PushQualident OptSubrange
1907 first symbols:identtok
1912 static void TypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1915 EnumIdentList := Ident { ',' Ident }
1917 first symbols:identtok
1922 static void EnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1925 Enumeration := '(' EnumIdentList ')'
1927 first symbols:lparatok
1932 static void Enumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1935 SimpleType := TypeEquiv | Enumeration |
1938 first symbols:lsbratok, lparatok, identtok
1943 static void SimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1946 Type := SimpleType | ArrayType | RecordType |
1947 SetType | PointerType | ProcedureType
1949 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
1954 static void Type (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1957 TypeDeclaration := { Ident ( ';' | '=' Type Alignment
1960 first symbols:identtok
1965 static void TypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1968 DefQualident := Ident
1969 % typeExp := lookupSym (curident) %
1971 % IF NOT isDef (typeExp)
1973 ErrorArray ('the first component of this qualident must be a definition module')
1976 % typeExp := lookupInScope (typeExp, curident) ;
1979 ErrorArray ('identifier not found in definition module')
1983 first symbols:identtok
1988 static void DefQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1991 DefTypeEquiv := DefQualident OptSubrange
1993 first symbols:identtok
1998 static void DefTypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2001 DefEnumIdentList := Ident { ',' Ident }
2003 first symbols:identtok
2008 static void DefEnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2011 DefEnumeration := '(' DefEnumIdentList ')'
2013 first symbols:lparatok
2018 static void DefEnumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2021 DefSimpleType := DefTypeEquiv | DefEnumeration |
2024 first symbols:lsbratok, lparatok, identtok
2029 static void DefSimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2032 DefType := DefSimpleType | ArrayType |
2033 RecordType | SetType | PointerType |
2036 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
2041 static void DefType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2044 DefTypeDeclaration := { Ident ( ';' | '=' DefType
2047 first symbols:identtok
2052 static void DefTypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2055 DefConstantDeclaration := Ident '=' ConstExpression
2057 first symbols:identtok
2062 static void DefConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2065 Definition := 'CONST' { DefConstantDeclaration ';' } |
2066 'TYPE' { DefTypeDeclaration } |
2067 'VAR' { VariableDeclaration ';' } |
2068 DefProcedureHeading ';'
2070 first symbols:proceduretok, vartok, typetok, consttok
2075 static void Definition (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2078 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
2081 first symbols:asmtok
2086 static void AsmStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2089 AsmOperands := string [ AsmOperandSpec ]
2091 first symbols:stringtok
2096 static void AsmOperands (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2099 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
2102 first symbols:colontok
2107 static void AsmOperandSpec (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2110 AsmList := [ AsmElement ] { ',' AsmElement }
2112 first symbols:lsbratok, stringtok, commatok
2117 static void AsmList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2120 NamedOperand := '[' Ident ']'
2122 first symbols:lsbratok
2127 static void NamedOperand (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2130 AsmOperandName := [ NamedOperand ]
2132 first symbols:lsbratok
2137 static void AsmOperandName (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2140 AsmElement := AsmOperandName string '(' Expression
2143 first symbols:stringtok, lsbratok
2148 static void AsmElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2151 TrashList := [ string ] { ',' string }
2153 first symbols:commatok, stringtok
2158 static void TrashList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2165 static decl_node
push (decl_node n
)
2167 return static_cast<decl_node
> (mcStack_push (stk
, reinterpret_cast<void *> (n
)));
2168 /* static analysis guarentees a RETURN statement will be used before here. */
2169 __builtin_unreachable ();
2177 static decl_node
pop (void)
2179 return static_cast<decl_node
> (mcStack_pop (stk
));
2180 /* static analysis guarentees a RETURN statement will be used before here. */
2181 __builtin_unreachable ();
2189 static decl_node
replace (decl_node n
)
2191 return static_cast<decl_node
> (mcStack_replace (stk
, reinterpret_cast<void *> (n
)));
2192 /* static analysis guarentees a RETURN statement will be used before here. */
2193 __builtin_unreachable ();
2198 peep - returns the top node on the stack without removing it.
2201 static decl_node
peep (void)
2203 return push (pop ());
2204 /* static analysis guarentees a RETURN statement will be used before here. */
2205 __builtin_unreachable ();
2210 depth - returns the depth of the stack.
2213 static unsigned int depth (void)
2215 return mcStack_depth (stk
);
2216 /* static analysis guarentees a RETURN statement will be used before here. */
2217 __builtin_unreachable ();
2225 static void checkDuplicate (unsigned int b
)
2234 static void ErrorString (DynamicStrings_String s
)
2236 mcError_errorStringAt (s
, mcLexBuf_getTokenNo ());
2245 static void ErrorArray (const char *a_
, unsigned int _a_high
)
2249 /* make a local copy of each unbounded array. */
2250 memcpy (a
, a_
, _a_high
+1);
2252 ErrorString (DynamicStrings_InitString ((const char *) a
, _a_high
));
2260 static void pushNunbounded (unsigned int c
)
2269 subrange
= decl_makeSubrange (static_cast<decl_node
> (NULL
), static_cast<decl_node
> (NULL
));
2270 decl_putSubrangeType (subrange
, decl_getCardinal ());
2271 array
= decl_makeArray (subrange
, type
);
2272 decl_putUnbounded (array
);
2273 type
= push (array
);
2280 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
2283 static decl_node
makeIndexedArray (unsigned int c
, decl_node t
)
2289 t
= decl_makeArray (pop (), t
);
2293 /* static analysis guarentees a RETURN statement will be used before here. */
2294 __builtin_unreachable ();
2299 importInto - from, m, import, name, into module, current.
2300 It checks to see if curident is an enumeration type
2301 and if so automatically includes all enumeration fields
2305 static void importInto (decl_node m
, nameKey_Name name
, decl_node current
)
2310 mcDebug_assert (decl_isDef (m
));
2311 mcDebug_assert (((decl_isDef (current
)) || (decl_isModule (current
))) || (decl_isImp (current
)));
2312 s
= decl_lookupExported (m
, name
);
2315 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));
2319 o
= decl_import (current
, s
);
2322 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));
2329 checkEndName - if module does not have, name, then issue an error containing, desc.
2332 static void checkEndName (decl_node module
, nameKey_Name name
, const char *desc_
, unsigned int _desc_high
)
2334 DynamicStrings_String s
;
2335 char desc
[_desc_high
+1];
2337 /* make a local copy of each unbounded array. */
2338 memcpy (desc
, desc_
, _desc_high
+1);
2340 if ((decl_getSymName (module
)) != name
)
2342 s
= DynamicStrings_InitString ((const char *) "inconsistent module name found with this ", 41);
2343 s
= DynamicStrings_ConCat (s
, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) desc
, _desc_high
)));
2350 DescribeStop - issues a message explaining what tokens were expected
2353 static DynamicStrings_String
DescribeStop (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
2356 DynamicStrings_String str
;
2357 DynamicStrings_String message
;
2360 message
= DynamicStrings_InitString ((const char *) "", 0);
2361 if ((((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2363 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "string", 6)));
2366 if ((((1 << (mcReserved_realtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2368 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "real number", 11)));
2371 if ((((1 << (mcReserved_identtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2373 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "identifier", 10)));
2376 if ((((1 << (mcReserved_integertok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2378 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "integer number", 14)));
2381 if ((((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2383 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__INLINE__", 10)));
2386 if ((((1 << (mcReserved_builtintok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2388 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__BUILTIN__", 11)));
2391 if ((((1 << (mcReserved_attributetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2393 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__ATTRIBUTE__", 13)));
2396 if ((((1 << (mcReserved_filetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2398 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__FILE__", 8)));
2401 if ((((1 << (mcReserved_linetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2403 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__LINE__", 8)));
2406 if ((((1 << (mcReserved_datetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2408 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__DATE__", 8)));
2411 if ((((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2413 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "...", 3)));
2416 if ((((1 << (mcReserved_volatiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2418 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VOLATILE", 8)));
2421 if ((((1 << (mcReserved_asmtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2423 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ASM", 3)));
2426 if ((((1 << (mcReserved_withtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2428 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WITH", 4)));
2431 if ((((1 << (mcReserved_whiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2433 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WHILE", 5)));
2436 if ((((1 << (mcReserved_vartok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2438 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VAR", 3)));
2441 if ((((1 << (mcReserved_untiltok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2443 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNTIL", 5)));
2446 if ((((1 << (mcReserved_typetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2448 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TYPE", 4)));
2451 if ((((1 << (mcReserved_totok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2453 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TO", 2)));
2456 if ((((1 << (mcReserved_thentok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2458 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "THEN", 4)));
2461 if ((((1 << (mcReserved_settok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2463 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "SET", 3)));
2466 if ((((1 << (mcReserved_returntok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2468 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETURN", 6)));
2471 if ((((1 << (mcReserved_retrytok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2473 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETRY", 5)));
2476 if ((((1 << (mcReserved_repeattok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2478 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REPEAT", 6)));
2481 if ((((1 << (mcReserved_remtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2483 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REM", 3)));
2486 if ((((1 << (mcReserved_recordtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2488 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RECORD", 6)));
2491 if ((((1 << (mcReserved_unqualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2493 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNQUALIFIED", 11)));
2496 if ((((1 << (mcReserved_qualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2498 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "QUALIFIED", 9)));
2501 if ((((1 << (mcReserved_proceduretok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2503 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PROCEDURE", 9)));
2506 if ((((1 << (mcReserved_pointertok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2508 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "POINTER", 7)));
2511 if ((((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2513 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PACKEDSET", 9)));
2516 if ((((1 << (mcReserved_ortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2518 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OR", 2)));
2521 if ((((1 << (mcReserved_oftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2523 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OF", 2)));
2526 if ((((1 << (mcReserved_nottok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2528 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "NOT", 3)));
2531 if ((((1 << (mcReserved_moduletok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2533 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MODULE", 6)));
2536 if ((((1 << (mcReserved_modtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2538 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MOD", 3)));
2541 if ((((1 << (mcReserved_looptok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2543 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "LOOP", 4)));
2546 if ((((1 << (mcReserved_intok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2548 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IN", 2)));
2551 if ((((1 << (mcReserved_importtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2553 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPORT", 6)));
2556 if ((((1 << (mcReserved_implementationtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2558 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPLEMENTATION", 14)));
2561 if ((((1 << (mcReserved_iftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2563 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IF", 2)));
2566 if ((((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2568 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FROM", 4)));
2571 if ((((1 << (mcReserved_fortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2573 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FOR", 3)));
2576 if ((((1 << (mcReserved_finallytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2578 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FINALLY", 7)));
2581 if ((((1 << (mcReserved_exporttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2583 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXPORT", 6)));
2586 if ((((1 << (mcReserved_exittok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2588 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXIT", 4)));
2591 if ((((1 << (mcReserved_excepttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2593 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXCEPT", 6)));
2596 if ((((1 << (mcReserved_endtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2598 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "END", 3)));
2601 if ((((1 << (mcReserved_elsiftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2603 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSIF", 5)));
2606 if ((((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2608 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSE", 4)));
2611 if ((((1 << (mcReserved_dotok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2613 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DO", 2)));
2616 if ((((1 << (mcReserved_divtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2618 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DIV", 3)));
2621 if ((((1 << (mcReserved_definitiontok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2623 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DEFINITION", 10)));
2626 if ((((1 << (mcReserved_consttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2628 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CONST", 5)));
2631 if ((((1 << (mcReserved_casetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2633 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CASE", 4)));
2636 if ((((1 << (mcReserved_bytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2638 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BY", 2)));
2641 if ((((1 << (mcReserved_begintok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2643 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BEGIN", 5)));
2646 if ((((1 << (mcReserved_arraytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2648 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ARRAY", 5)));
2651 if ((((1 << (mcReserved_andtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2653 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "AND", 3)));
2656 if ((((1 << (mcReserved_colontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2658 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":", 1)));
2661 if ((((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2663 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "..", 2)));
2666 if ((((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2668 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*>", 2)));
2671 if ((((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2673 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<*", 2)));
2676 if ((((1 << (mcReserved_greaterequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2678 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">=", 2)));
2681 if ((((1 << (mcReserved_lessequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2683 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<=", 2)));
2686 if ((((1 << (mcReserved_lessgreatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2688 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<>", 2)));
2691 if ((((1 << (mcReserved_hashtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2693 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "#", 1)));
2696 if ((((1 << (mcReserved_equaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2698 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "=", 1)));
2701 if ((((1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2703 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "^", 1)));
2706 if ((((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2708 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ";", 1)));
2711 if ((((1 << (mcReserved_commatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2713 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ",", 1)));
2716 if ((((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2718 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1)));
2721 if ((((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2723 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "&", 1)));
2726 if ((((1 << (mcReserved_dividetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2728 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "/", 1)));
2731 if ((((1 << (mcReserved_timestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2733 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*", 1)));
2736 if ((((1 << (mcReserved_minustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2738 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-", 1)));
2741 if ((((1 << (mcReserved_plustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2743 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "+", 1)));
2746 if ((((1 << (mcReserved_doublequotestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2748 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '`'), '"'), '\''), ',');
2751 if ((((1 << (mcReserved_singlequotetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2753 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '"'), '\''), '"'), ',');
2756 if ((((1 << (mcReserved_greatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2758 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">", 1)));
2761 if ((((1 << (mcReserved_lesstok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2763 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<", 1)));
2766 if ((((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2768 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ")", 1)));
2771 if ((((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2773 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "(", 1)));
2776 if ((((1 << (mcReserved_rcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2778 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "}", 1)));
2781 if ((((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2783 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{", 1)));
2786 if ((((1 << (mcReserved_rsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2788 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "]", 1)));
2791 if ((((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2793 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "[", 1)));
2796 if ((((1 << (mcReserved_bartok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2798 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "|", 1)));
2801 if ((((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2803 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":=", 2)));
2806 if ((((1 << (mcReserved_eoftok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2808 /* eoftok has no token name (needed to generate error messages) */
2811 str
= DynamicStrings_InitString ((const char *) " syntax error", 13);
2812 message
= DynamicStrings_KillString (message
);
2816 /* avoid dangling else. */
2817 str
= DynamicStrings_ConCat (message
, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
2821 /* avoid dangling else. */
2822 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message
);
2823 message
= DynamicStrings_KillString (message
);
2826 /* static analysis guarentees a RETURN statement will be used before here. */
2827 __builtin_unreachable ();
2832 DescribeError - issues a message explaining what tokens were expected
2835 static void DescribeError (void)
2837 DynamicStrings_String str
;
2839 str
= DynamicStrings_InitString ((const char *) "", 0);
2840 switch (mcLexBuf_currenttoken
)
2842 case mcReserved_stringtok
:
2843 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found string", 26), DynamicStrings_Mark (str
));
2846 case mcReserved_realtok
:
2847 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found real number", 31), DynamicStrings_Mark (str
));
2850 case mcReserved_identtok
:
2851 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found identifier", 30), DynamicStrings_Mark (str
));
2854 case mcReserved_integertok
:
2855 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found integer number", 34), DynamicStrings_Mark (str
));
2858 case mcReserved_inlinetok
:
2859 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __INLINE__", 30), DynamicStrings_Mark (str
));
2862 case mcReserved_builtintok
:
2863 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __BUILTIN__", 31), DynamicStrings_Mark (str
));
2866 case mcReserved_attributetok
:
2867 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __ATTRIBUTE__", 33), DynamicStrings_Mark (str
));
2870 case mcReserved_filetok
:
2871 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __FILE__", 28), DynamicStrings_Mark (str
));
2874 case mcReserved_linetok
:
2875 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __LINE__", 28), DynamicStrings_Mark (str
));
2878 case mcReserved_datetok
:
2879 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __DATE__", 28), DynamicStrings_Mark (str
));
2882 case mcReserved_periodperiodperiodtok
:
2883 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ...", 23), DynamicStrings_Mark (str
));
2886 case mcReserved_volatiletok
:
2887 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VOLATILE", 28), DynamicStrings_Mark (str
));
2890 case mcReserved_asmtok
:
2891 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ASM", 23), DynamicStrings_Mark (str
));
2894 case mcReserved_withtok
:
2895 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WITH", 24), DynamicStrings_Mark (str
));
2898 case mcReserved_whiletok
:
2899 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WHILE", 25), DynamicStrings_Mark (str
));
2902 case mcReserved_vartok
:
2903 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VAR", 23), DynamicStrings_Mark (str
));
2906 case mcReserved_untiltok
:
2907 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNTIL", 25), DynamicStrings_Mark (str
));
2910 case mcReserved_typetok
:
2911 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TYPE", 24), DynamicStrings_Mark (str
));
2914 case mcReserved_totok
:
2915 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TO", 22), DynamicStrings_Mark (str
));
2918 case mcReserved_thentok
:
2919 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found THEN", 24), DynamicStrings_Mark (str
));
2922 case mcReserved_settok
:
2923 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found SET", 23), DynamicStrings_Mark (str
));
2926 case mcReserved_returntok
:
2927 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETURN", 26), DynamicStrings_Mark (str
));
2930 case mcReserved_retrytok
:
2931 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETRY", 25), DynamicStrings_Mark (str
));
2934 case mcReserved_repeattok
:
2935 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REPEAT", 26), DynamicStrings_Mark (str
));
2938 case mcReserved_remtok
:
2939 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REM", 23), DynamicStrings_Mark (str
));
2942 case mcReserved_recordtok
:
2943 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RECORD", 26), DynamicStrings_Mark (str
));
2946 case mcReserved_unqualifiedtok
:
2947 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNQUALIFIED", 31), DynamicStrings_Mark (str
));
2950 case mcReserved_qualifiedtok
:
2951 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found QUALIFIED", 29), DynamicStrings_Mark (str
));
2954 case mcReserved_proceduretok
:
2955 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PROCEDURE", 29), DynamicStrings_Mark (str
));
2958 case mcReserved_pointertok
:
2959 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found POINTER", 27), DynamicStrings_Mark (str
));
2962 case mcReserved_packedsettok
:
2963 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PACKEDSET", 29), DynamicStrings_Mark (str
));
2966 case mcReserved_ortok
:
2967 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OR", 22), DynamicStrings_Mark (str
));
2970 case mcReserved_oftok
:
2971 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OF", 22), DynamicStrings_Mark (str
));
2974 case mcReserved_nottok
:
2975 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found NOT", 23), DynamicStrings_Mark (str
));
2978 case mcReserved_moduletok
:
2979 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MODULE", 26), DynamicStrings_Mark (str
));
2982 case mcReserved_modtok
:
2983 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MOD", 23), DynamicStrings_Mark (str
));
2986 case mcReserved_looptok
:
2987 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found LOOP", 24), DynamicStrings_Mark (str
));
2990 case mcReserved_intok
:
2991 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IN", 22), DynamicStrings_Mark (str
));
2994 case mcReserved_importtok
:
2995 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPORT", 26), DynamicStrings_Mark (str
));
2998 case mcReserved_implementationtok
:
2999 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPLEMENTATION", 34), DynamicStrings_Mark (str
));
3002 case mcReserved_iftok
:
3003 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IF", 22), DynamicStrings_Mark (str
));
3006 case mcReserved_fromtok
:
3007 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FROM", 24), DynamicStrings_Mark (str
));
3010 case mcReserved_fortok
:
3011 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FOR", 23), DynamicStrings_Mark (str
));
3014 case mcReserved_finallytok
:
3015 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FINALLY", 27), DynamicStrings_Mark (str
));
3018 case mcReserved_exporttok
:
3019 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXPORT", 26), DynamicStrings_Mark (str
));
3022 case mcReserved_exittok
:
3023 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXIT", 24), DynamicStrings_Mark (str
));
3026 case mcReserved_excepttok
:
3027 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXCEPT", 26), DynamicStrings_Mark (str
));
3030 case mcReserved_endtok
:
3031 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found END", 23), DynamicStrings_Mark (str
));
3034 case mcReserved_elsiftok
:
3035 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSIF", 25), DynamicStrings_Mark (str
));
3038 case mcReserved_elsetok
:
3039 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSE", 24), DynamicStrings_Mark (str
));
3042 case mcReserved_dotok
:
3043 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DO", 22), DynamicStrings_Mark (str
));
3046 case mcReserved_divtok
:
3047 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DIV", 23), DynamicStrings_Mark (str
));
3050 case mcReserved_definitiontok
:
3051 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DEFINITION", 30), DynamicStrings_Mark (str
));
3054 case mcReserved_consttok
:
3055 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CONST", 25), DynamicStrings_Mark (str
));
3058 case mcReserved_casetok
:
3059 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CASE", 24), DynamicStrings_Mark (str
));
3062 case mcReserved_bytok
:
3063 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BY", 22), DynamicStrings_Mark (str
));
3066 case mcReserved_begintok
:
3067 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BEGIN", 25), DynamicStrings_Mark (str
));
3070 case mcReserved_arraytok
:
3071 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ARRAY", 25), DynamicStrings_Mark (str
));
3074 case mcReserved_andtok
:
3075 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found AND", 23), DynamicStrings_Mark (str
));
3078 case mcReserved_colontok
:
3079 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :", 21), DynamicStrings_Mark (str
));
3082 case mcReserved_periodperiodtok
:
3083 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ..", 22), DynamicStrings_Mark (str
));
3086 case mcReserved_rdirectivetok
:
3087 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *>", 22), DynamicStrings_Mark (str
));
3090 case mcReserved_ldirectivetok
:
3091 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <*", 22), DynamicStrings_Mark (str
));
3094 case mcReserved_greaterequaltok
:
3095 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >=", 22), DynamicStrings_Mark (str
));
3098 case mcReserved_lessequaltok
:
3099 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <=", 22), DynamicStrings_Mark (str
));
3102 case mcReserved_lessgreatertok
:
3103 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <>", 22), DynamicStrings_Mark (str
));
3106 case mcReserved_hashtok
:
3107 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found #", 21), DynamicStrings_Mark (str
));
3110 case mcReserved_equaltok
:
3111 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found =", 21), DynamicStrings_Mark (str
));
3114 case mcReserved_uparrowtok
:
3115 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ^", 21), DynamicStrings_Mark (str
));
3118 case mcReserved_semicolontok
:
3119 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ;", 21), DynamicStrings_Mark (str
));
3122 case mcReserved_commatok
:
3123 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ,", 21), DynamicStrings_Mark (str
));
3126 case mcReserved_periodtok
:
3127 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found .", 21), DynamicStrings_Mark (str
));
3130 case mcReserved_ambersandtok
:
3131 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found &", 21), DynamicStrings_Mark (str
));
3134 case mcReserved_dividetok
:
3135 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found /", 21), DynamicStrings_Mark (str
));
3138 case mcReserved_timestok
:
3139 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *", 21), DynamicStrings_Mark (str
));
3142 case mcReserved_minustok
:
3143 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found -", 21), DynamicStrings_Mark (str
));
3146 case mcReserved_plustok
:
3147 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found +", 21), DynamicStrings_Mark (str
));
3150 case mcReserved_doublequotestok
:
3151 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str
));
3154 case mcReserved_singlequotetok
:
3155 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str
));
3158 case mcReserved_greatertok
:
3159 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >", 21), DynamicStrings_Mark (str
));
3162 case mcReserved_lesstok
:
3163 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <", 21), DynamicStrings_Mark (str
));
3166 case mcReserved_rparatok
:
3167 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found )", 21), DynamicStrings_Mark (str
));
3170 case mcReserved_lparatok
:
3171 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found (", 21), DynamicStrings_Mark (str
));
3174 case mcReserved_rcbratok
:
3175 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found }", 21), DynamicStrings_Mark (str
));
3178 case mcReserved_lcbratok
:
3179 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {", 21), DynamicStrings_Mark (str
));
3182 case mcReserved_rsbratok
:
3183 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ]", 21), DynamicStrings_Mark (str
));
3186 case mcReserved_lsbratok
:
3187 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found [", 21), DynamicStrings_Mark (str
));
3190 case mcReserved_bartok
:
3191 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found |", 21), DynamicStrings_Mark (str
));
3194 case mcReserved_becomestok
:
3195 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :=", 22), DynamicStrings_Mark (str
));
3198 case mcReserved_eoftok
:
3199 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ", 20), DynamicStrings_Mark (str
));
3211 SyntaxError - after a syntax error we skip all tokens up until we reach
3215 static void SyntaxError (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3220 mcPrintf_printf0 ((const char *) "\\nskipping token *** ", 21);
3223 yes the ORD(currenttoken) looks ugly, but it is *much* safer than
3224 using currenttoken<sometok as a change to the ordering of the
3225 token declarations below would cause this to break. Using ORD() we are
3226 immune from such changes
3228 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)))))
3230 mcLexBuf_getToken ();
3234 mcPrintf_printf0 ((const char *) " ***\\n", 6);
3243 static void SyntaxCheck (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3245 /* and again (see above re: ORD)
3247 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)))))
3249 SyntaxError (stopset0
, stopset1
, stopset2
);
3255 WarnMissingToken - generates a warning message about a missing token, t.
3258 static void WarnMissingToken (mcReserved_toktype t
)
3263 DynamicStrings_String str
;
3265 s0
= (mcp4_SetOfStop0
) 0;
3266 s1
= (mcp4_SetOfStop1
) 0;
3267 s2
= (mcp4_SetOfStop2
) 0;
3268 if ( ((unsigned int) (t
)) < 32)
3270 s0
= (mcp4_SetOfStop0
) ((1 << (t
-mcReserved_eoftok
)));
3272 else if ( ((unsigned int) (t
)) < 64)
3274 /* avoid dangling else. */
3275 s1
= (mcp4_SetOfStop1
) ((1 << (t
-mcReserved_arraytok
)));
3279 /* avoid dangling else. */
3280 s2
= (mcp4_SetOfStop2
) ((1 << (t
-mcReserved_recordtok
)));
3282 str
= DescribeStop (s0
, s1
, s2
);
3283 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error,", 13), DynamicStrings_Mark (str
));
3284 mcError_errorStringAt (str
, mcLexBuf_getTokenNo ());
3289 MissingToken - generates a warning message about a missing token, t.
3292 static void MissingToken (mcReserved_toktype t
)
3294 WarnMissingToken (t
);
3295 if ((((t
!= mcReserved_identtok
) && (t
!= mcReserved_integertok
)) && (t
!= mcReserved_realtok
)) && (t
!= mcReserved_stringtok
))
3299 mcPrintf_printf0 ((const char *) "inserting token\\n", 17);
3301 mcLexBuf_insertToken (t
);
3310 static unsigned int CheckAndInsert (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3312 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))))
3314 WarnMissingToken (t
);
3315 mcLexBuf_insertTokenAndRewind (t
);
3322 /* static analysis guarentees a RETURN statement will be used before here. */
3323 __builtin_unreachable ();
3331 static unsigned int InStopSet (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3333 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))))
3341 /* static analysis guarentees a RETURN statement will be used before here. */
3342 __builtin_unreachable ();
3347 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
3348 If it is not then it will insert a token providing the token
3349 is one of ; ] ) } . OF END ,
3351 if the stopset contains <identtok> then we do not insert a token
3354 static void PeepToken (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3356 /* and again (see above re: ORD)
3358 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
))))
3360 /* SyntaxCheck would fail since currentoken is not part of the stopset
3361 we check to see whether any of currenttoken might be a commonly omitted token */
3362 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
)))
3372 static void Expect (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3374 if (mcLexBuf_currenttoken
== t
)
3376 /* avoid dangling else. */
3377 mcLexBuf_getToken ();
3380 PeepToken (stopset0
, stopset1
, stopset2
);
3387 SyntaxCheck (stopset0
, stopset1
, stopset2
);
3392 Ident - error checking varient of Ident
3395 static void Ident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3397 curident
= nameKey_makekey (mcLexBuf_currentstring
);
3398 Expect (mcReserved_identtok
, stopset0
, stopset1
, stopset2
);
3406 static void string (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3408 curstring
= nameKey_makekey (mcLexBuf_currentstring
);
3409 Expect (mcReserved_stringtok
, stopset0
, stopset1
, stopset2
);
3417 static void Integer (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3421 n
= push (decl_makeLiteralInt (nameKey_makekey (mcLexBuf_currentstring
)));
3422 Expect (mcReserved_integertok
, stopset0
, stopset1
, stopset2
);
3430 static void Real (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3434 n
= push (decl_makeLiteralReal (nameKey_makekey (mcLexBuf_currentstring
)));
3435 Expect (mcReserved_realtok
, stopset0
, stopset1
, stopset2
);
3440 FileUnit := DefinitionModule |
3441 ImplementationOrProgramModule
3443 first symbols:implementationtok, moduletok, definitiontok
3448 static void FileUnit (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3450 if (mcLexBuf_currenttoken
== mcReserved_definitiontok
)
3452 DefinitionModule (stopset0
, stopset1
, stopset2
);
3454 else if (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_implementationtok
-mcReserved_arraytok
)) | (1 << (mcReserved_moduletok
-mcReserved_arraytok
))))) != 0)))
3456 /* avoid dangling else. */
3457 ImplementationOrProgramModule (stopset0
, stopset1
, stopset2
);
3461 /* avoid dangling else. */
3462 ErrorArray ((const char *) "expecting one of: IMPLEMENTATION MODULE DEFINITION", 50);
3468 ProgramModule := 'MODULE' Ident
3469 % curmodule := lookupModule (curident) %
3471 % enterScope (curmodule) %
3473 % resetConstExpPos (curmodule) %
3474 [ Priority ] ';' { Import } Block
3476 % checkEndName (curmodule, curident, 'program module') %
3481 first symbols:moduletok
3486 static void ProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3488 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3489 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3490 curmodule
= decl_lookupModule (curident
);
3491 decl_enterScope (curmodule
);
3492 decl_resetConstExpPos (curmodule
);
3493 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
3495 Priority (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3497 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
3498 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
3500 Import (stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
3503 Block (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3504 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3505 checkEndName (curmodule
, curident
, (const char *) "program module", 14);
3507 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
3512 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
3514 % curmodule := lookupImp (curident) %
3516 % enterScope (lookupDef (curident)) %
3518 % enterScope (curmodule) %
3520 % resetConstExpPos (curmodule) %
3521 [ Priority ] ';' { Import }
3523 % checkEndName (curmodule, curident, 'implementation module') %
3525 % leaveScope ; leaveScope %
3528 first symbols:implementationtok
3533 static void ImplementationModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3535 Expect (mcReserved_implementationtok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_moduletok
-mcReserved_arraytok
))), stopset2
);
3536 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3537 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3538 curmodule
= decl_lookupImp (curident
);
3539 decl_enterScope (decl_lookupDef (curident
));
3540 decl_enterScope (curmodule
);
3541 decl_resetConstExpPos (curmodule
);
3542 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
3544 Priority (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3546 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
3547 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
3549 Import (stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
3552 Block (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3553 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3554 checkEndName (curmodule
, curident
, (const char *) "implementation module", 21);
3557 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
3562 ImplementationOrProgramModule := ImplementationModule |
3565 first symbols:moduletok, implementationtok
3570 static void ImplementationOrProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3572 if (mcLexBuf_currenttoken
== mcReserved_implementationtok
)
3574 ImplementationModule (stopset0
, stopset1
, stopset2
);
3576 else if (mcLexBuf_currenttoken
== mcReserved_moduletok
)
3578 /* avoid dangling else. */
3579 ProgramModule (stopset0
, stopset1
, stopset2
);
3583 /* avoid dangling else. */
3584 ErrorArray ((const char *) "expecting one of: MODULE IMPLEMENTATION", 39);
3590 Number := Integer | Real
3592 first symbols:realtok, integertok
3597 static void Number (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3599 if (mcLexBuf_currenttoken
== mcReserved_integertok
)
3601 Integer (stopset0
, stopset1
, stopset2
);
3603 else if (mcLexBuf_currenttoken
== mcReserved_realtok
)
3605 /* avoid dangling else. */
3606 Real (stopset0
, stopset1
, stopset2
);
3610 /* avoid dangling else. */
3611 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
3617 Qualident := Ident { '.' Ident }
3619 first symbols:identtok
3624 static void Qualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3626 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3627 while (mcLexBuf_currenttoken
== mcReserved_periodtok
)
3629 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3630 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3637 ConstantDeclaration :=
3638 % VAR d, e: node ; %
3640 % d := lookupSym (curident) %
3644 % assert (isConst (d)) %
3649 first symbols:identtok
3654 static void ConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3659 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3660 d
= decl_lookupSym (curident
);
3661 Expect (mcReserved_equaltok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3662 ConstExpression (stopset0
, stopset1
, stopset2
);
3664 mcDebug_assert (decl_isConst (d
));
3665 decl_putConst (d
, e
);
3671 % VAR c, l, r: node ; op: toktype ; d: CARDINAL ; %
3675 % c := push (getNextConstExp ()) %
3677 % op := currenttoken %
3678 [ Relation SimpleConstExpr
3683 % l := push (makeBinaryTok (op, l, r)) %
3685 % c := replace (fixupConstExp (c, pop ())) %
3687 % assert (d+1 = depth ()) %
3690 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3695 static void ConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3700 mcReserved_toktype op
;
3704 c
= push (decl_getNextConstExp ());
3705 SimpleConstExpr (stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_intok
-mcReserved_arraytok
))), stopset2
);
3706 op
= mcLexBuf_currenttoken
;
3707 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
))
3709 Relation (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3710 SimpleConstExpr (stopset0
, stopset1
, stopset2
);
3713 l
= push (decl_makeBinaryTok (op
, l
, r
));
3715 c
= replace (decl_fixupConstExp (c
, pop ()));
3716 mcDebug_assert ((d
+1) == (depth ()));
3721 Relation := '=' | '#' | '<>' | '<' | '<=' |
3724 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
3729 static void Relation (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3731 if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
3733 Expect (mcReserved_equaltok
, stopset0
, stopset1
, stopset2
);
3735 else if (mcLexBuf_currenttoken
== mcReserved_hashtok
)
3737 /* avoid dangling else. */
3738 Expect (mcReserved_hashtok
, stopset0
, stopset1
, stopset2
);
3740 else if (mcLexBuf_currenttoken
== mcReserved_lessgreatertok
)
3742 /* avoid dangling else. */
3743 Expect (mcReserved_lessgreatertok
, stopset0
, stopset1
, stopset2
);
3745 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
3747 /* avoid dangling else. */
3748 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
);
3750 else if (mcLexBuf_currenttoken
== mcReserved_lessequaltok
)
3752 /* avoid dangling else. */
3753 Expect (mcReserved_lessequaltok
, stopset0
, stopset1
, stopset2
);
3755 else if (mcLexBuf_currenttoken
== mcReserved_greatertok
)
3757 /* avoid dangling else. */
3758 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
3760 else if (mcLexBuf_currenttoken
== mcReserved_greaterequaltok
)
3762 /* avoid dangling else. */
3763 Expect (mcReserved_greaterequaltok
, stopset0
, stopset1
, stopset2
);
3765 else if (mcLexBuf_currenttoken
== mcReserved_intok
)
3767 /* avoid dangling else. */
3768 Expect (mcReserved_intok
, stopset0
, stopset1
, stopset2
);
3772 /* avoid dangling else. */
3773 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
3780 % VAR op: toktype ; n: node ; %
3784 % op := currenttoken %
3785 AddOperator ConstTerm
3786 % n := makeBinaryTok (op, n, pop ()) %
3791 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3796 static void SimpleConstExpr (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3798 mcReserved_toktype op
;
3801 UnaryOrConstTerm (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
3803 while (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_ortok
))
3805 op
= mcLexBuf_currenttoken
;
3806 AddOperator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3807 ConstTerm (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
3808 n
= decl_makeBinaryTok (op
, n
, pop ());
3819 % n := push (makeUnaryTok (plustok, pop ())) %
3821 % n := push (makeUnaryTok (minustok, pop ())) %
3824 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3829 static void UnaryOrConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3833 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
3835 Expect (mcReserved_plustok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3836 ConstTerm (stopset0
, stopset1
, stopset2
);
3837 n
= push (decl_makeUnaryTok (mcReserved_plustok
, pop ()));
3839 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
3841 /* avoid dangling else. */
3842 Expect (mcReserved_minustok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3843 ConstTerm (stopset0
, stopset1
, stopset2
);
3844 n
= push (decl_makeUnaryTok (mcReserved_minustok
, pop ()));
3846 else if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
3848 /* avoid dangling else. */
3849 ConstTerm (stopset0
, stopset1
, stopset2
);
3853 /* avoid dangling else. */
3854 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ { string identifier - +", 88);
3860 AddOperator := '+' | '-' | 'OR'
3862 first symbols:ortok, minustok, plustok
3867 static void AddOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3869 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
3871 Expect (mcReserved_plustok
, stopset0
, stopset1
, stopset2
);
3873 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
3875 /* avoid dangling else. */
3876 Expect (mcReserved_minustok
, stopset0
, stopset1
, stopset2
);
3878 else if (mcLexBuf_currenttoken
== mcReserved_ortok
)
3880 /* avoid dangling else. */
3881 Expect (mcReserved_ortok
, stopset0
, stopset1
, stopset2
);
3885 /* avoid dangling else. */
3886 ErrorArray ((const char *) "expecting one of: OR - +", 24);
3893 % VAR op: toktype ; n: node ; %
3897 % op := currenttoken %
3898 MulOperator ConstFactor
3899 % n := makeBinaryTok (op, n, pop ()) %
3904 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
3909 static void ConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3911 mcReserved_toktype op
;
3914 ConstFactor (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_timestok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_modtok
-mcReserved_arraytok
)) | (1 << (mcReserved_divtok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
3916 while ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))))) != 0)))) || (mcLexBuf_currenttoken
== mcReserved_remtok
))
3918 op
= mcLexBuf_currenttoken
;
3919 MulOperator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3920 ConstFactor (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_timestok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_ambersandtok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
3921 n
= decl_makeBinaryTok (op
, n
, pop ());
3929 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
3932 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
3937 static void MulOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3939 if (mcLexBuf_currenttoken
== mcReserved_timestok
)
3941 Expect (mcReserved_timestok
, stopset0
, stopset1
, stopset2
);
3943 else if (mcLexBuf_currenttoken
== mcReserved_dividetok
)
3945 /* avoid dangling else. */
3946 Expect (mcReserved_dividetok
, stopset0
, stopset1
, stopset2
);
3948 else if (mcLexBuf_currenttoken
== mcReserved_divtok
)
3950 /* avoid dangling else. */
3951 Expect (mcReserved_divtok
, stopset0
, stopset1
, stopset2
);
3953 else if (mcLexBuf_currenttoken
== mcReserved_modtok
)
3955 /* avoid dangling else. */
3956 Expect (mcReserved_modtok
, stopset0
, stopset1
, stopset2
);
3958 else if (mcLexBuf_currenttoken
== mcReserved_remtok
)
3960 /* avoid dangling else. */
3961 Expect (mcReserved_remtok
, stopset0
, stopset1
, stopset2
);
3963 else if (mcLexBuf_currenttoken
== mcReserved_andtok
)
3965 /* avoid dangling else. */
3966 Expect (mcReserved_andtok
, stopset0
, stopset1
, stopset2
);
3968 else if (mcLexBuf_currenttoken
== mcReserved_ambersandtok
)
3970 /* avoid dangling else. */
3971 Expect (mcReserved_ambersandtok
, stopset0
, stopset1
, stopset2
);
3975 /* avoid dangling else. */
3976 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
3982 NotConstFactor := 'NOT' ConstFactor
3985 % n := push (makeUnaryTok (nottok, pop ())) %
3988 first symbols:nottok
3993 static void NotConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3997 Expect (mcReserved_nottok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3998 ConstFactor (stopset0
, stopset1
, stopset2
);
3999 n
= push (decl_makeUnaryTok (mcReserved_nottok
, pop ()));
4004 ConstFactor := Number | ConstString |
4005 ConstSetOrQualidentOrFunction |
4006 '(' ConstExpression ')' |
4010 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
4015 static void ConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4017 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
))))) != 0)))
4019 Number (stopset0
, stopset1
, stopset2
);
4021 else if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
4023 /* avoid dangling else. */
4024 ConstString (stopset0
, stopset1
, stopset2
);
4026 else if ((mcLexBuf_currenttoken
== mcReserved_lcbratok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
4028 /* avoid dangling else. */
4029 ConstSetOrQualidentOrFunction (stopset0
, stopset1
, stopset2
);
4031 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4033 /* avoid dangling else. */
4034 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4035 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4036 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4038 else if (mcLexBuf_currenttoken
== mcReserved_nottok
)
4040 /* avoid dangling else. */
4041 NotConstFactor (stopset0
, stopset1
, stopset2
);
4043 else if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
4045 /* avoid dangling else. */
4046 ConstAttribute (stopset0
, stopset1
, stopset2
);
4050 /* avoid dangling else. */
4051 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( { identifier string integer number real number", 84);
4057 ConstString := string
4060 % n := push (makeString (curstring)) %
4063 first symbols:stringtok
4068 static void ConstString (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4072 string (stopset0
, stopset1
, stopset2
);
4073 n
= push (decl_makeString (curstring
));
4078 ConstComponentElement := ConstExpression
4079 % VAR l, h, n: node ; %
4084 [ '..' ConstExpression
4088 % ErrorArray ('implementation restriction range is not allowed') %
4090 % n := push (includeSetValue (pop (), l, h)) %
4093 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4098 static void ConstComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4104 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4106 h
= static_cast<decl_node
> (NULL
);
4107 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
4109 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4110 ConstExpression (stopset0
, stopset1
, stopset2
);
4112 ErrorArray ((const char *) "implementation restriction range is not allowed", 47);
4114 n
= push (decl_includeSetValue (pop (), l
, h
));
4119 ConstComponentValue := ConstComponentElement [ 'BY'
4121 % ErrorArray ('implementation restriction BY not allowed') %
4124 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4129 static void ConstComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4131 ConstComponentElement (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
))), stopset2
);
4132 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
4134 Expect (mcReserved_bytok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4135 ErrorArray ((const char *) "implementation restriction BY not allowed", 41);
4136 ConstExpression (stopset0
, stopset1
, stopset2
);
4142 ConstArraySetRecordValue := ConstComponentValue
4143 { ',' ConstComponentValue }
4145 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4150 static void ConstArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4152 ConstComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4153 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4155 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4156 ConstComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4163 ConstConstructor := '{'
4166 % n := push (makeSetValue ()) %
4167 [ ConstArraySetRecordValue ]
4170 first symbols:lcbratok
4175 static void ConstConstructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4179 Expect (mcReserved_lcbratok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4180 n
= push (decl_makeSetValue ());
4181 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
4183 ConstArraySetRecordValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rcbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4185 Expect (mcReserved_rcbratok
, stopset0
, stopset1
, stopset2
);
4190 ConstSetOrQualidentOrFunction :=
4191 % VAR q, p, n: node ; d: CARDINAL ; %
4195 % assert (d+1 = depth ()) %
4202 % n := push (putSetValue (p, q)) %
4204 % assert (d+1 = depth ()) %
4206 ConstActualParameters
4212 % n := push (makeFuncCall (q, p)) %
4214 % assert (d+1 = depth ()) %
4220 % assert (d+1 = depth ()) %
4223 first symbols:identtok, lcbratok
4228 static void ConstSetOrQualidentOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4235 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4237 /* avoid dangling else. */
4239 PushQualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4240 mcDebug_assert ((d
+1) == (depth ()));
4241 if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))))) != 0)))
4243 /* avoid gcc warning by using compound statement even if not strictly necessary. */
4244 /* seen optional [ | ] expression */
4245 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
4247 ConstConstructor (stopset0
, stopset1
, stopset2
);
4250 n
= push (decl_putSetValue (p
, q
));
4251 mcDebug_assert ((d
+1) == (depth ()));
4253 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4255 /* avoid dangling else. */
4256 ConstActualParameters (stopset0
, stopset1
, stopset2
);
4259 n
= push (decl_makeFuncCall (q
, p
));
4260 mcDebug_assert ((d
+1) == (depth ()));
4264 /* avoid dangling else. */
4265 ErrorArray ((const char *) "expecting one of: ( {", 21);
4268 /* end of optional [ | ] expression */
4273 ConstConstructor (stopset0
, stopset1
, stopset2
);
4274 mcDebug_assert ((d
+1) == (depth ()));
4280 ConstActualParameters := '('
4283 % n := push (makeExpList ()) %
4284 [ ConstExpList ] ')'
4285 % assert (isExpList (peep ())) %
4288 first symbols:lparatok
4293 static void ConstActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4297 Expect (mcReserved_lparatok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4298 n
= push (decl_makeExpList ());
4299 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
4301 ConstExpList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4303 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4304 mcDebug_assert (decl_isExpList (peep ()));
4310 % VAR p, n: node ; %
4314 % assert (isExpList (p)) %
4316 % putExpList (p, pop ()) %
4318 % assert (p = peep ()) %
4320 % assert (isExpList (peep ())) %
4321 { ',' ConstExpression
4322 % putExpList (p, pop ()) %
4324 % assert (isExpList (peep ())) %
4327 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4332 static void ConstExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4338 mcDebug_assert (decl_isExpList (p
));
4339 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4340 decl_putExpList (p
, pop ());
4341 mcDebug_assert (p
== (peep ()));
4342 mcDebug_assert (decl_isExpList (peep ()));
4343 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4345 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4346 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4347 decl_putExpList (p
, pop ());
4348 mcDebug_assert (decl_isExpList (peep ()));
4355 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4356 '(' '(' ConstAttributeExpression
4359 first symbols:attributetok
4364 static void ConstAttribute (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4366 Expect (mcReserved_attributetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_builtintok
-mcReserved_recordtok
))));
4367 Expect (mcReserved_builtintok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4368 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4369 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lesstok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4370 ConstAttributeExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4371 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4372 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4377 ConstAttributeExpression := Ident
4380 % n := push (getBuiltinConst (curident)) %
4384 first symbols:lesstok, identtok
4389 static void ConstAttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4393 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4395 Ident (stopset0
, stopset1
, stopset2
);
4396 n
= push (decl_getBuiltinConst (curident
));
4398 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
4400 /* avoid dangling else. */
4401 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4402 Qualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4403 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4404 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_greatertok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4405 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
4409 /* avoid dangling else. */
4410 ErrorArray ((const char *) "expecting one of: < identifier", 30);
4418 first symbols:ldirectivetok
4423 static void ByteAlignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4425 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4426 AttributeExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4427 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4432 OptAlignmentExpression := [ AlignmentExpression ]
4434 first symbols:lparatok
4439 static void OptAlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4441 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4443 AlignmentExpression (stopset0
, stopset1
, stopset2
);
4449 AlignmentExpression := '(' ConstExpression ')'
4451 first symbols:lparatok
4456 static void AlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4458 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4459 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4460 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4465 Alignment := [ ByteAlignment ]
4467 first symbols:ldirectivetok
4472 static void Alignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4474 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4476 ByteAlignment (stopset0
, stopset1
, stopset2
);
4482 IdentList := Ident { ',' Ident }
4484 first symbols:identtok
4489 static void IdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4491 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4492 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4494 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4495 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4505 % n := makeIdentList () %
4507 % checkDuplicate (putIdent (n, curident)) %
4509 % checkDuplicate (putIdent (n, curident)) %
4514 first symbols:identtok
4519 static void PushIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4523 n
= decl_makeIdentList ();
4524 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4525 checkDuplicate (decl_putIdent (n
, curident
));
4526 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4528 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4529 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4530 checkDuplicate (decl_putIdent (n
, curident
));
4538 SubrangeType := '[' ConstExpression '..' ConstExpression
4541 first symbols:lsbratok
4546 static void SubrangeType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4548 Expect (mcReserved_lsbratok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4549 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4550 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4551 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4552 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
4557 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
4560 first symbols:arraytok
4565 static void ArrayType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4567 Expect (mcReserved_arraytok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4568 SimpleType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4569 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4571 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4572 SimpleType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4575 Expect (mcReserved_oftok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4576 Type (stopset0
, stopset1
, stopset2
);
4581 RecordType := 'RECORD' [ DefaultRecordAttributes ]
4582 FieldListSequence 'END'
4584 first symbols:recordtok
4589 static void RecordType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4591 Expect (mcReserved_recordtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4592 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4594 DefaultRecordAttributes (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4596 FieldListSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4597 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
4602 DefaultRecordAttributes := ''
4604 first symbols:ldirectivetok
4609 static void DefaultRecordAttributes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4611 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4612 AttributeExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4613 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4618 RecordFieldPragma := [ '' ]
4620 first symbols:ldirectivetok
4625 static void RecordFieldPragma (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4627 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4629 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4630 FieldPragmaExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
)) | (1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4631 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4633 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4634 FieldPragmaExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4637 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4643 FieldPragmaExpression := Ident PragmaConstExpression
4645 first symbols:identtok
4650 static void FieldPragmaExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4652 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4653 PragmaConstExpression (stopset0
, stopset1
, stopset2
);
4658 PragmaConstExpression := [ '(' ConstExpression ')' ]
4660 first symbols:lparatok
4665 static void PragmaConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4667 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4669 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4670 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4671 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4677 AttributeExpression := Ident '(' ConstExpression
4680 first symbols:identtok
4685 static void AttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4687 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4688 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4689 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4690 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4695 FieldListSequence := FieldListStatement { ';' FieldListStatement }
4697 first symbols:casetok, identtok, semicolontok
4702 static void FieldListSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4704 FieldListStatement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4705 while (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
4707 Expect (mcReserved_semicolontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4708 FieldListStatement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4715 FieldListStatement := [ FieldList ]
4717 first symbols:identtok, casetok
4722 static void FieldListStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4724 if ((mcLexBuf_currenttoken
== mcReserved_casetok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
4726 FieldList (stopset0
, stopset1
, stopset2
);
4732 FieldList := IdentList ':' Type RecordFieldPragma |
4733 'CASE' CaseTag 'OF' Varient { '|' Varient }
4734 [ 'ELSE' FieldListSequence ] 'END'
4736 first symbols:casetok, identtok
4741 static void FieldList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4743 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4745 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4746 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4747 Type (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4748 RecordFieldPragma (stopset0
, stopset1
, stopset2
);
4750 else if (mcLexBuf_currenttoken
== mcReserved_casetok
)
4752 /* avoid dangling else. */
4753 Expect (mcReserved_casetok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4754 CaseTag (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4755 Expect (mcReserved_oftok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4756 Varient (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4757 while (mcLexBuf_currenttoken
== mcReserved_bartok
)
4759 Expect (mcReserved_bartok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4760 Varient (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
))), stopset2
);
4763 if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
4765 Expect (mcReserved_elsetok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4766 FieldListSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4768 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
4772 /* avoid dangling else. */
4773 ErrorArray ((const char *) "expecting one of: CASE identifier", 33);
4780 % curident := NulName %
4783 first symbols:identtok
4788 static void TagIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4790 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4792 Ident (stopset0
, stopset1
, stopset2
);
4796 curident
= nameKey_NulName
;
4802 CaseTag := TagIdent [ ':' Qualident ]
4804 first symbols:colontok, identtok
4809 static void CaseTag (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4811 TagIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4812 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
4814 Expect (mcReserved_colontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4815 Qualident (stopset0
, stopset1
, stopset2
);
4821 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
4823 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4828 static void Varient (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4830 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
4832 VarientCaseLabelList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4833 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4834 FieldListSequence (stopset0
, stopset1
, stopset2
);
4840 VarientCaseLabelList := VarientCaseLabels { ','
4843 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4848 static void VarientCaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4850 VarientCaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4851 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4853 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4854 VarientCaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4861 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
4863 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4868 static void VarientCaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4870 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4871 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
4873 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4874 ConstExpression (stopset0
, stopset1
, stopset2
);
4880 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
4882 first symbols:oftok, packedsettok, settok
4887 static void SetType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4889 if (mcLexBuf_currenttoken
== mcReserved_settok
)
4891 Expect (mcReserved_settok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4893 else if (mcLexBuf_currenttoken
== mcReserved_packedsettok
)
4895 /* avoid dangling else. */
4896 Expect (mcReserved_packedsettok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4900 /* avoid dangling else. */
4901 ErrorArray ((const char *) "expecting one of: PACKEDSET SET", 31);
4903 Expect (mcReserved_oftok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4904 SimpleType (stopset0
, stopset1
, stopset2
);
4909 PointerType := 'POINTER' 'TO' Type
4911 first symbols:pointertok
4916 static void PointerType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4918 Expect (mcReserved_pointertok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_totok
-mcReserved_recordtok
))));
4919 Expect (mcReserved_totok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4920 Type (stopset0
, stopset1
, stopset2
);
4925 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
4927 first symbols:proceduretok
4932 static void ProcedureType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4934 Expect (mcReserved_proceduretok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4935 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4937 FormalTypeList (stopset0
, stopset1
, stopset2
);
4943 FormalTypeList := '(' ( ')' FormalReturn |
4944 ProcedureParameters ')'
4947 first symbols:lparatok
4952 static void FormalTypeList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4954 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4955 if (mcLexBuf_currenttoken
== mcReserved_rparatok
)
4957 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4958 FormalReturn (stopset0
, stopset1
, stopset2
);
4960 else if ((mcLexBuf_currenttoken
== mcReserved_arraytok
) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
4962 /* avoid dangling else. */
4963 ProcedureParameters (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4964 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4965 FormalReturn (stopset0
, stopset1
, stopset2
);
4969 /* avoid dangling else. */
4970 ErrorArray ((const char *) "expecting one of: VAR ... ARRAY identifier )", 44);
4976 FormalReturn := [ ':' OptReturnType ]
4978 first symbols:colontok
4983 static void FormalReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4985 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
4987 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4988 OptReturnType (stopset0
, stopset1
, stopset2
);
4994 OptReturnType := '[' Qualident ']' |
4997 first symbols:identtok, lsbratok
5002 static void OptReturnType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5004 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5006 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5007 Qualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5008 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5010 else if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5012 /* avoid dangling else. */
5013 Qualident (stopset0
, stopset1
, stopset2
);
5017 /* avoid dangling else. */
5018 ErrorArray ((const char *) "expecting one of: identifier [", 30);
5024 ProcedureParameters := ProcedureParameter { ','
5025 ProcedureParameter }
5027 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
5032 static void ProcedureParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5034 ProcedureParameter (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5035 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5037 Expect (mcReserved_commatok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5038 ProcedureParameter (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5045 ProcedureParameter := '...' | 'VAR' FormalType |
5048 first symbols:identtok, arraytok, vartok, periodperiodperiodtok
5053 static void ProcedureParameter (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5055 if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
5057 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
5059 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
5061 /* avoid dangling else. */
5062 Expect (mcReserved_vartok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5063 FormalType (stopset0
, stopset1
, stopset2
);
5065 else if ((mcLexBuf_currenttoken
== mcReserved_arraytok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
5067 /* avoid dangling else. */
5068 FormalType (stopset0
, stopset1
, stopset2
);
5072 /* avoid dangling else. */
5073 ErrorArray ((const char *) "expecting one of: ARRAY identifier VAR ...", 42);
5079 VarIdent := Ident [ '[' ConstExpression
5085 first symbols:identtok
5090 static void VarIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5094 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5095 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5097 Expect (mcReserved_lsbratok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5098 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5100 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5106 VarIdentList := VarIdent { ',' VarIdent }
5108 first symbols:identtok
5113 static void VarIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5115 VarIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5116 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5118 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5119 VarIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5126 VariableDeclaration := VarIdentList ':' Type Alignment
5128 first symbols:identtok
5133 static void VariableDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5135 VarIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5136 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5137 Type (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5138 Alignment (stopset0
, stopset1
, stopset2
);
5143 Designator := Qualident { SubDesignator }
5145 first symbols:identtok
5150 static void Designator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5152 Qualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5153 while ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))))) != 0)))
5155 SubDesignator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5162 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
5165 first symbols:uparrowtok, lsbratok, periodtok
5170 static void SubDesignator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5172 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
5174 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5175 Ident (stopset0
, stopset1
, stopset2
);
5177 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5179 /* avoid dangling else. */
5180 Expect (mcReserved_lsbratok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5181 ArrayExpList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5182 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5184 else if (mcLexBuf_currenttoken
== mcReserved_uparrowtok
)
5186 /* avoid dangling else. */
5187 Expect (mcReserved_uparrowtok
, stopset0
, stopset1
, stopset2
);
5191 /* avoid dangling else. */
5192 ErrorArray ((const char *) "expecting one of: ^ [ .", 23);
5198 ArrayExpList := Expression { ',' Expression }
5200 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5205 static void ArrayExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5207 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5208 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5210 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5211 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5218 ExpList := Expression { ',' Expression }
5220 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5225 static void ExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5227 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5228 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5230 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5231 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5238 Expression := SimpleExpression [ Relation SimpleExpression ]
5240 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5245 static void Expression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5247 SimpleExpression (stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_intok
-mcReserved_arraytok
))), stopset2
);
5248 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
))
5250 Relation (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5251 SimpleExpression (stopset0
, stopset1
, stopset2
);
5257 SimpleExpression := UnaryOrTerm { AddOperator Term }
5259 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5264 static void SimpleExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5266 UnaryOrTerm (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
5267 while (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_ortok
))
5269 AddOperator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5270 Term (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
5277 UnaryOrTerm := '+' Term | '-' Term |
5280 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5285 static void UnaryOrTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5287 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
5289 Expect (mcReserved_plustok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5290 Term (stopset0
, stopset1
, stopset2
);
5292 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
5294 /* avoid dangling else. */
5295 Expect (mcReserved_minustok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5296 Term (stopset0
, stopset1
, stopset2
);
5298 else if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5300 /* avoid dangling else. */
5301 Term (stopset0
, stopset1
, stopset2
);
5305 /* avoid dangling else. */
5306 ErrorArray ((const char *) "expecting one of: NOT ( string integer number real number identifier { - +", 74);
5312 Term := Factor { MulOperator Factor }
5314 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
5319 static void Term (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5321 Factor (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_timestok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_modtok
-mcReserved_arraytok
)) | (1 << (mcReserved_divtok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
5322 while ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))))) != 0)))) || (mcLexBuf_currenttoken
== mcReserved_remtok
))
5324 MulOperator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5325 Factor (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_timestok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_ambersandtok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
5332 Factor := Number | string | SetOrDesignatorOrFunction |
5333 '(' Expression ')' |
5334 'NOT' ( Factor | ConstAttribute )
5336 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
5341 static void Factor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5343 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
))))) != 0)))
5345 Number (stopset0
, stopset1
, stopset2
);
5347 else if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
5349 /* avoid dangling else. */
5350 string (stopset0
, stopset1
, stopset2
);
5352 else if ((mcLexBuf_currenttoken
== mcReserved_lcbratok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
5354 /* avoid dangling else. */
5355 SetOrDesignatorOrFunction (stopset0
, stopset1
, stopset2
);
5357 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5359 /* avoid dangling else. */
5360 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5361 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5362 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
5364 else if (mcLexBuf_currenttoken
== mcReserved_nottok
)
5366 /* avoid dangling else. */
5367 Expect (mcReserved_nottok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_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
))));
5368 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5370 Factor (stopset0
, stopset1
, stopset2
);
5372 else if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
5374 /* avoid dangling else. */
5375 ConstAttribute (stopset0
, stopset1
, stopset2
);
5379 /* avoid dangling else. */
5380 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ real number integer number string ( NOT { identifier", 84);
5385 /* avoid dangling else. */
5386 ErrorArray ((const char *) "expecting one of: NOT ( identifier { string integer number real number", 70);
5392 ComponentElement := Expression [ '..' Expression
5394 % ErrorArray ('implementation restriction range not allowed') %
5397 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5402 static void ComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5404 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5405 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
5407 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5408 Expression (stopset0
, stopset1
, stopset2
);
5409 ErrorArray ((const char *) "implementation restriction range not allowed", 44);
5415 ComponentValue := ComponentElement [ 'BY'
5416 % ErrorArray ('implementation restriction BY not allowed') %
5419 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5424 static void ComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5426 ComponentElement (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
))), stopset2
);
5427 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
5429 Expect (mcReserved_bytok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5430 ErrorArray ((const char *) "implementation restriction BY not allowed", 41);
5431 Expression (stopset0
, stopset1
, stopset2
);
5437 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
5439 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5444 static void ArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5446 ComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5447 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5449 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5450 ComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5457 Constructor := '{' [ ArraySetRecordValue ] '}'
5459 first symbols:lcbratok
5464 static void Constructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5466 Expect (mcReserved_lcbratok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5467 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5469 ArraySetRecordValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rcbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5471 Expect (mcReserved_rcbratok
, stopset0
, stopset1
, stopset2
);
5476 SetOrDesignatorOrFunction := Qualident [ Constructor |
5478 [ ActualParameters ] ] |
5481 first symbols:lcbratok, identtok
5486 static void SetOrDesignatorOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5488 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5490 /* avoid dangling else. */
5491 Qualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5492 if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))))) != 0)))
5494 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5495 /* seen optional [ | ] expression */
5496 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
5498 Constructor (stopset0
, stopset1
, stopset2
);
5500 else if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_periodtok
-mcReserved_eoftok
))))) != 0)))
5502 /* avoid dangling else. */
5503 SimpleDes (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5504 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5506 ActualParameters (stopset0
, stopset1
, stopset2
);
5511 /* avoid dangling else. */
5512 ErrorArray ((const char *) "expecting one of: ( ^ [ . {", 27);
5515 /* end of optional [ | ] expression */
5517 else if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
5519 /* avoid dangling else. */
5520 Constructor (stopset0
, stopset1
, stopset2
);
5524 /* avoid dangling else. */
5525 ErrorArray ((const char *) "expecting one of: { identifier", 30);
5531 SimpleDes := { SubDesignator }
5533 first symbols:periodtok, lsbratok, uparrowtok
5538 static void SimpleDes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5540 while ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))))) != 0)))
5542 SubDesignator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5549 ActualParameters := '(' [ ExpList ] ')'
5551 first symbols:lparatok
5556 static void ActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5558 Expect (mcReserved_lparatok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5559 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5561 ExpList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5563 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
5568 ExitStatement := 'EXIT'
5570 first symbols:exittok
5575 static void ExitStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5577 Expect (mcReserved_exittok
, stopset0
, stopset1
, stopset2
);
5582 ReturnStatement := 'RETURN' [ Expression ]
5584 first symbols:returntok
5589 static void ReturnStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5591 Expect (mcReserved_returntok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5592 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5594 Expression (stopset0
, stopset1
, stopset2
);
5600 Statement := [ AssignmentOrProcedureCall |
5601 IfStatement | CaseStatement |
5604 LoopStatement | ForStatement |
5605 WithStatement | AsmStatement |
5606 ExitStatement | ReturnStatement |
5609 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
5614 static void Statement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5616 if ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_exittok
-mcReserved_arraytok
)) | (1 << (mcReserved_fortok
-mcReserved_arraytok
)) | (1 << (mcReserved_looptok
-mcReserved_arraytok
)) | (1 << (mcReserved_casetok
-mcReserved_arraytok
)) | (1 << (mcReserved_iftok
-mcReserved_arraytok
))))) != 0))) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_retrytok
-mcReserved_recordtok
)) | (1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5618 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5619 /* seen optional [ | ] expression */
5620 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5622 AssignmentOrProcedureCall (stopset0
, stopset1
, stopset2
);
5624 else if (mcLexBuf_currenttoken
== mcReserved_iftok
)
5626 /* avoid dangling else. */
5627 IfStatement (stopset0
, stopset1
, stopset2
);
5629 else if (mcLexBuf_currenttoken
== mcReserved_casetok
)
5631 /* avoid dangling else. */
5632 CaseStatement (stopset0
, stopset1
, stopset2
);
5634 else if (mcLexBuf_currenttoken
== mcReserved_whiletok
)
5636 /* avoid dangling else. */
5637 WhileStatement (stopset0
, stopset1
, stopset2
);
5639 else if (mcLexBuf_currenttoken
== mcReserved_repeattok
)
5641 /* avoid dangling else. */
5642 RepeatStatement (stopset0
, stopset1
, stopset2
);
5644 else if (mcLexBuf_currenttoken
== mcReserved_looptok
)
5646 /* avoid dangling else. */
5647 LoopStatement (stopset0
, stopset1
, stopset2
);
5649 else if (mcLexBuf_currenttoken
== mcReserved_fortok
)
5651 /* avoid dangling else. */
5652 ForStatement (stopset0
, stopset1
, stopset2
);
5654 else if (mcLexBuf_currenttoken
== mcReserved_withtok
)
5656 /* avoid dangling else. */
5657 WithStatement (stopset0
, stopset1
, stopset2
);
5659 else if (mcLexBuf_currenttoken
== mcReserved_asmtok
)
5661 /* avoid dangling else. */
5662 AsmStatement (stopset0
, stopset1
, stopset2
);
5664 else if (mcLexBuf_currenttoken
== mcReserved_exittok
)
5666 /* avoid dangling else. */
5667 ExitStatement (stopset0
, stopset1
, stopset2
);
5669 else if (mcLexBuf_currenttoken
== mcReserved_returntok
)
5671 /* avoid dangling else. */
5672 ReturnStatement (stopset0
, stopset1
, stopset2
);
5674 else if (mcLexBuf_currenttoken
== mcReserved_retrytok
)
5676 /* avoid dangling else. */
5677 RetryStatement (stopset0
, stopset1
, stopset2
);
5681 /* avoid dangling else. */
5682 ErrorArray ((const char *) "expecting one of: RETRY RETURN EXIT ASM WITH FOR LOOP REPEAT WHILE CASE IF identifier", 85);
5685 /* end of optional [ | ] expression */
5690 RetryStatement := 'RETRY'
5692 first symbols:retrytok
5697 static void RetryStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5699 Expect (mcReserved_retrytok
, stopset0
, stopset1
, stopset2
);
5704 AssignmentOrProcedureCall := Designator ( ':=' Expression |
5710 first symbols:identtok
5715 static void AssignmentOrProcedureCall (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5717 Designator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5718 if (mcLexBuf_currenttoken
== mcReserved_becomestok
)
5720 Expect (mcReserved_becomestok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5721 Expression (stopset0
, stopset1
, stopset2
);
5723 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5725 /* avoid dangling else. */
5726 ActualParameters (stopset0
, stopset1
, stopset2
);
5733 StatementSequence := Statement { ';' Statement }
5735 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
5740 static void StatementSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5742 Statement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5743 while (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
5745 Expect (mcReserved_semicolontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_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
))));
5746 Statement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5753 IfStatement := 'IF' Expression 'THEN' StatementSequence
5754 { 'ELSIF' Expression 'THEN' StatementSequence }
5755 [ 'ELSE' StatementSequence ] 'END'
5762 static void IfStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5764 Expect (mcReserved_iftok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5765 Expression (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_thentok
-mcReserved_recordtok
))));
5766 Expect (mcReserved_thentok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5767 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsiftok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5768 while (mcLexBuf_currenttoken
== mcReserved_elsiftok
)
5770 Expect (mcReserved_elsiftok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5771 Expression (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_thentok
-mcReserved_recordtok
))));
5772 Expect (mcReserved_thentok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5773 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsiftok
-mcReserved_arraytok
))), stopset2
);
5776 if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
5778 Expect (mcReserved_elsetok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5779 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5781 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5786 CaseStatement := 'CASE' Expression 'OF' Case { '|'
5790 first symbols:casetok
5795 static void CaseStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5797 Expect (mcReserved_casetok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5798 Expression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
5799 Expect (mcReserved_oftok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5800 Case (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5801 while (mcLexBuf_currenttoken
== mcReserved_bartok
)
5803 Expect (mcReserved_bartok
, stopset0
|(mcp4_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
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5804 Case (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
))), stopset2
);
5807 CaseEndStatement (stopset0
, stopset1
, stopset2
);
5812 CaseEndStatement := 'END' | 'ELSE' StatementSequence
5815 first symbols:elsetok, endtok
5820 static void CaseEndStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5822 if (mcLexBuf_currenttoken
== mcReserved_endtok
)
5824 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5826 else if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
5828 /* avoid dangling else. */
5829 Expect (mcReserved_elsetok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5830 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5831 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5835 /* avoid dangling else. */
5836 ErrorArray ((const char *) "expecting one of: ELSE END", 26);
5842 Case := [ CaseLabelList ':' StatementSequence ]
5844 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5849 static void Case (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5851 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5853 CaseLabelList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5854 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5855 StatementSequence (stopset0
, stopset1
, stopset2
);
5861 CaseLabelList := CaseLabels { ',' CaseLabels }
5863 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
5868 static void CaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5870 CaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5871 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5873 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5874 CaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5881 CaseLabels := ConstExpression [ '..' ConstExpression ]
5883 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5888 static void CaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5890 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5891 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
5893 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5894 ConstExpression (stopset0
, stopset1
, stopset2
);
5900 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
5903 first symbols:whiletok
5908 static void WhileStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5910 Expect (mcReserved_whiletok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5911 Expression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5912 Expect (mcReserved_dotok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5913 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5914 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5919 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
5922 first symbols:repeattok
5927 static void RepeatStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5929 Expect (mcReserved_repeattok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_untiltok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5930 StatementSequence (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_untiltok
-mcReserved_recordtok
))));
5931 Expect (mcReserved_untiltok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5932 Expression (stopset0
, stopset1
, stopset2
);
5937 ForStatement := 'FOR' Ident ':=' Expression 'TO'
5938 Expression [ 'BY' ConstExpression ]
5939 'DO' StatementSequence 'END'
5941 first symbols:fortok
5946 static void ForStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5948 Expect (mcReserved_fortok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5949 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_becomestok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5950 Expect (mcReserved_becomestok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5951 Expression (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_totok
-mcReserved_recordtok
))));
5952 Expect (mcReserved_totok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5953 Expression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
)) | (1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5954 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
5956 Expect (mcReserved_bytok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5957 ConstExpression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5959 Expect (mcReserved_dotok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5960 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5961 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5966 LoopStatement := 'LOOP' StatementSequence 'END'
5968 first symbols:looptok
5973 static void LoopStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5975 Expect (mcReserved_looptok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5976 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5977 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5982 WithStatement := 'WITH' Designator 'DO' StatementSequence
5985 first symbols:withtok
5990 static void WithStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5992 Expect (mcReserved_withtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5993 Designator (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5994 Expect (mcReserved_dotok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
5995 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5996 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6001 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
6006 first symbols:proceduretok
6011 static void ProcedureDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6013 ProcedureHeading (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6014 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6015 ProcedureBlock (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6016 Ident (stopset0
, stopset1
, stopset2
);
6022 ProcedureIdent := Ident
6023 % curproc := lookupSym (curident) %
6025 % enterScope (curproc) %
6028 first symbols:identtok
6033 static void ProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6035 Ident (stopset0
, stopset1
, stopset2
);
6036 curproc
= decl_lookupSym (curident
);
6037 decl_enterScope (curproc
);
6042 DefProcedureIdent := Ident
6043 % curproc := lookupSym (curident) %
6046 first symbols:identtok
6051 static void DefProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6053 Ident (stopset0
, stopset1
, stopset2
);
6054 curproc
= decl_lookupSym (curident
);
6059 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
6060 '(' '(' Ident ')' ')' |
6063 first symbols:inlinetok, attributetok
6068 static void DefineBuiltinProcedure (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6070 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))))) != 0)))
6072 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6073 /* seen optional [ | ] expression */
6074 if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
6076 Expect (mcReserved_attributetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_builtintok
-mcReserved_recordtok
))));
6077 Expect (mcReserved_builtintok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6078 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6079 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6080 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6081 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6082 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
6084 else if (mcLexBuf_currenttoken
== mcReserved_inlinetok
)
6086 /* avoid dangling else. */
6087 Expect (mcReserved_inlinetok
, stopset0
, stopset1
, stopset2
);
6091 /* avoid dangling else. */
6092 ErrorArray ((const char *) "expecting one of: __INLINE__ __ATTRIBUTE__", 42);
6095 /* end of optional [ | ] expression */
6100 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
6101 ( ProcedureIdent [ FormalParameters ]
6104 first symbols:proceduretok
6109 static void ProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6111 Expect (mcReserved_proceduretok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6112 DefineBuiltinProcedure (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6113 ProcedureIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6114 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
6116 FormalParameters (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6118 AttributeNoReturn (stopset0
, stopset1
, stopset2
);
6123 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
6125 first symbols:inlinetok, builtintok
6130 static void Builtin (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6132 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_builtintok
-mcReserved_recordtok
))))) != 0)))
6134 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6135 /* seen optional [ | ] expression */
6136 if (mcLexBuf_currenttoken
== mcReserved_builtintok
)
6138 Expect (mcReserved_builtintok
, stopset0
, stopset1
, stopset2
);
6140 else if (mcLexBuf_currenttoken
== mcReserved_inlinetok
)
6142 /* avoid dangling else. */
6143 Expect (mcReserved_inlinetok
, stopset0
, stopset1
, stopset2
);
6147 /* avoid dangling else. */
6148 ErrorArray ((const char *) "expecting one of: __INLINE__ __BUILTIN__", 40);
6151 /* end of optional [ | ] expression */
6156 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
6157 [ DefFormalParameters ]
6160 first symbols:proceduretok
6165 static void DefProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6167 Expect (mcReserved_proceduretok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_builtintok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6168 Builtin (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6169 DefProcedureIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6170 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
6172 DefFormalParameters (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6174 AttributeNoReturn (stopset0
, stopset1
, stopset2
);
6179 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
6182 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
6187 static void ProcedureBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6189 while ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0))))
6191 Declaration (stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6194 if (mcLexBuf_currenttoken
== mcReserved_begintok
)
6196 Expect (mcReserved_begintok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
6197 ProcedureBlockBody (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6199 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6204 Block := { Declaration } InitialBlock FinalBlock
6207 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
6212 static void Block (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6214 while ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_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
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0))))
6216 Declaration (stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6219 InitialBlock (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_finallytok
-mcReserved_arraytok
))), stopset2
);
6220 FinalBlock (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6221 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6226 InitialBlock := [ 'BEGIN' InitialBlockBody ]
6228 first symbols:begintok
6233 static void InitialBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6235 if (mcLexBuf_currenttoken
== mcReserved_begintok
)
6237 Expect (mcReserved_begintok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
6238 InitialBlockBody (stopset0
, stopset1
, stopset2
);
6244 FinalBlock := [ 'FINALLY' FinalBlockBody ]
6246 first symbols:finallytok
6251 static void FinalBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6253 if (mcLexBuf_currenttoken
== mcReserved_finallytok
)
6255 Expect (mcReserved_finallytok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_returntok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_whiletok
-mcReserved_recordtok
)) | (1 << (mcReserved_repeattok
-mcReserved_recordtok
)) | (1 << (mcReserved_withtok
-mcReserved_recordtok
)) | (1 << (mcReserved_asmtok
-mcReserved_recordtok
)) | (1 << (mcReserved_retrytok
-mcReserved_recordtok
))));
6256 FinalBlockBody (stopset0
, stopset1
, stopset2
);
6262 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6264 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6269 static void InitialBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6271 NormalPart (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6272 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6274 Expect (mcReserved_excepttok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_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
))));
6275 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6281 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6283 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6288 static void FinalBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6290 NormalPart (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6291 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6293 Expect (mcReserved_excepttok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_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
))));
6294 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6300 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6302 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6307 static void ProcedureBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6309 NormalPart (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6310 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6312 Expect (mcReserved_excepttok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_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
))));
6313 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6319 NormalPart := StatementSequence
6321 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6326 static void NormalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6328 StatementSequence (stopset0
, stopset1
, stopset2
);
6333 ExceptionalPart := StatementSequence
6335 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6340 static void ExceptionalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6342 StatementSequence (stopset0
, stopset1
, stopset2
);
6347 Declaration := 'CONST' { ConstantDeclaration ';' } |
6348 'TYPE' { TypeDeclaration } |
6349 'VAR' { VariableDeclaration ';' } |
6350 ProcedureDeclaration ';' |
6351 ModuleDeclaration ';'
6353 first symbols:moduletok, proceduretok, vartok, typetok, consttok
6358 static void Declaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6360 if (mcLexBuf_currenttoken
== mcReserved_consttok
)
6362 Expect (mcReserved_consttok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6363 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6365 ConstantDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6366 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6370 else if (mcLexBuf_currenttoken
== mcReserved_typetok
)
6372 /* avoid dangling else. */
6373 Expect (mcReserved_typetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6374 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6376 TypeDeclaration (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6380 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
6382 /* avoid dangling else. */
6383 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6384 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6386 VariableDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6387 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6391 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
6393 /* avoid dangling else. */
6394 ProcedureDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6395 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6397 else if (mcLexBuf_currenttoken
== mcReserved_moduletok
)
6399 /* avoid dangling else. */
6400 ModuleDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6401 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6405 /* avoid dangling else. */
6406 ErrorArray ((const char *) "expecting one of: MODULE PROCEDURE VAR TYPE CONST", 49);
6412 DefFormalParameters := '('
6413 % paramEnter (curproc) %
6414 [ DefMultiFPSection ] ')'
6416 % paramLeave (curproc) %
6419 first symbols:lparatok
6424 static void DefFormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6426 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6427 decl_paramEnter (curproc
);
6428 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
6430 DefMultiFPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6432 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6433 decl_paramLeave (curproc
);
6434 FormalReturn (stopset0
, stopset1
, stopset2
);
6439 DefMultiFPSection := DefExtendedFP |
6440 FPSection [ ';' DefMultiFPSection ]
6442 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6447 static void DefMultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6449 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
))
6451 DefExtendedFP (stopset0
, stopset1
, stopset2
);
6453 else if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0)))
6455 /* avoid dangling else. */
6456 FPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6457 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
6459 Expect (mcReserved_semicolontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6460 DefMultiFPSection (stopset0
, stopset1
, stopset2
);
6465 /* avoid dangling else. */
6466 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6472 FormalParameters := '('
6473 % paramEnter (curproc) %
6474 [ MultiFPSection ] ')'
6475 % paramLeave (curproc) %
6478 first symbols:lparatok
6483 static void FormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6485 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6486 decl_paramEnter (curproc
);
6487 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
6489 MultiFPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6491 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6492 decl_paramLeave (curproc
);
6493 FormalReturn (stopset0
, stopset1
, stopset2
);
6498 AttributeNoReturn := [ '' ]
6500 first symbols:ldirectivetok
6505 static void AttributeNoReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6507 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6509 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6510 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6511 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
6517 AttributeUnused := [ '' ]
6519 first symbols:ldirectivetok
6524 static void AttributeUnused (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6526 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6528 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6529 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6530 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
6536 MultiFPSection := ExtendedFP | FPSection [ ';'
6539 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6544 static void MultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6546 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
))
6548 ExtendedFP (stopset0
, stopset1
, stopset2
);
6550 else if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0)))
6552 /* avoid dangling else. */
6553 FPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6554 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
6556 Expect (mcReserved_semicolontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6557 MultiFPSection (stopset0
, stopset1
, stopset2
);
6562 /* avoid dangling else. */
6563 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6569 FPSection := NonVarFPSection |
6572 first symbols:vartok, identtok
6577 static void FPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6579 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
6581 NonVarFPSection (stopset0
, stopset1
, stopset2
);
6583 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
6585 /* avoid dangling else. */
6586 VarFPSection (stopset0
, stopset1
, stopset2
);
6590 /* avoid dangling else. */
6591 ErrorArray ((const char *) "expecting one of: VAR identifier", 32);
6597 DefExtendedFP := DefOptArg | '...'
6599 first symbols:lsbratok, periodperiodperiodtok
6604 static void DefExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6606 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6608 DefOptArg (stopset0
, stopset1
, stopset2
);
6610 else if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
6612 /* avoid dangling else. */
6613 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
6617 /* avoid dangling else. */
6618 ErrorArray ((const char *) "expecting one of: ... [", 23);
6624 ExtendedFP := OptArg | '...'
6626 first symbols:lsbratok, periodperiodperiodtok
6631 static void ExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6633 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6635 OptArg (stopset0
, stopset1
, stopset2
);
6637 else if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
6639 /* avoid dangling else. */
6640 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
6644 /* avoid dangling else. */
6645 ErrorArray ((const char *) "expecting one of: ... [", 23);
6651 VarFPSection := 'VAR' PushIdentList ':' FormalType
6654 first symbols:vartok
6659 static void VarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6661 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6662 PushIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6663 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6664 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6665 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6667 AttributeUnused (stopset0
, stopset1
, stopset2
);
6673 NonVarFPSection := PushIdentList ':' FormalType
6676 first symbols:identtok
6681 static void NonVarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6683 PushIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6684 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6685 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6686 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6688 AttributeUnused (stopset0
, stopset1
, stopset2
);
6694 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
6697 first symbols:lsbratok
6702 static void OptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6704 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6705 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6706 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6707 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
)) | (1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6708 if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
6710 Expect (mcReserved_equaltok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6711 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6713 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6718 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
6721 first symbols:lsbratok
6726 static void DefOptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6728 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6729 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6730 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6731 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6732 Expect (mcReserved_equaltok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6733 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6734 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6739 FormalType := { 'ARRAY' 'OF' } PushQualident
6741 first symbols:identtok, arraytok
6746 static void FormalType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6748 while (mcLexBuf_currenttoken
== mcReserved_arraytok
)
6750 Expect (mcReserved_arraytok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
6751 Expect (mcReserved_oftok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6754 PushQualident (stopset0
, stopset1
, stopset2
);
6759 ModuleDeclaration := 'MODULE' Ident [ Priority ]
6760 ';' { Import } [ Export ]
6763 first symbols:moduletok
6768 static void ModuleDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6770 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6771 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6772 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6774 Priority (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6776 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6777 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
6779 Import (stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
6782 if (mcLexBuf_currenttoken
== mcReserved_exporttok
)
6784 Export (stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
6786 Block (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6787 Ident (stopset0
, stopset1
, stopset2
);
6792 Priority := '[' ConstExpression ']'
6794 first symbols:lsbratok
6799 static void Priority (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6801 Expect (mcReserved_lsbratok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6802 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6803 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6808 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
6809 'UNQUALIFIED' IdentList |
6812 first symbols:exporttok
6817 static void Export (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6819 Expect (mcReserved_exporttok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_qualifiedtok
-mcReserved_arraytok
)) | (1 << (mcReserved_unqualifiedtok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6820 if (mcLexBuf_currenttoken
== mcReserved_qualifiedtok
)
6822 Expect (mcReserved_qualifiedtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6823 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6825 else if (mcLexBuf_currenttoken
== mcReserved_unqualifiedtok
)
6827 /* avoid dangling else. */
6828 Expect (mcReserved_unqualifiedtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6829 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6831 else if (mcLexBuf_currenttoken
== mcReserved_identtok
)
6833 /* avoid dangling else. */
6834 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6838 /* avoid dangling else. */
6839 ErrorArray ((const char *) "expecting one of: identifier UNQUALIFIED QUALIFIED", 50);
6841 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6846 FromIdentList := Ident { ',' Ident }
6848 first symbols:identtok
6853 static void FromIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6855 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6856 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
6858 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6859 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6866 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
6869 first symbols:fromtok
6874 static void FromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6876 Expect (mcReserved_fromtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6877 Ident (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_importtok
-mcReserved_arraytok
))), stopset2
);
6878 Expect (mcReserved_importtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6879 FromIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6880 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6885 ImportModuleList := Ident { ',' Ident }
6887 first symbols:identtok
6892 static void ImportModuleList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6894 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6895 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
6897 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6898 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6905 WithoutFromImport := 'IMPORT' ImportModuleList ';'
6907 first symbols:importtok
6912 static void WithoutFromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6914 Expect (mcReserved_importtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6915 ImportModuleList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6916 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6921 Import := FromImport | WithoutFromImport
6923 first symbols:importtok, fromtok
6928 static void Import (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6930 if (mcLexBuf_currenttoken
== mcReserved_fromtok
)
6932 FromImport (stopset0
, stopset1
, stopset2
);
6934 else if (mcLexBuf_currenttoken
== mcReserved_importtok
)
6936 /* avoid dangling else. */
6937 WithoutFromImport (stopset0
, stopset1
, stopset2
);
6941 /* avoid dangling else. */
6942 ErrorArray ((const char *) "expecting one of: IMPORT FROM", 29);
6948 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
6951 % curmodule := lookupDef (curident) %
6953 % addCommentBody (curmodule) %
6955 % enterScope (curmodule) %
6957 % resetConstExpPos (curmodule) %
6958 { Import } [ Export ] { Definition }
6960 % checkEndName (curmodule, curident, 'definition module') %
6965 first symbols:definitiontok
6970 static void DefinitionModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6972 Expect (mcReserved_definitiontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_moduletok
-mcReserved_arraytok
))), stopset2
);
6973 Expect (mcReserved_moduletok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_fortok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6974 if (mcLexBuf_currenttoken
== mcReserved_fortok
)
6976 Expect (mcReserved_fortok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
6977 string (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6979 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6980 curmodule
= decl_lookupDef (curident
);
6981 decl_addCommentBody (curmodule
);
6982 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
6983 decl_enterScope (curmodule
);
6984 decl_resetConstExpPos (curmodule
);
6985 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
6987 Import (stopset0
, stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6990 if (mcLexBuf_currenttoken
== mcReserved_exporttok
)
6992 Export (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_consttok
-mcReserved_arraytok
)) | (1 << (mcReserved_proceduretok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6994 while ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_consttok
-mcReserved_arraytok
)) | (1 << (mcReserved_proceduretok
-mcReserved_arraytok
))))) != 0))) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0))))
6996 Definition (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_consttok
-mcReserved_arraytok
)) | (1 << (mcReserved_proceduretok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6999 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7000 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7001 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
7002 checkEndName (curmodule
, curident
, (const char *) "definition module", 17);
7008 PushQualident := Ident
7009 % typeExp := push (lookupSym (curident)) %
7013 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
7016 % IF NOT isDef (typeExp)
7018 ErrorArray ('the first component of this qualident must be a definition module')
7021 % typeExp := replace (lookupInScope (typeExp, curident)) ;
7024 ErrorArray ('identifier not found in definition module')
7028 first symbols:identtok
7033 static void PushQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7035 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7036 typeExp
= push (decl_lookupSym (curident
));
7037 if (typeExp
== NULL
)
7039 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));
7041 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
7043 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7044 if (! (decl_isDef (typeExp
)))
7046 ErrorArray ((const char *) "the first component of this qualident must be a definition module", 65);
7048 Ident (stopset0
, stopset1
, stopset2
);
7049 typeExp
= replace (decl_lookupInScope (typeExp
, curident
));
7050 if (typeExp
== NULL
)
7052 ErrorArray ((const char *) "identifier not found in definition module", 41);
7059 OptSubrange := [ SubrangeType ]
7061 first symbols:lsbratok
7066 static void OptSubrange (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7068 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7070 SubrangeType (stopset0
, stopset1
, stopset2
);
7076 TypeEquiv := PushQualident OptSubrange
7078 first symbols:identtok
7083 static void TypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7085 PushQualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7086 OptSubrange (stopset0
, stopset1
, stopset2
);
7091 EnumIdentList := Ident { ',' Ident }
7093 first symbols:identtok
7098 static void EnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7100 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7101 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7103 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7104 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7111 Enumeration := '(' EnumIdentList ')'
7113 first symbols:lparatok
7118 static void Enumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7120 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7121 EnumIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7122 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7127 SimpleType := TypeEquiv | Enumeration |
7130 first symbols:lsbratok, lparatok, identtok
7135 static void SimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7137 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
7139 TypeEquiv (stopset0
, stopset1
, stopset2
);
7141 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
7143 /* avoid dangling else. */
7144 Enumeration (stopset0
, stopset1
, stopset2
);
7146 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7148 /* avoid dangling else. */
7149 SubrangeType (stopset0
, stopset1
, stopset2
);
7153 /* avoid dangling else. */
7154 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
7160 Type := SimpleType | ArrayType | RecordType |
7161 SetType | PointerType | ProcedureType
7163 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
7168 static void Type (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7170 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
7172 SimpleType (stopset0
, stopset1
, stopset2
);
7174 else if (mcLexBuf_currenttoken
== mcReserved_arraytok
)
7176 /* avoid dangling else. */
7177 ArrayType (stopset0
, stopset1
, stopset2
);
7179 else if (mcLexBuf_currenttoken
== mcReserved_recordtok
)
7181 /* avoid dangling else. */
7182 RecordType (stopset0
, stopset1
, stopset2
);
7184 else if ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) | (1 << (mcReserved_oftok
-mcReserved_arraytok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_settok
))
7186 /* avoid dangling else. */
7187 SetType (stopset0
, stopset1
, stopset2
);
7189 else if (mcLexBuf_currenttoken
== mcReserved_pointertok
)
7191 /* avoid dangling else. */
7192 PointerType (stopset0
, stopset1
, stopset2
);
7194 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7196 /* avoid dangling else. */
7197 ProcedureType (stopset0
, stopset1
, stopset2
);
7201 /* avoid dangling else. */
7202 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
7208 TypeDeclaration := { Ident ( ';' | '=' Type Alignment
7211 first symbols:identtok
7216 static void TypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7218 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7220 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7221 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
7223 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7225 else if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
7227 /* avoid dangling else. */
7228 Expect (mcReserved_equaltok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7229 Type (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7230 Alignment (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7231 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7235 /* avoid dangling else. */
7236 ErrorArray ((const char *) "expecting one of: = ;", 21);
7244 DefQualident := Ident
7245 % typeExp := lookupSym (curident) %
7247 % IF NOT isDef (typeExp)
7249 ErrorArray ('the first component of this qualident must be a definition module')
7252 % typeExp := lookupInScope (typeExp, curident) ;
7255 ErrorArray ('identifier not found in definition module')
7259 first symbols:identtok
7264 static void DefQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7266 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7267 typeExp
= decl_lookupSym (curident
);
7268 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
7270 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7271 if (! (decl_isDef (typeExp
)))
7273 ErrorArray ((const char *) "the first component of this qualident must be a definition module", 65);
7275 Ident (stopset0
, stopset1
, stopset2
);
7276 typeExp
= decl_lookupInScope (typeExp
, curident
);
7277 if (typeExp
== NULL
)
7279 ErrorArray ((const char *) "identifier not found in definition module", 41);
7286 DefTypeEquiv := DefQualident OptSubrange
7288 first symbols:identtok
7293 static void DefTypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7295 DefQualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7296 OptSubrange (stopset0
, stopset1
, stopset2
);
7301 DefEnumIdentList := Ident { ',' Ident }
7303 first symbols:identtok
7308 static void DefEnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7310 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7311 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7313 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7314 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7321 DefEnumeration := '(' DefEnumIdentList ')'
7323 first symbols:lparatok
7328 static void DefEnumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7330 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7331 DefEnumIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7332 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7337 DefSimpleType := DefTypeEquiv | DefEnumeration |
7340 first symbols:lsbratok, lparatok, identtok
7345 static void DefSimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7347 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
7349 DefTypeEquiv (stopset0
, stopset1
, stopset2
);
7351 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
7353 /* avoid dangling else. */
7354 DefEnumeration (stopset0
, stopset1
, stopset2
);
7356 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7358 /* avoid dangling else. */
7359 SubrangeType (stopset0
, stopset1
, stopset2
);
7363 /* avoid dangling else. */
7364 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
7370 DefType := DefSimpleType | ArrayType |
7371 RecordType | SetType | PointerType |
7374 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
7379 static void DefType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7381 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
7383 DefSimpleType (stopset0
, stopset1
, stopset2
);
7385 else if (mcLexBuf_currenttoken
== mcReserved_arraytok
)
7387 /* avoid dangling else. */
7388 ArrayType (stopset0
, stopset1
, stopset2
);
7390 else if (mcLexBuf_currenttoken
== mcReserved_recordtok
)
7392 /* avoid dangling else. */
7393 RecordType (stopset0
, stopset1
, stopset2
);
7395 else if ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp4_SetOfStop1
) ((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) | (1 << (mcReserved_oftok
-mcReserved_arraytok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_settok
))
7397 /* avoid dangling else. */
7398 SetType (stopset0
, stopset1
, stopset2
);
7400 else if (mcLexBuf_currenttoken
== mcReserved_pointertok
)
7402 /* avoid dangling else. */
7403 PointerType (stopset0
, stopset1
, stopset2
);
7405 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7407 /* avoid dangling else. */
7408 ProcedureType (stopset0
, stopset1
, stopset2
);
7412 /* avoid dangling else. */
7413 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
7419 DefTypeDeclaration := { Ident ( ';' | '=' DefType
7422 first symbols:identtok
7427 static void DefTypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7429 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7431 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7432 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
7434 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7436 else if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
7438 /* avoid dangling else. */
7439 Expect (mcReserved_equaltok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_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
|(mcp4_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7440 DefType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7441 Alignment (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7442 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7446 /* avoid dangling else. */
7447 ErrorArray ((const char *) "expecting one of: = ;", 21);
7455 DefConstantDeclaration := Ident '=' ConstExpression
7457 first symbols:identtok
7462 static void DefConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7464 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7465 Expect (mcReserved_equaltok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7466 ConstExpression (stopset0
, stopset1
, stopset2
);
7471 Definition := 'CONST' { DefConstantDeclaration ';' } |
7472 'TYPE' { DefTypeDeclaration } |
7473 'VAR' { VariableDeclaration ';' } |
7474 DefProcedureHeading ';'
7476 first symbols:proceduretok, vartok, typetok, consttok
7481 static void Definition (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7483 if (mcLexBuf_currenttoken
== mcReserved_consttok
)
7485 Expect (mcReserved_consttok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7486 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7488 DefConstantDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7489 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7493 else if (mcLexBuf_currenttoken
== mcReserved_typetok
)
7495 /* avoid dangling else. */
7496 Expect (mcReserved_typetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7497 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7499 DefTypeDeclaration (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7503 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
7505 /* avoid dangling else. */
7506 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7507 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7509 VariableDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7510 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7514 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7516 /* avoid dangling else. */
7517 DefProcedureHeading (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7518 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
7522 /* avoid dangling else. */
7523 ErrorArray ((const char *) "expecting one of: PROCEDURE VAR TYPE CONST", 42);
7529 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
7532 first symbols:asmtok
7537 static void AsmStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7539 Expect (mcReserved_asmtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_volatiletok
-mcReserved_recordtok
))));
7540 if (mcLexBuf_currenttoken
== mcReserved_volatiletok
)
7542 Expect (mcReserved_volatiletok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7544 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7545 AsmOperands (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7546 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7551 AsmOperands := string [ AsmOperandSpec ]
7553 first symbols:stringtok
7558 static void AsmOperands (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7560 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7561 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7563 AsmOperandSpec (stopset0
, stopset1
, stopset2
);
7569 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
7572 first symbols:colontok
7577 static void AsmOperandSpec (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7579 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7581 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
)) | (1 << (mcReserved_commatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7582 AsmList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7583 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7585 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
)) | (1 << (mcReserved_commatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7586 AsmList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7587 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7589 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7590 TrashList (stopset0
, stopset1
, stopset2
);
7598 AsmList := [ AsmElement ] { ',' AsmElement }
7600 first symbols:lsbratok, stringtok, commatok
7605 static void AsmList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7607 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_stringtok
))
7609 AsmElement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7611 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7613 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7614 AsmElement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7621 NamedOperand := '[' Ident ']'
7623 first symbols:lsbratok
7628 static void NamedOperand (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7630 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7631 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7632 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
7637 AsmOperandName := [ NamedOperand ]
7639 first symbols:lsbratok
7644 static void AsmOperandName (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7646 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7648 NamedOperand (stopset0
, stopset1
, stopset2
);
7654 AsmElement := AsmOperandName string '(' Expression
7657 first symbols:stringtok, lsbratok
7662 static void AsmElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7664 AsmOperandName (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7665 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7666 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7667 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7668 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7673 TrashList := [ string ] { ',' string }
7675 first symbols:commatok, stringtok
7680 static void TrashList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7682 if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
7684 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7686 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7688 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7689 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7696 CompilationUnit - returns TRUE if the input was correct enough to parse
7700 extern "C" unsigned int mcp4_CompilationUnit (void)
7702 stk
= mcStack_init ();
7704 FileUnit ((mcp4_SetOfStop0
) ((1 << (mcReserved_eoftok
-mcReserved_eoftok
))), (mcp4_SetOfStop1
) 0, (mcp4_SetOfStop2
) 0);
7705 mcStack_kill (&stk
);
7707 /* static analysis guarentees a RETURN statement will be used before here. */
7708 __builtin_unreachable ();
7711 extern "C" void _M2_mcp4_init (__attribute__((unused
)) int argc
,__attribute__((unused
)) char *argv
[],__attribute__((unused
)) char *envp
[])
7715 extern "C" void _M2_mcp4_finish (__attribute__((unused
)) int argc
,__attribute__((unused
)) char *argv
[],__attribute__((unused
)) char *envp
[])