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-2025 Free Software Foundation, Inc.
5 Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
7 This file is part of GNU Modula-2.
9 GNU Modula-2 is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 GNU Modula-2 is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GNU Modula-2; see the file COPYING. If not,
21 see <https://www.gnu.org/licenses/>. */
26 # if !defined (PROC_D)
28 typedef void (*PROC_t
) (void);
29 typedef struct { PROC_t proc
; } PROC
;
40 #if defined(__cplusplus)
47 # include "GDynamicStrings.h"
48 # include "GmcError.h"
49 # include "GnameKey.h"
50 # include "GmcPrintf.h"
51 # include "GmcDebug.h"
52 # include "GmcReserved.h"
53 # include "GmcMetaError.h"
54 # include "GmcStack.h"
55 # include "GmcLexBuf.h"
59 # define Debugging false
60 typedef unsigned int mcp4_stop0
;
62 typedef unsigned int mcp4_SetOfStop0
;
64 typedef unsigned int mcp4_stop1
;
66 typedef unsigned int mcp4_SetOfStop1
;
68 typedef unsigned int mcp4_stop2
;
70 typedef unsigned int mcp4_SetOfStop2
;
72 static bool WasNoError
;
73 static nameKey_Name curstring
;
74 static nameKey_Name curident
;
75 static decl_node curproc
;
76 static decl_node typeDes
;
77 static decl_node typeExp
;
78 static decl_node curmodule
;
79 static mcStack_stack stk
;
82 CompilationUnit - returns TRUE if the input was correct enough to parse
86 extern "C" bool mcp4_CompilationUnit (void);
92 static decl_node
push (decl_node n
);
98 static decl_node
pop (void);
104 static decl_node
replace (decl_node n
);
107 peep - returns the top node on the stack without removing it.
110 static decl_node
peep (void);
113 depth - returns the depth of the stack.
116 static unsigned int depth (void);
122 static void checkDuplicate (bool b
);
128 static void ErrorString (DynamicStrings_String s
);
134 static void ErrorArray (const char *a_
, unsigned int _a_high
);
140 static void pushNunbounded (unsigned int c
);
143 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
146 static decl_node
makeIndexedArray (unsigned int c
, decl_node t
);
149 importInto - from, m, import, name, into module, current.
150 It checks to see if curident is an enumeration type
151 and if so automatically includes all enumeration fields
155 static void importInto (decl_node m
, nameKey_Name name
, decl_node current
);
158 checkEndName - if module does not have, name, then issue an error containing, desc.
161 static void checkEndName (decl_node module
, nameKey_Name name
, const char *desc_
, unsigned int _desc_high
);
164 DescribeStop - issues a message explaining what tokens were expected
167 static DynamicStrings_String
DescribeStop (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
170 DescribeError - issues a message explaining what tokens were expected
173 static void DescribeError (void);
176 SyntaxError - after a syntax error we skip all tokens up until we reach
180 static void SyntaxError (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
186 static void SyntaxCheck (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
189 WarnMissingToken - generates a warning message about a missing token, t.
192 static void WarnMissingToken (mcReserved_toktype t
);
195 MissingToken - generates a warning message about a missing token, t.
198 static void MissingToken (mcReserved_toktype t
);
204 static bool CheckAndInsert (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
210 static bool InStopSet (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
213 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
214 If it is not then it will insert a token providing the token
215 is one of ; ] ) } . OF END ,
217 if the stopset contains <identtok> then we do not insert a token
220 static void PeepToken (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
226 static void Expect (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
229 Ident - error checking varient of Ident
232 static void Ident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
238 static void string (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
244 static void Integer (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
250 static void Real (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
253 FileUnit := DefinitionModule |
254 ImplementationOrProgramModule
256 first symbols:implementationtok, moduletok, definitiontok
261 static void FileUnit (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
264 ProgramModule := 'MODULE' Ident
265 % curmodule := lookupModule (curident) %
267 % enterScope (curmodule) %
269 % resetConstExpPos (curmodule) %
270 [ Priority ] ';' { Import } Block
272 % checkEndName (curmodule, curident, 'program module') %
277 first symbols:moduletok
282 static void ProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
285 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
287 % curmodule := lookupImp (curident) %
289 % enterScope (lookupDef (curident)) %
291 % enterScope (curmodule) %
293 % resetConstExpPos (curmodule) %
294 [ Priority ] ';' { Import }
296 % checkEndName (curmodule, curident, 'implementation module') %
298 % leaveScope ; leaveScope %
301 first symbols:implementationtok
306 static void ImplementationModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
309 ImplementationOrProgramModule := ImplementationModule |
312 first symbols:moduletok, implementationtok
317 static void ImplementationOrProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
320 Number := Integer | Real
322 first symbols:realtok, integertok
327 static void Number (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
330 Qualident := Ident { '.' Ident }
332 first symbols:identtok
337 static void Qualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
340 ConstantDeclaration :=
343 % d := lookupSym (curident) %
347 % assert (isConst (d)) %
352 first symbols:identtok
357 static void ConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
361 % VAR c, l, r: node ; op: toktype ; d: CARDINAL ; %
365 % c := push (getNextConstExp ()) %
367 % op := currenttoken %
368 [ Relation SimpleConstExpr
373 % l := push (makeBinaryTok (op, l, r)) %
375 % c := replace (fixupConstExp (c, pop ())) %
377 % assert (d+1 = depth ()) %
380 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
385 static void ConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
388 Relation := '=' | '#' | '<>' | '<' | '<=' |
391 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
396 static void Relation (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
400 % VAR op: toktype ; n: node ; %
404 % op := currenttoken %
405 AddOperator ConstTerm
406 % n := makeBinaryTok (op, n, pop ()) %
411 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
416 static void SimpleConstExpr (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
422 % n := push (makeUnaryTok (plustok, pop ())) %
424 % n := push (makeUnaryTok (minustok, pop ())) %
427 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
432 static void UnaryOrConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
435 AddOperator := '+' | '-' | 'OR'
437 first symbols:ortok, minustok, plustok
442 static void AddOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
446 % VAR op: toktype ; n: node ; %
450 % op := currenttoken %
451 MulOperator ConstFactor
452 % n := makeBinaryTok (op, n, pop ()) %
457 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
462 static void ConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
465 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
468 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
473 static void MulOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
476 NotConstFactor := 'NOT' ConstFactor
479 % n := push (makeUnaryTok (nottok, pop ())) %
487 static void NotConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
490 ConstFactor := Number | ConstString |
491 ConstSetOrQualidentOrFunction |
492 '(' ConstExpression ')' |
496 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
501 static void ConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
504 ConstString := string
507 % n := push (makeString (curstring)) %
510 first symbols:stringtok
515 static void ConstString (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
518 ConstComponentElement := ConstExpression
519 % VAR l, h, n: node ; %
524 [ '..' ConstExpression
528 % ErrorArray ('implementation restriction range is not allowed') %
530 % n := push (includeSetValue (pop (), l, h)) %
533 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
538 static void ConstComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
541 ConstComponentValue := ConstComponentElement [ 'BY'
543 % ErrorArray ('implementation restriction BY not allowed') %
546 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
551 static void ConstComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
554 ConstArraySetRecordValue := ConstComponentValue
555 { ',' ConstComponentValue }
557 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
562 static void ConstArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
565 ConstConstructor := '{'
568 % n := push (makeSetValue ()) %
569 [ ConstArraySetRecordValue ]
572 first symbols:lcbratok
577 static void ConstConstructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
580 ConstSetOrQualidentOrFunction :=
581 % VAR q, p, n: node ; d: CARDINAL ; %
585 % assert (d+1 = depth ()) %
592 % n := push (putSetValue (p, q)) %
594 % assert (d+1 = depth ()) %
596 ConstActualParameters
602 % n := push (makeFuncCall (q, p)) %
604 % assert (d+1 = depth ()) %
610 % assert (d+1 = depth ()) %
613 first symbols:identtok, lcbratok
618 static void ConstSetOrQualidentOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
621 ConstActualParameters := '('
624 % n := push (makeExpList ()) %
626 % assert (isExpList (peep ())) %
629 first symbols:lparatok
634 static void ConstActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
642 % assert (isExpList (p)) %
644 % putExpList (p, pop ()) %
646 % assert (p = peep ()) %
648 % assert (isExpList (peep ())) %
649 { ',' ConstExpression
650 % putExpList (p, pop ()) %
652 % assert (isExpList (peep ())) %
655 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
660 static void ConstExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
663 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
664 '(' '(' ConstAttributeExpression
667 first symbols:attributetok
672 static void ConstAttribute (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
675 ConstAttributeExpression := Ident
678 % n := push (getBuiltinConst (curident)) %
682 first symbols:lesstok, identtok
687 static void ConstAttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
692 first symbols:ldirectivetok
697 static void ByteAlignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
700 OptAlignmentExpression := [ AlignmentExpression ]
702 first symbols:lparatok
707 static void OptAlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
710 AlignmentExpression := '(' ConstExpression ')'
712 first symbols:lparatok
717 static void AlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
720 Alignment := [ ByteAlignment ]
722 first symbols:ldirectivetok
727 static void Alignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
730 IdentList := Ident { ',' Ident }
732 first symbols:identtok
737 static void IdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
743 % n := makeIdentList () %
745 % checkDuplicate (putIdent (n, curident)) %
747 % checkDuplicate (putIdent (n, curident)) %
752 first symbols:identtok
757 static void PushIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
760 SubrangeType := '[' ConstExpression '..' ConstExpression
763 first symbols:lsbratok
768 static void SubrangeType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
771 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
774 first symbols:arraytok
779 static void ArrayType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
782 RecordType := 'RECORD' [ DefaultRecordAttributes ]
783 FieldListSequence 'END'
785 first symbols:recordtok
790 static void RecordType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
793 DefaultRecordAttributes := ''
795 first symbols:ldirectivetok
800 static void DefaultRecordAttributes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
803 RecordFieldPragma := [ '' ]
805 first symbols:ldirectivetok
810 static void RecordFieldPragma (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
813 FieldPragmaExpression := Ident PragmaConstExpression
815 first symbols:identtok
820 static void FieldPragmaExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
823 PragmaConstExpression := [ '(' ConstExpression ')' ]
825 first symbols:lparatok
830 static void PragmaConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
833 AttributeExpression := Ident '(' ConstExpression
836 first symbols:identtok
841 static void AttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
844 FieldListSequence := FieldListStatement { ';' FieldListStatement }
846 first symbols:casetok, identtok, semicolontok
851 static void FieldListSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
854 FieldListStatement := [ FieldList ]
856 first symbols:identtok, casetok
861 static void FieldListStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
864 FieldList := IdentList ':' Type RecordFieldPragma |
865 'CASE' CaseTag 'OF' Varient { '|' Varient }
866 [ 'ELSE' FieldListSequence ] 'END'
868 first symbols:casetok, identtok
873 static void FieldList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
877 % curident := NulName %
880 first symbols:identtok
885 static void TagIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
888 CaseTag := TagIdent [ ':' Qualident ]
890 first symbols:colontok, identtok
895 static void CaseTag (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
898 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
900 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
905 static void Varient (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
908 VarientCaseLabelList := VarientCaseLabels { ','
911 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
916 static void VarientCaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
919 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
921 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
926 static void VarientCaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
929 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
931 first symbols:oftok, packedsettok, settok
936 static void SetType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
939 PointerType := 'POINTER' 'TO' Type
941 first symbols:pointertok
946 static void PointerType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
949 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
951 first symbols:proceduretok
956 static void ProcedureType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
959 FormalTypeList := '(' ( ')' FormalReturn |
960 ProcedureParameters ')'
963 first symbols:lparatok
968 static void FormalTypeList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
971 FormalReturn := [ ':' OptReturnType ]
973 first symbols:colontok
978 static void FormalReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
981 OptReturnType := '[' Qualident ']' |
984 first symbols:identtok, lsbratok
989 static void OptReturnType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
992 ProcedureParameters := ProcedureParameter { ','
995 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
1000 static void ProcedureParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1003 ProcedureParameter := '...' | 'VAR' FormalType |
1006 first symbols:identtok, arraytok, vartok, periodperiodperiodtok
1011 static void ProcedureParameter (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1014 VarIdent := Ident [ '[' ConstExpression
1020 first symbols:identtok
1025 static void VarIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1028 VarIdentList := VarIdent { ',' VarIdent }
1030 first symbols:identtok
1035 static void VarIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1038 VariableDeclaration := VarIdentList ':' Type Alignment
1040 first symbols:identtok
1045 static void VariableDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1048 Designator := Qualident { SubDesignator }
1050 first symbols:identtok
1055 static void Designator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1058 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
1061 first symbols:uparrowtok, lsbratok, periodtok
1066 static void SubDesignator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1069 ArrayExpList := Expression { ',' Expression }
1071 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1076 static void ArrayExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1079 ExpList := Expression { ',' Expression }
1081 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1086 static void ExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1089 Expression := SimpleExpression [ Relation SimpleExpression ]
1091 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1096 static void Expression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1099 SimpleExpression := UnaryOrTerm { AddOperator Term }
1101 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1106 static void SimpleExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1109 UnaryOrTerm := '+' Term | '-' Term |
1112 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1117 static void UnaryOrTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1120 Term := Factor { MulOperator Factor }
1122 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
1127 static void Term (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1130 Factor := Number | string | SetOrDesignatorOrFunction |
1131 '(' Expression ')' |
1132 'NOT' ( Factor | ConstAttribute )
1134 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1139 static void Factor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1142 ComponentElement := Expression [ '..' Expression
1144 % ErrorArray ('implementation restriction range not allowed') %
1147 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1152 static void ComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1155 ComponentValue := ComponentElement [ 'BY'
1156 % ErrorArray ('implementation restriction BY not allowed') %
1159 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1164 static void ComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1167 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
1169 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1174 static void ArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1177 Constructor := '{' [ ArraySetRecordValue ] '}'
1179 first symbols:lcbratok
1184 static void Constructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1187 SetOrDesignatorOrFunction := Qualident [ Constructor |
1189 [ ActualParameters ] ] |
1192 first symbols:lcbratok, identtok
1197 static void SetOrDesignatorOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1200 SimpleDes := { SubDesignator }
1202 first symbols:periodtok, lsbratok, uparrowtok
1207 static void SimpleDes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1210 ActualParameters := '(' [ ExpList ] ')'
1212 first symbols:lparatok
1217 static void ActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1220 ExitStatement := 'EXIT'
1222 first symbols:exittok
1227 static void ExitStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1230 ReturnStatement := 'RETURN' [ Expression ]
1232 first symbols:returntok
1237 static void ReturnStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1240 Statement := [ AssignmentOrProcedureCall |
1241 IfStatement | CaseStatement |
1244 LoopStatement | ForStatement |
1245 WithStatement | AsmStatement |
1246 ExitStatement | ReturnStatement |
1249 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
1254 static void Statement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1257 RetryStatement := 'RETRY'
1259 first symbols:retrytok
1264 static void RetryStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1267 AssignmentOrProcedureCall := Designator ( ':=' Expression |
1273 first symbols:identtok
1278 static void AssignmentOrProcedureCall (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1281 StatementSequence := Statement { ';' Statement }
1283 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1288 static void StatementSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1291 IfStatement := 'IF' Expression 'THEN' StatementSequence
1292 { 'ELSIF' Expression 'THEN' StatementSequence }
1293 [ 'ELSE' StatementSequence ] 'END'
1300 static void IfStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1303 CaseStatement := 'CASE' Expression 'OF' Case { '|'
1307 first symbols:casetok
1312 static void CaseStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1315 CaseEndStatement := 'END' | 'ELSE' StatementSequence
1318 first symbols:elsetok, endtok
1323 static void CaseEndStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1326 Case := [ CaseLabelList ':' StatementSequence ]
1328 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1333 static void Case (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1336 CaseLabelList := CaseLabels { ',' CaseLabels }
1338 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1343 static void CaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1346 CaseLabels := ConstExpression [ '..' ConstExpression ]
1348 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1353 static void CaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1356 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
1359 first symbols:whiletok
1364 static void WhileStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1367 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
1370 first symbols:repeattok
1375 static void RepeatStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1378 ForStatement := 'FOR' Ident ':=' Expression 'TO'
1379 Expression [ 'BY' ConstExpression ]
1380 'DO' StatementSequence 'END'
1382 first symbols:fortok
1387 static void ForStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1390 LoopStatement := 'LOOP' StatementSequence 'END'
1392 first symbols:looptok
1397 static void LoopStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1400 WithStatement := 'WITH' Designator 'DO' StatementSequence
1403 first symbols:withtok
1408 static void WithStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1411 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
1416 first symbols:proceduretok
1421 static void ProcedureDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1424 ProcedureIdent := Ident
1425 % curproc := lookupSym (curident) %
1427 % enterScope (curproc) %
1430 first symbols:identtok
1435 static void ProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1438 DefProcedureIdent := Ident
1439 % curproc := lookupSym (curident) %
1442 first symbols:identtok
1447 static void DefProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1450 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
1451 '(' '(' Ident ')' ')' |
1454 first symbols:inlinetok, attributetok
1459 static void DefineBuiltinProcedure (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1462 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
1463 ( ProcedureIdent [ FormalParameters ]
1466 first symbols:proceduretok
1471 static void ProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1474 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
1476 first symbols:inlinetok, builtintok
1481 static void Builtin (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1484 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
1485 [ DefFormalParameters ]
1488 first symbols:proceduretok
1493 static void DefProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1496 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
1499 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
1504 static void ProcedureBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1507 Block := { Declaration } InitialBlock FinalBlock
1510 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
1515 static void Block (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1518 InitialBlock := [ 'BEGIN' InitialBlockBody ]
1520 first symbols:begintok
1525 static void InitialBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1528 FinalBlock := [ 'FINALLY' FinalBlockBody ]
1530 first symbols:finallytok
1535 static void FinalBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1538 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1540 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1545 static void InitialBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1548 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1550 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1555 static void FinalBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1558 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1560 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1565 static void ProcedureBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1568 NormalPart := StatementSequence
1570 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1575 static void NormalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1578 ExceptionalPart := StatementSequence
1580 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1585 static void ExceptionalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1588 Declaration := 'CONST' { ConstantDeclaration ';' } |
1589 'TYPE' { TypeDeclaration } |
1590 'VAR' { VariableDeclaration ';' } |
1591 ProcedureDeclaration ';' |
1592 ModuleDeclaration ';'
1594 first symbols:moduletok, proceduretok, vartok, typetok, consttok
1599 static void Declaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1602 DefFormalParameters := '('
1603 % paramEnter (curproc) %
1604 [ DefMultiFPSection ] ')'
1606 % paramLeave (curproc) %
1609 first symbols:lparatok
1614 static void DefFormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1617 DefMultiFPSection := DefExtendedFP |
1618 FPSection [ ';' DefMultiFPSection ]
1620 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1625 static void DefMultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1628 FormalParameters := '('
1629 % paramEnter (curproc) %
1630 [ MultiFPSection ] ')'
1631 % paramLeave (curproc) %
1634 first symbols:lparatok
1639 static void FormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1642 AttributeNoReturn := [ '' ]
1644 first symbols:ldirectivetok
1649 static void AttributeNoReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1652 AttributeUnused := [ '' ]
1654 first symbols:ldirectivetok
1659 static void AttributeUnused (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1662 MultiFPSection := ExtendedFP | FPSection [ ';'
1665 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1670 static void MultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1673 FPSection := NonVarFPSection |
1676 first symbols:vartok, identtok
1681 static void FPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1684 DefExtendedFP := DefOptArg | '...'
1686 first symbols:lsbratok, periodperiodperiodtok
1691 static void DefExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1694 ExtendedFP := OptArg | '...'
1696 first symbols:lsbratok, periodperiodperiodtok
1701 static void ExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1704 VarFPSection := 'VAR' PushIdentList ':' FormalType
1707 first symbols:vartok
1712 static void VarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1715 NonVarFPSection := PushIdentList ':' FormalType
1718 first symbols:identtok
1723 static void NonVarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1726 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
1729 first symbols:lsbratok
1734 static void OptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1737 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
1740 first symbols:lsbratok
1745 static void DefOptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1748 FormalType := { 'ARRAY' 'OF' } PushQualident
1750 first symbols:identtok, arraytok
1755 static void FormalType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1758 ModuleDeclaration := 'MODULE' Ident [ Priority ]
1759 ';' { Import } [ Export ]
1762 first symbols:moduletok
1767 static void ModuleDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1770 Priority := '[' ConstExpression ']'
1772 first symbols:lsbratok
1777 static void Priority (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1780 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
1781 'UNQUALIFIED' IdentList |
1784 first symbols:exporttok
1789 static void Export (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1792 FromIdentList := Ident { ',' Ident }
1794 first symbols:identtok
1799 static void FromIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1802 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
1805 first symbols:fromtok
1810 static void FromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1813 ImportModuleList := Ident { ',' Ident }
1815 first symbols:identtok
1820 static void ImportModuleList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1823 WithoutFromImport := 'IMPORT' ImportModuleList ';'
1825 first symbols:importtok
1830 static void WithoutFromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1833 Import := FromImport | WithoutFromImport
1835 first symbols:importtok, fromtok
1840 static void Import (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1843 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
1846 % curmodule := lookupDef (curident) %
1848 % addCommentBody (curmodule) %
1850 % enterScope (curmodule) %
1852 % resetConstExpPos (curmodule) %
1853 { Import } [ Export ] { Definition }
1855 % checkEndName (curmodule, curident, 'definition module') %
1860 first symbols:definitiontok
1865 static void DefinitionModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1868 PushQualident := Ident
1869 % typeExp := push (lookupSym (curident)) %
1873 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
1876 % IF NOT isDef (typeExp)
1878 ErrorArray ('the first component of this qualident must be a definition module')
1881 % typeExp := replace (lookupInScope (typeExp, curident)) ;
1884 ErrorArray ('identifier not found in definition module')
1888 first symbols:identtok
1893 static void PushQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1896 OptSubrange := [ SubrangeType ]
1898 first symbols:lsbratok
1903 static void OptSubrange (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1906 TypeEquiv := PushQualident OptSubrange
1908 first symbols:identtok
1913 static void TypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1916 EnumIdentList := Ident { ',' Ident }
1918 first symbols:identtok
1923 static void EnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1926 Enumeration := '(' EnumIdentList ')'
1928 first symbols:lparatok
1933 static void Enumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1936 SimpleType := TypeEquiv | Enumeration |
1939 first symbols:lsbratok, lparatok, identtok
1944 static void SimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1947 Type := SimpleType | ArrayType | RecordType |
1948 SetType | PointerType | ProcedureType
1950 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
1955 static void Type (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1958 TypeDeclaration := { Ident ( ';' | '=' Type Alignment
1961 first symbols:identtok
1966 static void TypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1969 DefQualident := Ident
1970 % typeExp := lookupSym (curident) %
1972 % IF NOT isDef (typeExp)
1974 ErrorArray ('the first component of this qualident must be a definition module')
1977 % typeExp := lookupInScope (typeExp, curident) ;
1980 ErrorArray ('identifier not found in definition module')
1984 first symbols:identtok
1989 static void DefQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
1992 DefTypeEquiv := DefQualident OptSubrange
1994 first symbols:identtok
1999 static void DefTypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2002 DefEnumIdentList := Ident { ',' Ident }
2004 first symbols:identtok
2009 static void DefEnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2012 DefEnumeration := '(' DefEnumIdentList ')'
2014 first symbols:lparatok
2019 static void DefEnumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2022 DefSimpleType := DefTypeEquiv | DefEnumeration |
2025 first symbols:lsbratok, lparatok, identtok
2030 static void DefSimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2033 DefType := DefSimpleType | ArrayType |
2034 RecordType | SetType | PointerType |
2037 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
2042 static void DefType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2045 DefTypeDeclaration := { Ident ( ';' | '=' DefType
2048 first symbols:identtok
2053 static void DefTypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2056 DefConstantDeclaration := Ident '=' ConstExpression
2058 first symbols:identtok
2063 static void DefConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2066 Definition := 'CONST' { DefConstantDeclaration ';' } |
2067 'TYPE' { DefTypeDeclaration } |
2068 'VAR' { VariableDeclaration ';' } |
2069 DefProcedureHeading ';'
2071 first symbols:proceduretok, vartok, typetok, consttok
2076 static void Definition (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2079 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
2082 first symbols:asmtok
2087 static void AsmStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2090 AsmOperands := string [ AsmOperandSpec ]
2092 first symbols:stringtok
2097 static void AsmOperands (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2100 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
2103 first symbols:colontok
2108 static void AsmOperandSpec (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2111 AsmList := [ AsmElement ] { ',' AsmElement }
2113 first symbols:lsbratok, stringtok, commatok
2118 static void AsmList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2121 NamedOperand := '[' Ident ']'
2123 first symbols:lsbratok
2128 static void NamedOperand (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2131 AsmOperandName := [ NamedOperand ]
2133 first symbols:lsbratok
2138 static void AsmOperandName (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2141 AsmElement := AsmOperandName string '(' Expression
2144 first symbols:stringtok, lsbratok
2149 static void AsmElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2152 TrashList := [ string ] { ',' string }
2154 first symbols:commatok, stringtok
2159 static void TrashList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
);
2166 static decl_node
push (decl_node n
)
2168 return static_cast<decl_node
> (mcStack_push (stk
, reinterpret_cast <void *> (n
)));
2169 /* static analysis guarentees a RETURN statement will be used before here. */
2170 __builtin_unreachable ();
2178 static decl_node
pop (void)
2180 return static_cast<decl_node
> (mcStack_pop (stk
));
2181 /* static analysis guarentees a RETURN statement will be used before here. */
2182 __builtin_unreachable ();
2190 static decl_node
replace (decl_node n
)
2192 return static_cast<decl_node
> (mcStack_replace (stk
, reinterpret_cast <void *> (n
)));
2193 /* static analysis guarentees a RETURN statement will be used before here. */
2194 __builtin_unreachable ();
2199 peep - returns the top node on the stack without removing it.
2202 static decl_node
peep (void)
2204 return push (pop ());
2205 /* static analysis guarentees a RETURN statement will be used before here. */
2206 __builtin_unreachable ();
2211 depth - returns the depth of the stack.
2214 static unsigned int depth (void)
2216 return mcStack_depth (stk
);
2217 /* static analysis guarentees a RETURN statement will be used before here. */
2218 __builtin_unreachable ();
2226 static void checkDuplicate (bool b
)
2235 static void ErrorString (DynamicStrings_String s
)
2237 mcError_errorStringAt (s
, mcLexBuf_getTokenNo ());
2246 static void ErrorArray (const char *a_
, unsigned int _a_high
)
2250 /* make a local copy of each unbounded array. */
2251 memcpy (a
, a_
, _a_high
+1);
2253 ErrorString (DynamicStrings_InitString ((const char *) a
, _a_high
));
2261 static void pushNunbounded (unsigned int c
)
2270 subrange
= decl_makeSubrange (static_cast<decl_node
> (NULL
), static_cast<decl_node
> (NULL
));
2271 decl_putSubrangeType (subrange
, decl_getCardinal ());
2272 array
= decl_makeArray (subrange
, type
);
2273 decl_putUnbounded (array
);
2274 type
= push (array
);
2281 makeIndexedArray - builds and returns an array of type, t, with, c, indices.
2284 static decl_node
makeIndexedArray (unsigned int c
, decl_node t
)
2290 t
= decl_makeArray (pop (), t
);
2294 /* static analysis guarentees a RETURN statement will be used before here. */
2295 __builtin_unreachable ();
2300 importInto - from, m, import, name, into module, current.
2301 It checks to see if curident is an enumeration type
2302 and if so automatically includes all enumeration fields
2306 static void importInto (decl_node m
, nameKey_Name name
, decl_node current
)
2311 mcDebug_assert (decl_isDef (m
));
2312 mcDebug_assert (((decl_isDef (current
)) || (decl_isModule (current
))) || (decl_isImp (current
)));
2313 s
= decl_lookupExported (m
, name
);
2316 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));
2320 o
= decl_import (current
, s
);
2323 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));
2330 checkEndName - if module does not have, name, then issue an error containing, desc.
2333 static void checkEndName (decl_node module
, nameKey_Name name
, const char *desc_
, unsigned int _desc_high
)
2335 DynamicStrings_String s
;
2336 char desc
[_desc_high
+1];
2338 /* make a local copy of each unbounded array. */
2339 memcpy (desc
, desc_
, _desc_high
+1);
2341 if ((decl_getSymName (module
)) != name
)
2343 s
= DynamicStrings_InitString ((const char *) "inconsistent module name found with this ", 41);
2344 s
= DynamicStrings_ConCat (s
, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) desc
, _desc_high
)));
2351 DescribeStop - issues a message explaining what tokens were expected
2354 static DynamicStrings_String
DescribeStop (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
2357 DynamicStrings_String str
;
2358 DynamicStrings_String message
;
2361 message
= DynamicStrings_InitString ((const char *) "", 0);
2362 if ((((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2364 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "string", 6)));
2367 if ((((1 << (mcReserved_realtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2369 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "real number", 11)));
2372 if ((((1 << (mcReserved_identtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2374 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "identifier", 10)));
2377 if ((((1 << (mcReserved_integertok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2379 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "integer number", 14)));
2382 if ((((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2384 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__INLINE__", 10)));
2387 if ((((1 << (mcReserved_builtintok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2389 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__BUILTIN__", 11)));
2392 if ((((1 << (mcReserved_attributetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2394 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__ATTRIBUTE__", 13)));
2397 if ((((1 << (mcReserved_filetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2399 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__FILE__", 8)));
2402 if ((((1 << (mcReserved_linetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2404 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__LINE__", 8)));
2407 if ((((1 << (mcReserved_datetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2409 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__DATE__", 8)));
2412 if ((((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2414 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "...", 3)));
2417 if ((((1 << (mcReserved_volatiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2419 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VOLATILE", 8)));
2422 if ((((1 << (mcReserved_asmtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2424 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ASM", 3)));
2427 if ((((1 << (mcReserved_withtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2429 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WITH", 4)));
2432 if ((((1 << (mcReserved_whiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2434 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WHILE", 5)));
2437 if ((((1 << (mcReserved_vartok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2439 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VAR", 3)));
2442 if ((((1 << (mcReserved_untiltok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2444 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNTIL", 5)));
2447 if ((((1 << (mcReserved_typetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2449 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TYPE", 4)));
2452 if ((((1 << (mcReserved_totok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2454 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TO", 2)));
2457 if ((((1 << (mcReserved_thentok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2459 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "THEN", 4)));
2462 if ((((1 << (mcReserved_settok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2464 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "SET", 3)));
2467 if ((((1 << (mcReserved_returntok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2469 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETURN", 6)));
2472 if ((((1 << (mcReserved_retrytok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2474 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETRY", 5)));
2477 if ((((1 << (mcReserved_repeattok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2479 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REPEAT", 6)));
2482 if ((((1 << (mcReserved_remtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2484 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REM", 3)));
2487 if ((((1 << (mcReserved_recordtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2489 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RECORD", 6)));
2492 if ((((1 << (mcReserved_unqualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2494 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNQUALIFIED", 11)));
2497 if ((((1 << (mcReserved_qualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2499 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "QUALIFIED", 9)));
2502 if ((((1 << (mcReserved_proceduretok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2504 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PROCEDURE", 9)));
2507 if ((((1 << (mcReserved_pointertok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2509 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "POINTER", 7)));
2512 if ((((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2514 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PACKEDSET", 9)));
2517 if ((((1 << (mcReserved_ortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2519 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OR", 2)));
2522 if ((((1 << (mcReserved_oftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2524 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OF", 2)));
2527 if ((((1 << (mcReserved_nottok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2529 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "NOT", 3)));
2532 if ((((1 << (mcReserved_moduletok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2534 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MODULE", 6)));
2537 if ((((1 << (mcReserved_modtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2539 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MOD", 3)));
2542 if ((((1 << (mcReserved_looptok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2544 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "LOOP", 4)));
2547 if ((((1 << (mcReserved_intok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2549 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IN", 2)));
2552 if ((((1 << (mcReserved_importtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2554 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPORT", 6)));
2557 if ((((1 << (mcReserved_implementationtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2559 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPLEMENTATION", 14)));
2562 if ((((1 << (mcReserved_iftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2564 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IF", 2)));
2567 if ((((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2569 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FROM", 4)));
2572 if ((((1 << (mcReserved_fortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2574 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FOR", 3)));
2577 if ((((1 << (mcReserved_finallytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2579 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FINALLY", 7)));
2582 if ((((1 << (mcReserved_exporttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2584 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXPORT", 6)));
2587 if ((((1 << (mcReserved_exittok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2589 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXIT", 4)));
2592 if ((((1 << (mcReserved_excepttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2594 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXCEPT", 6)));
2597 if ((((1 << (mcReserved_endtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2599 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "END", 3)));
2602 if ((((1 << (mcReserved_elsiftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2604 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSIF", 5)));
2607 if ((((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2609 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSE", 4)));
2612 if ((((1 << (mcReserved_dotok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2614 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DO", 2)));
2617 if ((((1 << (mcReserved_divtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2619 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DIV", 3)));
2622 if ((((1 << (mcReserved_definitiontok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2624 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DEFINITION", 10)));
2627 if ((((1 << (mcReserved_consttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2629 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CONST", 5)));
2632 if ((((1 << (mcReserved_casetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2634 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CASE", 4)));
2637 if ((((1 << (mcReserved_bytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2639 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BY", 2)));
2642 if ((((1 << (mcReserved_begintok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2644 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BEGIN", 5)));
2647 if ((((1 << (mcReserved_arraytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2649 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ARRAY", 5)));
2652 if ((((1 << (mcReserved_andtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2654 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "AND", 3)));
2657 if ((((1 << (mcReserved_colontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2659 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":", 1)));
2662 if ((((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2664 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "..", 2)));
2667 if ((((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2669 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*>", 2)));
2672 if ((((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2674 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<*", 2)));
2677 if ((((1 << (mcReserved_greaterequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2679 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">=", 2)));
2682 if ((((1 << (mcReserved_lessequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2684 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<=", 2)));
2687 if ((((1 << (mcReserved_lessgreatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2689 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<>", 2)));
2692 if ((((1 << (mcReserved_hashtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2694 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "#", 1)));
2697 if ((((1 << (mcReserved_equaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2699 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "=", 1)));
2702 if ((((1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2704 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "^", 1)));
2707 if ((((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2709 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ";", 1)));
2712 if ((((1 << (mcReserved_commatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2714 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ",", 1)));
2717 if ((((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2719 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1)));
2722 if ((((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2724 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "&", 1)));
2727 if ((((1 << (mcReserved_dividetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2729 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "/", 1)));
2732 if ((((1 << (mcReserved_timestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2734 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*", 1)));
2737 if ((((1 << (mcReserved_minustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2739 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-", 1)));
2742 if ((((1 << (mcReserved_plustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2744 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "+", 1)));
2747 if ((((1 << (mcReserved_doublequotestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2749 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '`'), '"'), '\''), ',');
2752 if ((((1 << (mcReserved_singlequotetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2754 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '"'), '\''), '"'), ',');
2757 if ((((1 << (mcReserved_greatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2759 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">", 1)));
2762 if ((((1 << (mcReserved_lesstok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2764 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<", 1)));
2767 if ((((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2769 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ")", 1)));
2772 if ((((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2774 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "(", 1)));
2777 if ((((1 << (mcReserved_rcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2779 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "}", 1)));
2782 if ((((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2784 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{", 1)));
2787 if ((((1 << (mcReserved_rsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2789 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "]", 1)));
2792 if ((((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2794 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "[", 1)));
2797 if ((((1 << (mcReserved_bartok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2799 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "|", 1)));
2802 if ((((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2804 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":=", 2)));
2807 if ((((1 << (mcReserved_eoftok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2809 /* eoftok has no token name (needed to generate error messages) */
2812 str
= DynamicStrings_InitString ((const char *) " syntax error", 13);
2813 message
= DynamicStrings_KillString (message
);
2817 /* avoid dangling else. */
2818 str
= DynamicStrings_ConCat (message
, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
2822 /* avoid dangling else. */
2823 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message
);
2824 message
= DynamicStrings_KillString (message
);
2827 /* static analysis guarentees a RETURN statement will be used before here. */
2828 __builtin_unreachable ();
2833 DescribeError - issues a message explaining what tokens were expected
2836 static void DescribeError (void)
2838 DynamicStrings_String str
;
2840 str
= DynamicStrings_InitString ((const char *) "", 0);
2841 switch (mcLexBuf_currenttoken
)
2843 case mcReserved_stringtok
:
2844 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found string", 26), DynamicStrings_Mark (str
));
2847 case mcReserved_realtok
:
2848 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found real number", 31), DynamicStrings_Mark (str
));
2851 case mcReserved_identtok
:
2852 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found identifier", 30), DynamicStrings_Mark (str
));
2855 case mcReserved_integertok
:
2856 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found integer number", 34), DynamicStrings_Mark (str
));
2859 case mcReserved_inlinetok
:
2860 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __INLINE__", 30), DynamicStrings_Mark (str
));
2863 case mcReserved_builtintok
:
2864 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __BUILTIN__", 31), DynamicStrings_Mark (str
));
2867 case mcReserved_attributetok
:
2868 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __ATTRIBUTE__", 33), DynamicStrings_Mark (str
));
2871 case mcReserved_filetok
:
2872 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __FILE__", 28), DynamicStrings_Mark (str
));
2875 case mcReserved_linetok
:
2876 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __LINE__", 28), DynamicStrings_Mark (str
));
2879 case mcReserved_datetok
:
2880 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __DATE__", 28), DynamicStrings_Mark (str
));
2883 case mcReserved_periodperiodperiodtok
:
2884 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ...", 23), DynamicStrings_Mark (str
));
2887 case mcReserved_volatiletok
:
2888 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VOLATILE", 28), DynamicStrings_Mark (str
));
2891 case mcReserved_asmtok
:
2892 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ASM", 23), DynamicStrings_Mark (str
));
2895 case mcReserved_withtok
:
2896 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WITH", 24), DynamicStrings_Mark (str
));
2899 case mcReserved_whiletok
:
2900 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WHILE", 25), DynamicStrings_Mark (str
));
2903 case mcReserved_vartok
:
2904 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VAR", 23), DynamicStrings_Mark (str
));
2907 case mcReserved_untiltok
:
2908 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNTIL", 25), DynamicStrings_Mark (str
));
2911 case mcReserved_typetok
:
2912 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TYPE", 24), DynamicStrings_Mark (str
));
2915 case mcReserved_totok
:
2916 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TO", 22), DynamicStrings_Mark (str
));
2919 case mcReserved_thentok
:
2920 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found THEN", 24), DynamicStrings_Mark (str
));
2923 case mcReserved_settok
:
2924 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found SET", 23), DynamicStrings_Mark (str
));
2927 case mcReserved_returntok
:
2928 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETURN", 26), DynamicStrings_Mark (str
));
2931 case mcReserved_retrytok
:
2932 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETRY", 25), DynamicStrings_Mark (str
));
2935 case mcReserved_repeattok
:
2936 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REPEAT", 26), DynamicStrings_Mark (str
));
2939 case mcReserved_remtok
:
2940 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REM", 23), DynamicStrings_Mark (str
));
2943 case mcReserved_recordtok
:
2944 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RECORD", 26), DynamicStrings_Mark (str
));
2947 case mcReserved_unqualifiedtok
:
2948 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNQUALIFIED", 31), DynamicStrings_Mark (str
));
2951 case mcReserved_qualifiedtok
:
2952 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found QUALIFIED", 29), DynamicStrings_Mark (str
));
2955 case mcReserved_proceduretok
:
2956 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PROCEDURE", 29), DynamicStrings_Mark (str
));
2959 case mcReserved_pointertok
:
2960 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found POINTER", 27), DynamicStrings_Mark (str
));
2963 case mcReserved_packedsettok
:
2964 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PACKEDSET", 29), DynamicStrings_Mark (str
));
2967 case mcReserved_ortok
:
2968 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OR", 22), DynamicStrings_Mark (str
));
2971 case mcReserved_oftok
:
2972 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OF", 22), DynamicStrings_Mark (str
));
2975 case mcReserved_nottok
:
2976 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found NOT", 23), DynamicStrings_Mark (str
));
2979 case mcReserved_moduletok
:
2980 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MODULE", 26), DynamicStrings_Mark (str
));
2983 case mcReserved_modtok
:
2984 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MOD", 23), DynamicStrings_Mark (str
));
2987 case mcReserved_looptok
:
2988 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found LOOP", 24), DynamicStrings_Mark (str
));
2991 case mcReserved_intok
:
2992 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IN", 22), DynamicStrings_Mark (str
));
2995 case mcReserved_importtok
:
2996 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPORT", 26), DynamicStrings_Mark (str
));
2999 case mcReserved_implementationtok
:
3000 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPLEMENTATION", 34), DynamicStrings_Mark (str
));
3003 case mcReserved_iftok
:
3004 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IF", 22), DynamicStrings_Mark (str
));
3007 case mcReserved_fromtok
:
3008 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FROM", 24), DynamicStrings_Mark (str
));
3011 case mcReserved_fortok
:
3012 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FOR", 23), DynamicStrings_Mark (str
));
3015 case mcReserved_finallytok
:
3016 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FINALLY", 27), DynamicStrings_Mark (str
));
3019 case mcReserved_exporttok
:
3020 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXPORT", 26), DynamicStrings_Mark (str
));
3023 case mcReserved_exittok
:
3024 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXIT", 24), DynamicStrings_Mark (str
));
3027 case mcReserved_excepttok
:
3028 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXCEPT", 26), DynamicStrings_Mark (str
));
3031 case mcReserved_endtok
:
3032 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found END", 23), DynamicStrings_Mark (str
));
3035 case mcReserved_elsiftok
:
3036 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSIF", 25), DynamicStrings_Mark (str
));
3039 case mcReserved_elsetok
:
3040 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSE", 24), DynamicStrings_Mark (str
));
3043 case mcReserved_dotok
:
3044 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DO", 22), DynamicStrings_Mark (str
));
3047 case mcReserved_divtok
:
3048 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DIV", 23), DynamicStrings_Mark (str
));
3051 case mcReserved_definitiontok
:
3052 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DEFINITION", 30), DynamicStrings_Mark (str
));
3055 case mcReserved_consttok
:
3056 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CONST", 25), DynamicStrings_Mark (str
));
3059 case mcReserved_casetok
:
3060 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CASE", 24), DynamicStrings_Mark (str
));
3063 case mcReserved_bytok
:
3064 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BY", 22), DynamicStrings_Mark (str
));
3067 case mcReserved_begintok
:
3068 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BEGIN", 25), DynamicStrings_Mark (str
));
3071 case mcReserved_arraytok
:
3072 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ARRAY", 25), DynamicStrings_Mark (str
));
3075 case mcReserved_andtok
:
3076 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found AND", 23), DynamicStrings_Mark (str
));
3079 case mcReserved_colontok
:
3080 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :", 21), DynamicStrings_Mark (str
));
3083 case mcReserved_periodperiodtok
:
3084 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ..", 22), DynamicStrings_Mark (str
));
3087 case mcReserved_rdirectivetok
:
3088 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *>", 22), DynamicStrings_Mark (str
));
3091 case mcReserved_ldirectivetok
:
3092 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <*", 22), DynamicStrings_Mark (str
));
3095 case mcReserved_greaterequaltok
:
3096 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >=", 22), DynamicStrings_Mark (str
));
3099 case mcReserved_lessequaltok
:
3100 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <=", 22), DynamicStrings_Mark (str
));
3103 case mcReserved_lessgreatertok
:
3104 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <>", 22), DynamicStrings_Mark (str
));
3107 case mcReserved_hashtok
:
3108 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found #", 21), DynamicStrings_Mark (str
));
3111 case mcReserved_equaltok
:
3112 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found =", 21), DynamicStrings_Mark (str
));
3115 case mcReserved_uparrowtok
:
3116 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ^", 21), DynamicStrings_Mark (str
));
3119 case mcReserved_semicolontok
:
3120 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ;", 21), DynamicStrings_Mark (str
));
3123 case mcReserved_commatok
:
3124 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ,", 21), DynamicStrings_Mark (str
));
3127 case mcReserved_periodtok
:
3128 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found .", 21), DynamicStrings_Mark (str
));
3131 case mcReserved_ambersandtok
:
3132 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found &", 21), DynamicStrings_Mark (str
));
3135 case mcReserved_dividetok
:
3136 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found /", 21), DynamicStrings_Mark (str
));
3139 case mcReserved_timestok
:
3140 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *", 21), DynamicStrings_Mark (str
));
3143 case mcReserved_minustok
:
3144 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found -", 21), DynamicStrings_Mark (str
));
3147 case mcReserved_plustok
:
3148 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found +", 21), DynamicStrings_Mark (str
));
3151 case mcReserved_doublequotestok
:
3152 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str
));
3155 case mcReserved_singlequotetok
:
3156 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str
));
3159 case mcReserved_greatertok
:
3160 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >", 21), DynamicStrings_Mark (str
));
3163 case mcReserved_lesstok
:
3164 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <", 21), DynamicStrings_Mark (str
));
3167 case mcReserved_rparatok
:
3168 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found )", 21), DynamicStrings_Mark (str
));
3171 case mcReserved_lparatok
:
3172 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found (", 21), DynamicStrings_Mark (str
));
3175 case mcReserved_rcbratok
:
3176 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found }", 21), DynamicStrings_Mark (str
));
3179 case mcReserved_lcbratok
:
3180 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {", 21), DynamicStrings_Mark (str
));
3183 case mcReserved_rsbratok
:
3184 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ]", 21), DynamicStrings_Mark (str
));
3187 case mcReserved_lsbratok
:
3188 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found [", 21), DynamicStrings_Mark (str
));
3191 case mcReserved_bartok
:
3192 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found |", 21), DynamicStrings_Mark (str
));
3195 case mcReserved_becomestok
:
3196 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :=", 22), DynamicStrings_Mark (str
));
3199 case mcReserved_eoftok
:
3200 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ", 20), DynamicStrings_Mark (str
));
3212 SyntaxError - after a syntax error we skip all tokens up until we reach
3216 static void SyntaxError (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3221 mcPrintf_printf0 ((const char *) "\\nskipping token *** ", 21);
3224 yes the ORD(currenttoken) looks ugly, but it is *much* safer than
3225 using currenttoken<sometok as a change to the ordering of the
3226 token declarations below would cause this to break. Using ORD() we are
3227 immune from such changes
3229 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)))))
3231 mcLexBuf_getToken ();
3235 mcPrintf_printf0 ((const char *) " ***\\n", 6);
3244 static void SyntaxCheck (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3246 /* and again (see above re: ORD)
3248 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)))))
3250 SyntaxError (stopset0
, stopset1
, stopset2
);
3256 WarnMissingToken - generates a warning message about a missing token, t.
3259 static void WarnMissingToken (mcReserved_toktype t
)
3264 DynamicStrings_String str
;
3266 s0
= (mcp4_SetOfStop0
) 0;
3267 s1
= (mcp4_SetOfStop1
) 0;
3268 s2
= (mcp4_SetOfStop2
) 0;
3269 if ( ((unsigned int) (t
)) < 32)
3271 s0
= (mcp4_SetOfStop0
) ((1 << (t
-mcReserved_eoftok
)));
3273 else if ( ((unsigned int) (t
)) < 64)
3275 /* avoid dangling else. */
3276 s1
= (mcp4_SetOfStop1
) ((1 << (t
-mcReserved_arraytok
)));
3280 /* avoid dangling else. */
3281 s2
= (mcp4_SetOfStop2
) ((1 << (t
-mcReserved_recordtok
)));
3283 str
= DescribeStop (s0
, s1
, s2
);
3284 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error,", 13), DynamicStrings_Mark (str
));
3285 mcError_errorStringAt (str
, mcLexBuf_getTokenNo ());
3290 MissingToken - generates a warning message about a missing token, t.
3293 static void MissingToken (mcReserved_toktype t
)
3295 WarnMissingToken (t
);
3296 if ((((t
!= mcReserved_identtok
) && (t
!= mcReserved_integertok
)) && (t
!= mcReserved_realtok
)) && (t
!= mcReserved_stringtok
))
3300 mcPrintf_printf0 ((const char *) "inserting token\\n", 17);
3302 mcLexBuf_insertToken (t
);
3311 static bool CheckAndInsert (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3313 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))))
3315 WarnMissingToken (t
);
3316 mcLexBuf_insertTokenAndRewind (t
);
3323 /* static analysis guarentees a RETURN statement will be used before here. */
3324 __builtin_unreachable ();
3332 static bool InStopSet (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3334 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))))
3342 /* static analysis guarentees a RETURN statement will be used before here. */
3343 __builtin_unreachable ();
3348 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
3349 If it is not then it will insert a token providing the token
3350 is one of ; ] ) } . OF END ,
3352 if the stopset contains <identtok> then we do not insert a token
3355 static void PeepToken (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3357 /* and again (see above re: ORD)
3359 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
))))
3361 /* SyntaxCheck would fail since currentoken is not part of the stopset
3362 we check to see whether any of currenttoken might be a commonly omitted token */
3363 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
)))
3373 static void Expect (mcReserved_toktype t
, mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3375 if (mcLexBuf_currenttoken
== t
)
3377 /* avoid dangling else. */
3378 mcLexBuf_getToken ();
3381 PeepToken (stopset0
, stopset1
, stopset2
);
3388 SyntaxCheck (stopset0
, stopset1
, stopset2
);
3393 Ident - error checking varient of Ident
3396 static void Ident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3398 curident
= nameKey_makekey (mcLexBuf_currentstring
);
3399 Expect (mcReserved_identtok
, stopset0
, stopset1
, stopset2
);
3407 static void string (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3409 curstring
= nameKey_makekey (mcLexBuf_currentstring
);
3410 Expect (mcReserved_stringtok
, stopset0
, stopset1
, stopset2
);
3418 static void Integer (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3422 n
= push (decl_makeLiteralInt (nameKey_makekey (mcLexBuf_currentstring
)));
3423 Expect (mcReserved_integertok
, stopset0
, stopset1
, stopset2
);
3431 static void Real (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3435 n
= push (decl_makeLiteralReal (nameKey_makekey (mcLexBuf_currentstring
)));
3436 Expect (mcReserved_realtok
, stopset0
, stopset1
, stopset2
);
3441 FileUnit := DefinitionModule |
3442 ImplementationOrProgramModule
3444 first symbols:implementationtok, moduletok, definitiontok
3449 static void FileUnit (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3451 if (mcLexBuf_currenttoken
== mcReserved_definitiontok
)
3453 DefinitionModule (stopset0
, stopset1
, stopset2
);
3455 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)))
3457 /* avoid dangling else. */
3458 ImplementationOrProgramModule (stopset0
, stopset1
, stopset2
);
3462 /* avoid dangling else. */
3463 ErrorArray ((const char *) "expecting one of: IMPLEMENTATION MODULE DEFINITION", 50);
3469 ProgramModule := 'MODULE' Ident
3470 % curmodule := lookupModule (curident) %
3472 % enterScope (curmodule) %
3474 % resetConstExpPos (curmodule) %
3475 [ Priority ] ';' { Import } Block
3477 % checkEndName (curmodule, curident, 'program module') %
3482 first symbols:moduletok
3487 static void ProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3489 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3490 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3491 curmodule
= decl_lookupModule (curident
);
3492 decl_enterScope (curmodule
);
3493 decl_resetConstExpPos (curmodule
);
3494 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
3496 Priority (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3498 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
))));
3499 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)))
3501 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
))));
3504 Block (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3505 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3506 checkEndName (curmodule
, curident
, (const char *) "program module", 14);
3508 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
3513 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
3515 % curmodule := lookupImp (curident) %
3517 % enterScope (lookupDef (curident)) %
3519 % enterScope (curmodule) %
3521 % resetConstExpPos (curmodule) %
3522 [ Priority ] ';' { Import }
3524 % checkEndName (curmodule, curident, 'implementation module') %
3526 % leaveScope ; leaveScope %
3529 first symbols:implementationtok
3534 static void ImplementationModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3536 Expect (mcReserved_implementationtok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_moduletok
-mcReserved_arraytok
))), stopset2
);
3537 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3538 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3539 curmodule
= decl_lookupImp (curident
);
3540 decl_enterScope (decl_lookupDef (curident
));
3541 decl_enterScope (curmodule
);
3542 decl_resetConstExpPos (curmodule
);
3543 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
3545 Priority (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3547 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
))));
3548 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)))
3550 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
))));
3553 Block (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3554 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3555 checkEndName (curmodule
, curident
, (const char *) "implementation module", 21);
3558 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
3563 ImplementationOrProgramModule := ImplementationModule |
3566 first symbols:moduletok, implementationtok
3571 static void ImplementationOrProgramModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3573 if (mcLexBuf_currenttoken
== mcReserved_implementationtok
)
3575 ImplementationModule (stopset0
, stopset1
, stopset2
);
3577 else if (mcLexBuf_currenttoken
== mcReserved_moduletok
)
3579 /* avoid dangling else. */
3580 ProgramModule (stopset0
, stopset1
, stopset2
);
3584 /* avoid dangling else. */
3585 ErrorArray ((const char *) "expecting one of: MODULE IMPLEMENTATION", 39);
3591 Number := Integer | Real
3593 first symbols:realtok, integertok
3598 static void Number (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3600 if (mcLexBuf_currenttoken
== mcReserved_integertok
)
3602 Integer (stopset0
, stopset1
, stopset2
);
3604 else if (mcLexBuf_currenttoken
== mcReserved_realtok
)
3606 /* avoid dangling else. */
3607 Real (stopset0
, stopset1
, stopset2
);
3611 /* avoid dangling else. */
3612 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
3618 Qualident := Ident { '.' Ident }
3620 first symbols:identtok
3625 static void Qualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3627 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3628 while (mcLexBuf_currenttoken
== mcReserved_periodtok
)
3630 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3631 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3638 ConstantDeclaration :=
3639 % VAR d, e: node ; %
3641 % d := lookupSym (curident) %
3645 % assert (isConst (d)) %
3650 first symbols:identtok
3655 static void ConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3660 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3661 d
= decl_lookupSym (curident
);
3662 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
))));
3663 ConstExpression (stopset0
, stopset1
, stopset2
);
3665 mcDebug_assert (decl_isConst (d
));
3666 decl_putConst (d
, e
);
3672 % VAR c, l, r: node ; op: toktype ; d: CARDINAL ; %
3676 % c := push (getNextConstExp ()) %
3678 % op := currenttoken %
3679 [ Relation SimpleConstExpr
3684 % l := push (makeBinaryTok (op, l, r)) %
3686 % c := replace (fixupConstExp (c, pop ())) %
3688 % assert (d+1 = depth ()) %
3691 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3696 static void ConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3701 mcReserved_toktype op
;
3705 c
= push (decl_getNextConstExp ());
3706 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
);
3707 op
= mcLexBuf_currenttoken
;
3708 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
))
3710 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
))));
3711 SimpleConstExpr (stopset0
, stopset1
, stopset2
);
3714 l
= push (decl_makeBinaryTok (op
, l
, r
));
3716 c
= replace (decl_fixupConstExp (c
, pop ()));
3717 mcDebug_assert ((d
+1) == (depth ()));
3722 Relation := '=' | '#' | '<>' | '<' | '<=' |
3725 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
3730 static void Relation (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3732 if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
3734 Expect (mcReserved_equaltok
, stopset0
, stopset1
, stopset2
);
3736 else if (mcLexBuf_currenttoken
== mcReserved_hashtok
)
3738 /* avoid dangling else. */
3739 Expect (mcReserved_hashtok
, stopset0
, stopset1
, stopset2
);
3741 else if (mcLexBuf_currenttoken
== mcReserved_lessgreatertok
)
3743 /* avoid dangling else. */
3744 Expect (mcReserved_lessgreatertok
, stopset0
, stopset1
, stopset2
);
3746 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
3748 /* avoid dangling else. */
3749 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
);
3751 else if (mcLexBuf_currenttoken
== mcReserved_lessequaltok
)
3753 /* avoid dangling else. */
3754 Expect (mcReserved_lessequaltok
, stopset0
, stopset1
, stopset2
);
3756 else if (mcLexBuf_currenttoken
== mcReserved_greatertok
)
3758 /* avoid dangling else. */
3759 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
3761 else if (mcLexBuf_currenttoken
== mcReserved_greaterequaltok
)
3763 /* avoid dangling else. */
3764 Expect (mcReserved_greaterequaltok
, stopset0
, stopset1
, stopset2
);
3766 else if (mcLexBuf_currenttoken
== mcReserved_intok
)
3768 /* avoid dangling else. */
3769 Expect (mcReserved_intok
, stopset0
, stopset1
, stopset2
);
3773 /* avoid dangling else. */
3774 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
3781 % VAR op: toktype ; n: node ; %
3785 % op := currenttoken %
3786 AddOperator ConstTerm
3787 % n := makeBinaryTok (op, n, pop ()) %
3792 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3797 static void SimpleConstExpr (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3799 mcReserved_toktype op
;
3802 UnaryOrConstTerm (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
3804 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
))
3806 op
= mcLexBuf_currenttoken
;
3807 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
))));
3808 ConstTerm (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
3809 n
= decl_makeBinaryTok (op
, n
, pop ());
3820 % n := push (makeUnaryTok (plustok, pop ())) %
3822 % n := push (makeUnaryTok (minustok, pop ())) %
3825 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3830 static void UnaryOrConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3834 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
3836 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
))));
3837 ConstTerm (stopset0
, stopset1
, stopset2
);
3838 n
= push (decl_makeUnaryTok (mcReserved_plustok
, pop ()));
3840 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
3842 /* avoid dangling else. */
3843 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
))));
3844 ConstTerm (stopset0
, stopset1
, stopset2
);
3845 n
= push (decl_makeUnaryTok (mcReserved_minustok
, pop ()));
3847 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))))
3849 /* avoid dangling else. */
3850 ConstTerm (stopset0
, stopset1
, stopset2
);
3854 /* avoid dangling else. */
3855 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ { string identifier - +", 88);
3861 AddOperator := '+' | '-' | 'OR'
3863 first symbols:ortok, minustok, plustok
3868 static void AddOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3870 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
3872 Expect (mcReserved_plustok
, stopset0
, stopset1
, stopset2
);
3874 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
3876 /* avoid dangling else. */
3877 Expect (mcReserved_minustok
, stopset0
, stopset1
, stopset2
);
3879 else if (mcLexBuf_currenttoken
== mcReserved_ortok
)
3881 /* avoid dangling else. */
3882 Expect (mcReserved_ortok
, stopset0
, stopset1
, stopset2
);
3886 /* avoid dangling else. */
3887 ErrorArray ((const char *) "expecting one of: OR - +", 24);
3894 % VAR op: toktype ; n: node ; %
3898 % op := currenttoken %
3899 MulOperator ConstFactor
3900 % n := makeBinaryTok (op, n, pop ()) %
3905 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
3910 static void ConstTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3912 mcReserved_toktype op
;
3915 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
))));
3917 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
))
3919 op
= mcLexBuf_currenttoken
;
3920 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
))));
3921 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
))));
3922 n
= decl_makeBinaryTok (op
, n
, pop ());
3930 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
3933 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
3938 static void MulOperator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3940 if (mcLexBuf_currenttoken
== mcReserved_timestok
)
3942 Expect (mcReserved_timestok
, stopset0
, stopset1
, stopset2
);
3944 else if (mcLexBuf_currenttoken
== mcReserved_dividetok
)
3946 /* avoid dangling else. */
3947 Expect (mcReserved_dividetok
, stopset0
, stopset1
, stopset2
);
3949 else if (mcLexBuf_currenttoken
== mcReserved_divtok
)
3951 /* avoid dangling else. */
3952 Expect (mcReserved_divtok
, stopset0
, stopset1
, stopset2
);
3954 else if (mcLexBuf_currenttoken
== mcReserved_modtok
)
3956 /* avoid dangling else. */
3957 Expect (mcReserved_modtok
, stopset0
, stopset1
, stopset2
);
3959 else if (mcLexBuf_currenttoken
== mcReserved_remtok
)
3961 /* avoid dangling else. */
3962 Expect (mcReserved_remtok
, stopset0
, stopset1
, stopset2
);
3964 else if (mcLexBuf_currenttoken
== mcReserved_andtok
)
3966 /* avoid dangling else. */
3967 Expect (mcReserved_andtok
, stopset0
, stopset1
, stopset2
);
3969 else if (mcLexBuf_currenttoken
== mcReserved_ambersandtok
)
3971 /* avoid dangling else. */
3972 Expect (mcReserved_ambersandtok
, stopset0
, stopset1
, stopset2
);
3976 /* avoid dangling else. */
3977 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
3983 NotConstFactor := 'NOT' ConstFactor
3986 % n := push (makeUnaryTok (nottok, pop ())) %
3989 first symbols:nottok
3994 static void NotConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
3998 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
))));
3999 ConstFactor (stopset0
, stopset1
, stopset2
);
4000 n
= push (decl_makeUnaryTok (mcReserved_nottok
, pop ()));
4005 ConstFactor := Number | ConstString |
4006 ConstSetOrQualidentOrFunction |
4007 '(' ConstExpression ')' |
4011 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
4016 static void ConstFactor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4018 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
))))) != 0)))
4020 Number (stopset0
, stopset1
, stopset2
);
4022 else if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
4024 /* avoid dangling else. */
4025 ConstString (stopset0
, stopset1
, stopset2
);
4027 else if ((mcLexBuf_currenttoken
== mcReserved_lcbratok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
4029 /* avoid dangling else. */
4030 ConstSetOrQualidentOrFunction (stopset0
, stopset1
, stopset2
);
4032 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4034 /* avoid dangling else. */
4035 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
))));
4036 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4037 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4039 else if (mcLexBuf_currenttoken
== mcReserved_nottok
)
4041 /* avoid dangling else. */
4042 NotConstFactor (stopset0
, stopset1
, stopset2
);
4044 else if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
4046 /* avoid dangling else. */
4047 ConstAttribute (stopset0
, stopset1
, stopset2
);
4051 /* avoid dangling else. */
4052 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( { identifier string integer number real number", 84);
4058 ConstString := string
4061 % n := push (makeString (curstring)) %
4064 first symbols:stringtok
4069 static void ConstString (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4073 string (stopset0
, stopset1
, stopset2
);
4074 n
= push (decl_makeString (curstring
));
4079 ConstComponentElement := ConstExpression
4080 % VAR l, h, n: node ; %
4085 [ '..' ConstExpression
4089 % ErrorArray ('implementation restriction range is not allowed') %
4091 % n := push (includeSetValue (pop (), l, h)) %
4094 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4099 static void ConstComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4105 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4107 h
= static_cast<decl_node
> (NULL
);
4108 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
4110 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
))));
4111 ConstExpression (stopset0
, stopset1
, stopset2
);
4113 ErrorArray ((const char *) "implementation restriction range is not allowed", 47);
4115 n
= push (decl_includeSetValue (pop (), l
, h
));
4120 ConstComponentValue := ConstComponentElement [ 'BY'
4122 % ErrorArray ('implementation restriction BY not allowed') %
4125 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4130 static void ConstComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4132 ConstComponentElement (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
))), stopset2
);
4133 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
4135 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
))));
4136 ErrorArray ((const char *) "implementation restriction BY not allowed", 41);
4137 ConstExpression (stopset0
, stopset1
, stopset2
);
4143 ConstArraySetRecordValue := ConstComponentValue
4144 { ',' ConstComponentValue }
4146 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4151 static void ConstArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4153 ConstComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4154 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4156 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
))));
4157 ConstComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4164 ConstConstructor := '{'
4167 % n := push (makeSetValue ()) %
4168 [ ConstArraySetRecordValue ]
4171 first symbols:lcbratok
4176 static void ConstConstructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4180 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
))));
4181 n
= push (decl_makeSetValue ());
4182 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))))
4184 ConstArraySetRecordValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rcbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4186 Expect (mcReserved_rcbratok
, stopset0
, stopset1
, stopset2
);
4191 ConstSetOrQualidentOrFunction :=
4192 % VAR q, p, n: node ; d: CARDINAL ; %
4196 % assert (d+1 = depth ()) %
4203 % n := push (putSetValue (p, q)) %
4205 % assert (d+1 = depth ()) %
4207 ConstActualParameters
4213 % n := push (makeFuncCall (q, p)) %
4215 % assert (d+1 = depth ()) %
4221 % assert (d+1 = depth ()) %
4224 first symbols:identtok, lcbratok
4229 static void ConstSetOrQualidentOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4236 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4238 /* avoid dangling else. */
4240 PushQualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4241 mcDebug_assert ((d
+1) == (depth ()));
4242 if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))))) != 0)))
4244 /* avoid gcc warning by using compound statement even if not strictly necessary. */
4245 /* seen optional [ | ] expression */
4246 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
4248 ConstConstructor (stopset0
, stopset1
, stopset2
);
4251 n
= push (decl_putSetValue (p
, q
));
4252 mcDebug_assert ((d
+1) == (depth ()));
4254 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4256 /* avoid dangling else. */
4257 ConstActualParameters (stopset0
, stopset1
, stopset2
);
4260 n
= push (decl_makeFuncCall (q
, p
));
4261 mcDebug_assert ((d
+1) == (depth ()));
4265 /* avoid dangling else. */
4266 ErrorArray ((const char *) "expecting one of: ( {", 21);
4269 /* end of optional [ | ] expression */
4274 ConstConstructor (stopset0
, stopset1
, stopset2
);
4275 mcDebug_assert ((d
+1) == (depth ()));
4281 ConstActualParameters := '('
4284 % n := push (makeExpList ()) %
4285 [ ConstExpList ] ')'
4286 % assert (isExpList (peep ())) %
4289 first symbols:lparatok
4294 static void ConstActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4298 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
))));
4299 n
= push (decl_makeExpList ());
4300 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))))
4302 ConstExpList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4304 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4305 mcDebug_assert (decl_isExpList (peep ()));
4311 % VAR p, n: node ; %
4315 % assert (isExpList (p)) %
4317 % putExpList (p, pop ()) %
4319 % assert (p = peep ()) %
4321 % assert (isExpList (peep ())) %
4322 { ',' ConstExpression
4323 % putExpList (p, pop ()) %
4325 % assert (isExpList (peep ())) %
4328 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4333 static void ConstExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4339 mcDebug_assert (decl_isExpList (p
));
4340 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4341 decl_putExpList (p
, pop ());
4342 mcDebug_assert (p
== (peep ()));
4343 mcDebug_assert (decl_isExpList (peep ()));
4344 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4346 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
))));
4347 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4348 decl_putExpList (p
, pop ());
4349 mcDebug_assert (decl_isExpList (peep ()));
4356 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4357 '(' '(' ConstAttributeExpression
4360 first symbols:attributetok
4365 static void ConstAttribute (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4367 Expect (mcReserved_attributetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_builtintok
-mcReserved_recordtok
))));
4368 Expect (mcReserved_builtintok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4369 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4370 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lesstok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4371 ConstAttributeExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4372 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4373 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4378 ConstAttributeExpression := Ident
4381 % n := push (getBuiltinConst (curident)) %
4385 first symbols:lesstok, identtok
4390 static void ConstAttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4394 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4396 Ident (stopset0
, stopset1
, stopset2
);
4397 n
= push (decl_getBuiltinConst (curident
));
4399 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
4401 /* avoid dangling else. */
4402 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4403 Qualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4404 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4405 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_greatertok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4406 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
4410 /* avoid dangling else. */
4411 ErrorArray ((const char *) "expecting one of: < identifier", 30);
4419 first symbols:ldirectivetok
4424 static void ByteAlignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4426 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4427 AttributeExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4428 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4433 OptAlignmentExpression := [ AlignmentExpression ]
4435 first symbols:lparatok
4440 static void OptAlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4442 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4444 AlignmentExpression (stopset0
, stopset1
, stopset2
);
4450 AlignmentExpression := '(' ConstExpression ')'
4452 first symbols:lparatok
4457 static void AlignmentExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4459 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
))));
4460 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4461 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4466 Alignment := [ ByteAlignment ]
4468 first symbols:ldirectivetok
4473 static void Alignment (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4475 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4477 ByteAlignment (stopset0
, stopset1
, stopset2
);
4483 IdentList := Ident { ',' Ident }
4485 first symbols:identtok
4490 static void IdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4492 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4493 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4495 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4496 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4506 % n := makeIdentList () %
4508 % checkDuplicate (putIdent (n, curident)) %
4510 % checkDuplicate (putIdent (n, curident)) %
4515 first symbols:identtok
4520 static void PushIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4524 n
= decl_makeIdentList ();
4525 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4526 checkDuplicate (decl_putIdent (n
, curident
));
4527 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4529 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4530 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4531 checkDuplicate (decl_putIdent (n
, curident
));
4539 SubrangeType := '[' ConstExpression '..' ConstExpression
4542 first symbols:lsbratok
4547 static void SubrangeType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4549 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
))));
4550 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4551 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
))));
4552 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4553 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
4558 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
4561 first symbols:arraytok
4566 static void ArrayType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4568 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
))));
4569 SimpleType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4570 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4572 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
))));
4573 SimpleType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4576 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
))));
4577 Type (stopset0
, stopset1
, stopset2
);
4582 RecordType := 'RECORD' [ DefaultRecordAttributes ]
4583 FieldListSequence 'END'
4585 first symbols:recordtok
4590 static void RecordType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4592 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
))));
4593 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4595 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
))));
4597 FieldListSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4598 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
4603 DefaultRecordAttributes := ''
4605 first symbols:ldirectivetok
4610 static void DefaultRecordAttributes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4612 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4613 AttributeExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4614 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4619 RecordFieldPragma := [ '' ]
4621 first symbols:ldirectivetok
4626 static void RecordFieldPragma (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4628 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4630 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4631 FieldPragmaExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
)) | (1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4632 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4634 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4635 FieldPragmaExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4638 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4644 FieldPragmaExpression := Ident PragmaConstExpression
4646 first symbols:identtok
4651 static void FieldPragmaExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4653 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4654 PragmaConstExpression (stopset0
, stopset1
, stopset2
);
4659 PragmaConstExpression := [ '(' ConstExpression ')' ]
4661 first symbols:lparatok
4666 static void PragmaConstExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4668 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4670 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
))));
4671 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4672 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4678 AttributeExpression := Ident '(' ConstExpression
4681 first symbols:identtok
4686 static void AttributeExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4688 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4689 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
))));
4690 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4691 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4696 FieldListSequence := FieldListStatement { ';' FieldListStatement }
4698 first symbols:casetok, identtok, semicolontok
4703 static void FieldListSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4705 FieldListStatement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4706 while (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
4708 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
))));
4709 FieldListStatement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4716 FieldListStatement := [ FieldList ]
4718 first symbols:identtok, casetok
4723 static void FieldListStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4725 if ((mcLexBuf_currenttoken
== mcReserved_casetok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
4727 FieldList (stopset0
, stopset1
, stopset2
);
4733 FieldList := IdentList ':' Type RecordFieldPragma |
4734 'CASE' CaseTag 'OF' Varient { '|' Varient }
4735 [ 'ELSE' FieldListSequence ] 'END'
4737 first symbols:casetok, identtok
4742 static void FieldList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4744 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4746 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4747 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
))));
4748 Type (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4749 RecordFieldPragma (stopset0
, stopset1
, stopset2
);
4751 else if (mcLexBuf_currenttoken
== mcReserved_casetok
)
4753 /* avoid dangling else. */
4754 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
))));
4755 CaseTag (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4756 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
))));
4757 Varient (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4758 while (mcLexBuf_currenttoken
== mcReserved_bartok
)
4760 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
))));
4761 Varient (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
))), stopset2
);
4764 if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
4766 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
))));
4767 FieldListSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4769 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
4773 /* avoid dangling else. */
4774 ErrorArray ((const char *) "expecting one of: CASE identifier", 33);
4781 % curident := NulName %
4784 first symbols:identtok
4789 static void TagIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4791 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4793 Ident (stopset0
, stopset1
, stopset2
);
4797 curident
= nameKey_NulName
;
4803 CaseTag := TagIdent [ ':' Qualident ]
4805 first symbols:colontok, identtok
4810 static void CaseTag (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4812 TagIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4813 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
4815 Expect (mcReserved_colontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4816 Qualident (stopset0
, stopset1
, stopset2
);
4822 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
4824 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4829 static void Varient (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4831 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))))
4833 VarientCaseLabelList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4834 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
))));
4835 FieldListSequence (stopset0
, stopset1
, stopset2
);
4841 VarientCaseLabelList := VarientCaseLabels { ','
4844 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4849 static void VarientCaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4851 VarientCaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4852 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4854 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
))));
4855 VarientCaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4862 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
4864 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4869 static void VarientCaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4871 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4872 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
4874 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
))));
4875 ConstExpression (stopset0
, stopset1
, stopset2
);
4881 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
4883 first symbols:oftok, packedsettok, settok
4888 static void SetType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4890 if (mcLexBuf_currenttoken
== mcReserved_settok
)
4892 Expect (mcReserved_settok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4894 else if (mcLexBuf_currenttoken
== mcReserved_packedsettok
)
4896 /* avoid dangling else. */
4897 Expect (mcReserved_packedsettok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4901 /* avoid dangling else. */
4902 ErrorArray ((const char *) "expecting one of: PACKEDSET SET", 31);
4904 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
))));
4905 SimpleType (stopset0
, stopset1
, stopset2
);
4910 PointerType := 'POINTER' 'TO' Type
4912 first symbols:pointertok
4917 static void PointerType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4919 Expect (mcReserved_pointertok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_totok
-mcReserved_recordtok
))));
4920 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
))));
4921 Type (stopset0
, stopset1
, stopset2
);
4926 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
4928 first symbols:proceduretok
4933 static void ProcedureType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4935 Expect (mcReserved_proceduretok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4936 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4938 FormalTypeList (stopset0
, stopset1
, stopset2
);
4944 FormalTypeList := '(' ( ')' FormalReturn |
4945 ProcedureParameters ')'
4948 first symbols:lparatok
4953 static void FormalTypeList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4955 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
))));
4956 if (mcLexBuf_currenttoken
== mcReserved_rparatok
)
4958 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4959 FormalReturn (stopset0
, stopset1
, stopset2
);
4961 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))))
4963 /* avoid dangling else. */
4964 ProcedureParameters (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4965 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4966 FormalReturn (stopset0
, stopset1
, stopset2
);
4970 /* avoid dangling else. */
4971 ErrorArray ((const char *) "expecting one of: VAR ... ARRAY identifier )", 44);
4977 FormalReturn := [ ':' OptReturnType ]
4979 first symbols:colontok
4984 static void FormalReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
4986 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
4988 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4989 OptReturnType (stopset0
, stopset1
, stopset2
);
4995 OptReturnType := '[' Qualident ']' |
4998 first symbols:identtok, lsbratok
5003 static void OptReturnType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5005 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5007 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5008 Qualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5009 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5011 else if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5013 /* avoid dangling else. */
5014 Qualident (stopset0
, stopset1
, stopset2
);
5018 /* avoid dangling else. */
5019 ErrorArray ((const char *) "expecting one of: identifier [", 30);
5025 ProcedureParameters := ProcedureParameter { ','
5026 ProcedureParameter }
5028 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
5033 static void ProcedureParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5035 ProcedureParameter (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5036 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5038 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
))));
5039 ProcedureParameter (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5046 ProcedureParameter := '...' | 'VAR' FormalType |
5049 first symbols:identtok, arraytok, vartok, periodperiodperiodtok
5054 static void ProcedureParameter (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5056 if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
5058 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
5060 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
5062 /* avoid dangling else. */
5063 Expect (mcReserved_vartok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5064 FormalType (stopset0
, stopset1
, stopset2
);
5066 else if ((mcLexBuf_currenttoken
== mcReserved_arraytok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
5068 /* avoid dangling else. */
5069 FormalType (stopset0
, stopset1
, stopset2
);
5073 /* avoid dangling else. */
5074 ErrorArray ((const char *) "expecting one of: ARRAY identifier VAR ...", 42);
5080 VarIdent := Ident [ '[' ConstExpression
5086 first symbols:identtok
5091 static void VarIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5095 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5096 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5098 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
))));
5099 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5101 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5107 VarIdentList := VarIdent { ',' VarIdent }
5109 first symbols:identtok
5114 static void VarIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5116 VarIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5117 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5119 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5120 VarIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5127 VariableDeclaration := VarIdentList ':' Type Alignment
5129 first symbols:identtok
5134 static void VariableDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5136 VarIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5137 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
))));
5138 Type (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5139 Alignment (stopset0
, stopset1
, stopset2
);
5144 Designator := Qualident { SubDesignator }
5146 first symbols:identtok
5151 static void Designator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5153 Qualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5154 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)))
5156 SubDesignator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5163 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
5166 first symbols:uparrowtok, lsbratok, periodtok
5171 static void SubDesignator (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5173 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
5175 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5176 Ident (stopset0
, stopset1
, stopset2
);
5178 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5180 /* avoid dangling else. */
5181 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
))));
5182 ArrayExpList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5183 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5185 else if (mcLexBuf_currenttoken
== mcReserved_uparrowtok
)
5187 /* avoid dangling else. */
5188 Expect (mcReserved_uparrowtok
, stopset0
, stopset1
, stopset2
);
5192 /* avoid dangling else. */
5193 ErrorArray ((const char *) "expecting one of: ^ [ .", 23);
5199 ArrayExpList := Expression { ',' Expression }
5201 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5206 static void ArrayExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5208 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5209 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5211 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
))));
5212 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5219 ExpList := Expression { ',' Expression }
5221 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5226 static void ExpList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5228 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5229 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5231 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
))));
5232 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5239 Expression := SimpleExpression [ Relation SimpleExpression ]
5241 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5246 static void Expression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5248 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
);
5249 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
))
5251 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
))));
5252 SimpleExpression (stopset0
, stopset1
, stopset2
);
5258 SimpleExpression := UnaryOrTerm { AddOperator Term }
5260 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5265 static void SimpleExpression (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5267 UnaryOrTerm (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
5268 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
))
5270 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
))));
5271 Term (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
5278 UnaryOrTerm := '+' Term | '-' Term |
5281 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5286 static void UnaryOrTerm (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5288 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
5290 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
))));
5291 Term (stopset0
, stopset1
, stopset2
);
5293 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
5295 /* avoid dangling else. */
5296 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
))));
5297 Term (stopset0
, stopset1
, stopset2
);
5299 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))))
5301 /* avoid dangling else. */
5302 Term (stopset0
, stopset1
, stopset2
);
5306 /* avoid dangling else. */
5307 ErrorArray ((const char *) "expecting one of: NOT ( string integer number real number identifier { - +", 74);
5313 Term := Factor { MulOperator Factor }
5315 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
5320 static void Term (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5322 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
))));
5323 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
))
5325 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
))));
5326 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
))));
5333 Factor := Number | string | SetOrDesignatorOrFunction |
5334 '(' Expression ')' |
5335 'NOT' ( Factor | ConstAttribute )
5337 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
5342 static void Factor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5344 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
))))) != 0)))
5346 Number (stopset0
, stopset1
, stopset2
);
5348 else if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
5350 /* avoid dangling else. */
5351 string (stopset0
, stopset1
, stopset2
);
5353 else if ((mcLexBuf_currenttoken
== mcReserved_lcbratok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
5355 /* avoid dangling else. */
5356 SetOrDesignatorOrFunction (stopset0
, stopset1
, stopset2
);
5358 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5360 /* avoid dangling else. */
5361 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
))));
5362 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5363 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
5365 else if (mcLexBuf_currenttoken
== mcReserved_nottok
)
5367 /* avoid dangling else. */
5368 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
))));
5369 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))))
5371 Factor (stopset0
, stopset1
, stopset2
);
5373 else if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
5375 /* avoid dangling else. */
5376 ConstAttribute (stopset0
, stopset1
, stopset2
);
5380 /* avoid dangling else. */
5381 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ real number integer number string ( NOT { identifier", 84);
5386 /* avoid dangling else. */
5387 ErrorArray ((const char *) "expecting one of: NOT ( identifier { string integer number real number", 70);
5393 ComponentElement := Expression [ '..' Expression
5395 % ErrorArray ('implementation restriction range not allowed') %
5398 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5403 static void ComponentElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5405 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5406 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
5408 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
))));
5409 Expression (stopset0
, stopset1
, stopset2
);
5410 ErrorArray ((const char *) "implementation restriction range not allowed", 44);
5416 ComponentValue := ComponentElement [ 'BY'
5417 % ErrorArray ('implementation restriction BY not allowed') %
5420 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5425 static void ComponentValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5427 ComponentElement (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
))), stopset2
);
5428 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
5430 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
))));
5431 ErrorArray ((const char *) "implementation restriction BY not allowed", 41);
5432 Expression (stopset0
, stopset1
, stopset2
);
5438 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
5440 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5445 static void ArraySetRecordValue (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5447 ComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5448 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5450 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
))));
5451 ComponentValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5458 Constructor := '{' [ ArraySetRecordValue ] '}'
5460 first symbols:lcbratok
5465 static void Constructor (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5467 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
))));
5468 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))))
5470 ArraySetRecordValue (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rcbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5472 Expect (mcReserved_rcbratok
, stopset0
, stopset1
, stopset2
);
5477 SetOrDesignatorOrFunction := Qualident [ Constructor |
5479 [ ActualParameters ] ] |
5482 first symbols:lcbratok, identtok
5487 static void SetOrDesignatorOrFunction (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5489 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5491 /* avoid dangling else. */
5492 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
);
5493 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)))
5495 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5496 /* seen optional [ | ] expression */
5497 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
5499 Constructor (stopset0
, stopset1
, stopset2
);
5501 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)))
5503 /* avoid dangling else. */
5504 SimpleDes (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5505 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5507 ActualParameters (stopset0
, stopset1
, stopset2
);
5512 /* avoid dangling else. */
5513 ErrorArray ((const char *) "expecting one of: ( ^ [ . {", 27);
5516 /* end of optional [ | ] expression */
5518 else if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
5520 /* avoid dangling else. */
5521 Constructor (stopset0
, stopset1
, stopset2
);
5525 /* avoid dangling else. */
5526 ErrorArray ((const char *) "expecting one of: { identifier", 30);
5532 SimpleDes := { SubDesignator }
5534 first symbols:periodtok, lsbratok, uparrowtok
5539 static void SimpleDes (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5541 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)))
5543 SubDesignator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5550 ActualParameters := '(' [ ExpList ] ')'
5552 first symbols:lparatok
5557 static void ActualParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5559 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
))));
5560 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))))
5562 ExpList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5564 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
5569 ExitStatement := 'EXIT'
5571 first symbols:exittok
5576 static void ExitStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5578 Expect (mcReserved_exittok
, stopset0
, stopset1
, stopset2
);
5583 ReturnStatement := 'RETURN' [ Expression ]
5585 first symbols:returntok
5590 static void ReturnStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5592 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
))));
5593 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))))
5595 Expression (stopset0
, stopset1
, stopset2
);
5601 Statement := [ AssignmentOrProcedureCall |
5602 IfStatement | CaseStatement |
5605 LoopStatement | ForStatement |
5606 WithStatement | AsmStatement |
5607 ExitStatement | ReturnStatement |
5610 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
5615 static void Statement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5617 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))))
5619 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5620 /* seen optional [ | ] expression */
5621 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5623 AssignmentOrProcedureCall (stopset0
, stopset1
, stopset2
);
5625 else if (mcLexBuf_currenttoken
== mcReserved_iftok
)
5627 /* avoid dangling else. */
5628 IfStatement (stopset0
, stopset1
, stopset2
);
5630 else if (mcLexBuf_currenttoken
== mcReserved_casetok
)
5632 /* avoid dangling else. */
5633 CaseStatement (stopset0
, stopset1
, stopset2
);
5635 else if (mcLexBuf_currenttoken
== mcReserved_whiletok
)
5637 /* avoid dangling else. */
5638 WhileStatement (stopset0
, stopset1
, stopset2
);
5640 else if (mcLexBuf_currenttoken
== mcReserved_repeattok
)
5642 /* avoid dangling else. */
5643 RepeatStatement (stopset0
, stopset1
, stopset2
);
5645 else if (mcLexBuf_currenttoken
== mcReserved_looptok
)
5647 /* avoid dangling else. */
5648 LoopStatement (stopset0
, stopset1
, stopset2
);
5650 else if (mcLexBuf_currenttoken
== mcReserved_fortok
)
5652 /* avoid dangling else. */
5653 ForStatement (stopset0
, stopset1
, stopset2
);
5655 else if (mcLexBuf_currenttoken
== mcReserved_withtok
)
5657 /* avoid dangling else. */
5658 WithStatement (stopset0
, stopset1
, stopset2
);
5660 else if (mcLexBuf_currenttoken
== mcReserved_asmtok
)
5662 /* avoid dangling else. */
5663 AsmStatement (stopset0
, stopset1
, stopset2
);
5665 else if (mcLexBuf_currenttoken
== mcReserved_exittok
)
5667 /* avoid dangling else. */
5668 ExitStatement (stopset0
, stopset1
, stopset2
);
5670 else if (mcLexBuf_currenttoken
== mcReserved_returntok
)
5672 /* avoid dangling else. */
5673 ReturnStatement (stopset0
, stopset1
, stopset2
);
5675 else if (mcLexBuf_currenttoken
== mcReserved_retrytok
)
5677 /* avoid dangling else. */
5678 RetryStatement (stopset0
, stopset1
, stopset2
);
5682 /* avoid dangling else. */
5683 ErrorArray ((const char *) "expecting one of: RETRY RETURN EXIT ASM WITH FOR LOOP REPEAT WHILE CASE IF identifier", 85);
5686 /* end of optional [ | ] expression */
5691 RetryStatement := 'RETRY'
5693 first symbols:retrytok
5698 static void RetryStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5700 Expect (mcReserved_retrytok
, stopset0
, stopset1
, stopset2
);
5705 AssignmentOrProcedureCall := Designator ( ':=' Expression |
5711 first symbols:identtok
5716 static void AssignmentOrProcedureCall (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5718 Designator (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5719 if (mcLexBuf_currenttoken
== mcReserved_becomestok
)
5721 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
))));
5722 Expression (stopset0
, stopset1
, stopset2
);
5724 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5726 /* avoid dangling else. */
5727 ActualParameters (stopset0
, stopset1
, stopset2
);
5734 StatementSequence := Statement { ';' Statement }
5736 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
5741 static void StatementSequence (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5743 Statement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5744 while (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
5746 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
))));
5747 Statement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5754 IfStatement := 'IF' Expression 'THEN' StatementSequence
5755 { 'ELSIF' Expression 'THEN' StatementSequence }
5756 [ 'ELSE' StatementSequence ] 'END'
5763 static void IfStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5765 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
))));
5766 Expression (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_thentok
-mcReserved_recordtok
))));
5767 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
))));
5768 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsiftok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5769 while (mcLexBuf_currenttoken
== mcReserved_elsiftok
)
5771 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
))));
5772 Expression (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_thentok
-mcReserved_recordtok
))));
5773 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
))));
5774 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsiftok
-mcReserved_arraytok
))), stopset2
);
5777 if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
5779 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
))));
5780 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5782 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5787 CaseStatement := 'CASE' Expression 'OF' Case { '|'
5791 first symbols:casetok
5796 static void CaseStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5798 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
))));
5799 Expression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
5800 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
))));
5801 Case (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5802 while (mcLexBuf_currenttoken
== mcReserved_bartok
)
5804 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
))));
5805 Case (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
))), stopset2
);
5808 CaseEndStatement (stopset0
, stopset1
, stopset2
);
5813 CaseEndStatement := 'END' | 'ELSE' StatementSequence
5816 first symbols:elsetok, endtok
5821 static void CaseEndStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5823 if (mcLexBuf_currenttoken
== mcReserved_endtok
)
5825 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5827 else if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
5829 /* avoid dangling else. */
5830 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
))));
5831 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5832 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5836 /* avoid dangling else. */
5837 ErrorArray ((const char *) "expecting one of: ELSE END", 26);
5843 Case := [ CaseLabelList ':' StatementSequence ]
5845 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5850 static void Case (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5852 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))))
5854 CaseLabelList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5855 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
))));
5856 StatementSequence (stopset0
, stopset1
, stopset2
);
5862 CaseLabelList := CaseLabels { ',' CaseLabels }
5864 first symbols:identtok, attributetok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
5869 static void CaseLabelList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5871 CaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5872 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5874 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
))));
5875 CaseLabels (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5882 CaseLabels := ConstExpression [ '..' ConstExpression ]
5884 first symbols:identtok, stringtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5889 static void CaseLabels (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5891 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5892 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
5894 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
))));
5895 ConstExpression (stopset0
, stopset1
, stopset2
);
5901 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
5904 first symbols:whiletok
5909 static void WhileStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5911 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
))));
5912 Expression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5913 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
))));
5914 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5915 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5920 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
5923 first symbols:repeattok
5928 static void RepeatStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5930 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
))));
5931 StatementSequence (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_untiltok
-mcReserved_recordtok
))));
5932 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
))));
5933 Expression (stopset0
, stopset1
, stopset2
);
5938 ForStatement := 'FOR' Ident ':=' Expression 'TO'
5939 Expression [ 'BY' ConstExpression ]
5940 'DO' StatementSequence 'END'
5942 first symbols:fortok
5947 static void ForStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5949 Expect (mcReserved_fortok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5950 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_becomestok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5951 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
))));
5952 Expression (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_totok
-mcReserved_recordtok
))));
5953 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
))));
5954 Expression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
)) | (1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5955 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
5957 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
))));
5958 ConstExpression (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5960 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
))));
5961 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5962 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5967 LoopStatement := 'LOOP' StatementSequence 'END'
5969 first symbols:looptok
5974 static void LoopStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5976 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
))));
5977 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5978 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5983 WithStatement := 'WITH' Designator 'DO' StatementSequence
5986 first symbols:withtok
5991 static void WithStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
5993 Expect (mcReserved_withtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5994 Designator (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
5995 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
))));
5996 StatementSequence (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5997 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6002 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
6007 first symbols:proceduretok
6012 static void ProcedureDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6014 ProcedureHeading (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6015 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
))));
6016 ProcedureBlock (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6017 Ident (stopset0
, stopset1
, stopset2
);
6023 ProcedureIdent := Ident
6024 % curproc := lookupSym (curident) %
6026 % enterScope (curproc) %
6029 first symbols:identtok
6034 static void ProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6036 Ident (stopset0
, stopset1
, stopset2
);
6037 curproc
= decl_lookupSym (curident
);
6038 decl_enterScope (curproc
);
6043 DefProcedureIdent := Ident
6044 % curproc := lookupSym (curident) %
6047 first symbols:identtok
6052 static void DefProcedureIdent (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6054 Ident (stopset0
, stopset1
, stopset2
);
6055 curproc
= decl_lookupSym (curident
);
6060 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
6061 '(' '(' Ident ')' ')' |
6064 first symbols:inlinetok, attributetok
6069 static void DefineBuiltinProcedure (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6071 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))))) != 0)))
6073 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6074 /* seen optional [ | ] expression */
6075 if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
6077 Expect (mcReserved_attributetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_builtintok
-mcReserved_recordtok
))));
6078 Expect (mcReserved_builtintok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6079 Expect (mcReserved_lparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6080 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6081 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6082 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6083 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
6085 else if (mcLexBuf_currenttoken
== mcReserved_inlinetok
)
6087 /* avoid dangling else. */
6088 Expect (mcReserved_inlinetok
, stopset0
, stopset1
, stopset2
);
6092 /* avoid dangling else. */
6093 ErrorArray ((const char *) "expecting one of: __INLINE__ __ATTRIBUTE__", 42);
6096 /* end of optional [ | ] expression */
6101 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
6102 ( ProcedureIdent [ FormalParameters ]
6105 first symbols:proceduretok
6110 static void ProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6112 Expect (mcReserved_proceduretok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6113 DefineBuiltinProcedure (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6114 ProcedureIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6115 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
6117 FormalParameters (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6119 AttributeNoReturn (stopset0
, stopset1
, stopset2
);
6124 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
6126 first symbols:inlinetok, builtintok
6131 static void Builtin (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6133 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_builtintok
-mcReserved_recordtok
))))) != 0)))
6135 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6136 /* seen optional [ | ] expression */
6137 if (mcLexBuf_currenttoken
== mcReserved_builtintok
)
6139 Expect (mcReserved_builtintok
, stopset0
, stopset1
, stopset2
);
6141 else if (mcLexBuf_currenttoken
== mcReserved_inlinetok
)
6143 /* avoid dangling else. */
6144 Expect (mcReserved_inlinetok
, stopset0
, stopset1
, stopset2
);
6148 /* avoid dangling else. */
6149 ErrorArray ((const char *) "expecting one of: __INLINE__ __BUILTIN__", 40);
6152 /* end of optional [ | ] expression */
6157 DefProcedureHeading := 'PROCEDURE' Builtin ( DefProcedureIdent
6158 [ DefFormalParameters ]
6161 first symbols:proceduretok
6166 static void DefProcedureHeading (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6168 Expect (mcReserved_proceduretok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_builtintok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6169 Builtin (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6170 DefProcedureIdent (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6171 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
6173 DefFormalParameters (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6175 AttributeNoReturn (stopset0
, stopset1
, stopset2
);
6180 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
6183 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
6188 static void ProcedureBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6190 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))))
6192 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
))));
6195 if (mcLexBuf_currenttoken
== mcReserved_begintok
)
6197 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
))));
6198 ProcedureBlockBody (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6200 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6205 Block := { Declaration } InitialBlock FinalBlock
6208 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
6213 static void Block (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6215 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))))
6217 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
))));
6220 InitialBlock (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_finallytok
-mcReserved_arraytok
))), stopset2
);
6221 FinalBlock (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6222 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6227 InitialBlock := [ 'BEGIN' InitialBlockBody ]
6229 first symbols:begintok
6234 static void InitialBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6236 if (mcLexBuf_currenttoken
== mcReserved_begintok
)
6238 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
))));
6239 InitialBlockBody (stopset0
, stopset1
, stopset2
);
6245 FinalBlock := [ 'FINALLY' FinalBlockBody ]
6247 first symbols:finallytok
6252 static void FinalBlock (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6254 if (mcLexBuf_currenttoken
== mcReserved_finallytok
)
6256 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
))));
6257 FinalBlockBody (stopset0
, stopset1
, stopset2
);
6263 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6265 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6270 static void InitialBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6272 NormalPart (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6273 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6275 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
))));
6276 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6282 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6284 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6289 static void FinalBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6291 NormalPart (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6292 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6294 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
))));
6295 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6301 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6303 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6308 static void ProcedureBlockBody (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6310 NormalPart (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6311 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6313 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
))));
6314 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6320 NormalPart := StatementSequence
6322 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6327 static void NormalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6329 StatementSequence (stopset0
, stopset1
, stopset2
);
6334 ExceptionalPart := StatementSequence
6336 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6341 static void ExceptionalPart (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6343 StatementSequence (stopset0
, stopset1
, stopset2
);
6348 Declaration := 'CONST' { ConstantDeclaration ';' } |
6349 'TYPE' { TypeDeclaration } |
6350 'VAR' { VariableDeclaration ';' } |
6351 ProcedureDeclaration ';' |
6352 ModuleDeclaration ';'
6354 first symbols:moduletok, proceduretok, vartok, typetok, consttok
6359 static void Declaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6361 if (mcLexBuf_currenttoken
== mcReserved_consttok
)
6363 Expect (mcReserved_consttok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6364 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6366 ConstantDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6367 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6371 else if (mcLexBuf_currenttoken
== mcReserved_typetok
)
6373 /* avoid dangling else. */
6374 Expect (mcReserved_typetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6375 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6377 TypeDeclaration (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6381 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
6383 /* avoid dangling else. */
6384 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6385 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6387 VariableDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6388 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6392 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
6394 /* avoid dangling else. */
6395 ProcedureDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6396 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6398 else if (mcLexBuf_currenttoken
== mcReserved_moduletok
)
6400 /* avoid dangling else. */
6401 ModuleDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6402 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6406 /* avoid dangling else. */
6407 ErrorArray ((const char *) "expecting one of: MODULE PROCEDURE VAR TYPE CONST", 49);
6413 DefFormalParameters := '('
6414 % paramEnter (curproc) %
6415 [ DefMultiFPSection ] ')'
6417 % paramLeave (curproc) %
6420 first symbols:lparatok
6425 static void DefFormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6427 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
))));
6428 decl_paramEnter (curproc
);
6429 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))))
6431 DefMultiFPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6433 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6434 decl_paramLeave (curproc
);
6435 FormalReturn (stopset0
, stopset1
, stopset2
);
6440 DefMultiFPSection := DefExtendedFP |
6441 FPSection [ ';' DefMultiFPSection ]
6443 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6448 static void DefMultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6450 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
))
6452 DefExtendedFP (stopset0
, stopset1
, stopset2
);
6454 else if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0)))
6456 /* avoid dangling else. */
6457 FPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6458 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
6460 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
))));
6461 DefMultiFPSection (stopset0
, stopset1
, stopset2
);
6466 /* avoid dangling else. */
6467 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6473 FormalParameters := '('
6474 % paramEnter (curproc) %
6475 [ MultiFPSection ] ')'
6476 % paramLeave (curproc) %
6479 first symbols:lparatok
6484 static void FormalParameters (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6486 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
))));
6487 decl_paramEnter (curproc
);
6488 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))))
6490 MultiFPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6492 Expect (mcReserved_rparatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6493 decl_paramLeave (curproc
);
6494 FormalReturn (stopset0
, stopset1
, stopset2
);
6499 AttributeNoReturn := [ '' ]
6501 first symbols:ldirectivetok
6506 static void AttributeNoReturn (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6508 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6510 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6511 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6512 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
6518 AttributeUnused := [ '' ]
6520 first symbols:ldirectivetok
6525 static void AttributeUnused (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6527 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6529 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6530 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6531 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
6537 MultiFPSection := ExtendedFP | FPSection [ ';'
6540 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6545 static void MultiFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6547 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
))
6549 ExtendedFP (stopset0
, stopset1
, stopset2
);
6551 else if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0)))
6553 /* avoid dangling else. */
6554 FPSection (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6555 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
6557 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
))));
6558 MultiFPSection (stopset0
, stopset1
, stopset2
);
6563 /* avoid dangling else. */
6564 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6570 FPSection := NonVarFPSection |
6573 first symbols:vartok, identtok
6578 static void FPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6580 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
6582 NonVarFPSection (stopset0
, stopset1
, stopset2
);
6584 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
6586 /* avoid dangling else. */
6587 VarFPSection (stopset0
, stopset1
, stopset2
);
6591 /* avoid dangling else. */
6592 ErrorArray ((const char *) "expecting one of: VAR identifier", 32);
6598 DefExtendedFP := DefOptArg | '...'
6600 first symbols:lsbratok, periodperiodperiodtok
6605 static void DefExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6607 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6609 DefOptArg (stopset0
, stopset1
, stopset2
);
6611 else if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
6613 /* avoid dangling else. */
6614 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
6618 /* avoid dangling else. */
6619 ErrorArray ((const char *) "expecting one of: ... [", 23);
6625 ExtendedFP := OptArg | '...'
6627 first symbols:lsbratok, periodperiodperiodtok
6632 static void ExtendedFP (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6634 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6636 OptArg (stopset0
, stopset1
, stopset2
);
6638 else if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
6640 /* avoid dangling else. */
6641 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
6645 /* avoid dangling else. */
6646 ErrorArray ((const char *) "expecting one of: ... [", 23);
6652 VarFPSection := 'VAR' PushIdentList ':' FormalType
6655 first symbols:vartok
6660 static void VarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6662 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6663 PushIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6664 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6665 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6666 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6668 AttributeUnused (stopset0
, stopset1
, stopset2
);
6674 NonVarFPSection := PushIdentList ':' FormalType
6677 first symbols:identtok
6682 static void NonVarFPSection (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6684 PushIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6685 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6686 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6687 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6689 AttributeUnused (stopset0
, stopset1
, stopset2
);
6695 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
6698 first symbols:lsbratok
6703 static void OptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6705 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6706 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6707 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6708 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
)) | (1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6709 if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
6711 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
))));
6712 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6714 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6719 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
6722 first symbols:lsbratok
6727 static void DefOptArg (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6729 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6730 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6731 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6732 FormalType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6733 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
))));
6734 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6735 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6740 FormalType := { 'ARRAY' 'OF' } PushQualident
6742 first symbols:identtok, arraytok
6747 static void FormalType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6749 while (mcLexBuf_currenttoken
== mcReserved_arraytok
)
6751 Expect (mcReserved_arraytok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
6752 Expect (mcReserved_oftok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6755 PushQualident (stopset0
, stopset1
, stopset2
);
6760 ModuleDeclaration := 'MODULE' Ident [ Priority ]
6761 ';' { Import } [ Export ]
6764 first symbols:moduletok
6769 static void ModuleDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6771 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6772 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6773 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6775 Priority (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6777 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
))));
6778 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)))
6780 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
))));
6783 if (mcLexBuf_currenttoken
== mcReserved_exporttok
)
6785 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
))));
6787 Block (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6788 Ident (stopset0
, stopset1
, stopset2
);
6793 Priority := '[' ConstExpression ']'
6795 first symbols:lsbratok
6800 static void Priority (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6802 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
))));
6803 ConstExpression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6804 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6809 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
6810 'UNQUALIFIED' IdentList |
6813 first symbols:exporttok
6818 static void Export (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6820 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
))));
6821 if (mcLexBuf_currenttoken
== mcReserved_qualifiedtok
)
6823 Expect (mcReserved_qualifiedtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6824 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6826 else if (mcLexBuf_currenttoken
== mcReserved_unqualifiedtok
)
6828 /* avoid dangling else. */
6829 Expect (mcReserved_unqualifiedtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6830 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6832 else if (mcLexBuf_currenttoken
== mcReserved_identtok
)
6834 /* avoid dangling else. */
6835 IdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6839 /* avoid dangling else. */
6840 ErrorArray ((const char *) "expecting one of: identifier UNQUALIFIED QUALIFIED", 50);
6842 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6847 FromIdentList := Ident { ',' Ident }
6849 first symbols:identtok
6854 static void FromIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6856 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6857 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
6859 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6860 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6867 FromImport := 'FROM' Ident 'IMPORT' FromIdentList
6870 first symbols:fromtok
6875 static void FromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6877 Expect (mcReserved_fromtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6878 Ident (stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_importtok
-mcReserved_arraytok
))), stopset2
);
6879 Expect (mcReserved_importtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6880 FromIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6881 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6886 ImportModuleList := Ident { ',' Ident }
6888 first symbols:identtok
6893 static void ImportModuleList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6895 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6896 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
6898 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6899 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6906 WithoutFromImport := 'IMPORT' ImportModuleList ';'
6908 first symbols:importtok
6913 static void WithoutFromImport (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6915 Expect (mcReserved_importtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6916 ImportModuleList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6917 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6922 Import := FromImport | WithoutFromImport
6924 first symbols:importtok, fromtok
6929 static void Import (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6931 if (mcLexBuf_currenttoken
== mcReserved_fromtok
)
6933 FromImport (stopset0
, stopset1
, stopset2
);
6935 else if (mcLexBuf_currenttoken
== mcReserved_importtok
)
6937 /* avoid dangling else. */
6938 WithoutFromImport (stopset0
, stopset1
, stopset2
);
6942 /* avoid dangling else. */
6943 ErrorArray ((const char *) "expecting one of: IMPORT FROM", 29);
6949 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
6952 % curmodule := lookupDef (curident) %
6954 % addCommentBody (curmodule) %
6956 % enterScope (curmodule) %
6958 % resetConstExpPos (curmodule) %
6959 { Import } [ Export ] { Definition }
6961 % checkEndName (curmodule, curident, 'definition module') %
6966 first symbols:definitiontok
6971 static void DefinitionModule (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
6973 Expect (mcReserved_definitiontok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_moduletok
-mcReserved_arraytok
))), stopset2
);
6974 Expect (mcReserved_moduletok
, stopset0
, stopset1
|(mcp4_SetOfStop1
) ((1 << (mcReserved_fortok
-mcReserved_arraytok
))), stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6975 if (mcLexBuf_currenttoken
== mcReserved_fortok
)
6977 Expect (mcReserved_fortok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
6978 string (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6980 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6981 curmodule
= decl_lookupDef (curident
);
6982 decl_addCommentBody (curmodule
);
6983 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
))));
6984 decl_enterScope (curmodule
);
6985 decl_resetConstExpPos (curmodule
);
6986 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)))
6988 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
))));
6991 if (mcLexBuf_currenttoken
== mcReserved_exporttok
)
6993 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
))));
6995 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))))
6997 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
))));
7000 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7001 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7002 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
7003 checkEndName (curmodule
, curident
, (const char *) "definition module", 17);
7009 PushQualident := Ident
7010 % typeExp := push (lookupSym (curident)) %
7014 metaError1 ('the symbol {%1k} is not visible in this scope (or any other nested scope)', curident)
7017 % IF NOT isDef (typeExp)
7019 ErrorArray ('the first component of this qualident must be a definition module')
7022 % typeExp := replace (lookupInScope (typeExp, curident)) ;
7025 ErrorArray ('identifier not found in definition module')
7029 first symbols:identtok
7034 static void PushQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7036 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7037 typeExp
= push (decl_lookupSym (curident
));
7038 if (typeExp
== NULL
)
7040 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));
7042 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
7044 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7045 if (! (decl_isDef (typeExp
)))
7047 ErrorArray ((const char *) "the first component of this qualident must be a definition module", 65);
7049 Ident (stopset0
, stopset1
, stopset2
);
7050 typeExp
= replace (decl_lookupInScope (typeExp
, curident
));
7051 if (typeExp
== NULL
)
7053 ErrorArray ((const char *) "identifier not found in definition module", 41);
7060 OptSubrange := [ SubrangeType ]
7062 first symbols:lsbratok
7067 static void OptSubrange (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7069 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7071 SubrangeType (stopset0
, stopset1
, stopset2
);
7077 TypeEquiv := PushQualident OptSubrange
7079 first symbols:identtok
7084 static void TypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7086 PushQualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7087 OptSubrange (stopset0
, stopset1
, stopset2
);
7092 EnumIdentList := Ident { ',' Ident }
7094 first symbols:identtok
7099 static void EnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7101 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7102 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7104 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7105 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7112 Enumeration := '(' EnumIdentList ')'
7114 first symbols:lparatok
7119 static void Enumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7121 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7122 EnumIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7123 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7128 SimpleType := TypeEquiv | Enumeration |
7131 first symbols:lsbratok, lparatok, identtok
7136 static void SimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7138 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
7140 TypeEquiv (stopset0
, stopset1
, stopset2
);
7142 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
7144 /* avoid dangling else. */
7145 Enumeration (stopset0
, stopset1
, stopset2
);
7147 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7149 /* avoid dangling else. */
7150 SubrangeType (stopset0
, stopset1
, stopset2
);
7154 /* avoid dangling else. */
7155 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
7161 Type := SimpleType | ArrayType | RecordType |
7162 SetType | PointerType | ProcedureType
7164 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
7169 static void Type (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7171 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
))
7173 SimpleType (stopset0
, stopset1
, stopset2
);
7175 else if (mcLexBuf_currenttoken
== mcReserved_arraytok
)
7177 /* avoid dangling else. */
7178 ArrayType (stopset0
, stopset1
, stopset2
);
7180 else if (mcLexBuf_currenttoken
== mcReserved_recordtok
)
7182 /* avoid dangling else. */
7183 RecordType (stopset0
, stopset1
, stopset2
);
7185 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
))
7187 /* avoid dangling else. */
7188 SetType (stopset0
, stopset1
, stopset2
);
7190 else if (mcLexBuf_currenttoken
== mcReserved_pointertok
)
7192 /* avoid dangling else. */
7193 PointerType (stopset0
, stopset1
, stopset2
);
7195 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7197 /* avoid dangling else. */
7198 ProcedureType (stopset0
, stopset1
, stopset2
);
7202 /* avoid dangling else. */
7203 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
7209 TypeDeclaration := { Ident ( ';' | '=' Type Alignment
7212 first symbols:identtok
7217 static void TypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7219 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7221 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7222 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
7224 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7226 else if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
7228 /* avoid dangling else. */
7229 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
))));
7230 Type (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7231 Alignment (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7232 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7236 /* avoid dangling else. */
7237 ErrorArray ((const char *) "expecting one of: = ;", 21);
7245 DefQualident := Ident
7246 % typeExp := lookupSym (curident) %
7248 % IF NOT isDef (typeExp)
7250 ErrorArray ('the first component of this qualident must be a definition module')
7253 % typeExp := lookupInScope (typeExp, curident) ;
7256 ErrorArray ('identifier not found in definition module')
7260 first symbols:identtok
7265 static void DefQualident (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7267 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7268 typeExp
= decl_lookupSym (curident
);
7269 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
7271 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7272 if (! (decl_isDef (typeExp
)))
7274 ErrorArray ((const char *) "the first component of this qualident must be a definition module", 65);
7276 Ident (stopset0
, stopset1
, stopset2
);
7277 typeExp
= decl_lookupInScope (typeExp
, curident
);
7278 if (typeExp
== NULL
)
7280 ErrorArray ((const char *) "identifier not found in definition module", 41);
7287 DefTypeEquiv := DefQualident OptSubrange
7289 first symbols:identtok
7294 static void DefTypeEquiv (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7296 DefQualident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7297 OptSubrange (stopset0
, stopset1
, stopset2
);
7302 DefEnumIdentList := Ident { ',' Ident }
7304 first symbols:identtok
7309 static void DefEnumIdentList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7311 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7312 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7314 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7315 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7322 DefEnumeration := '(' DefEnumIdentList ')'
7324 first symbols:lparatok
7329 static void DefEnumeration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7331 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7332 DefEnumIdentList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7333 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7338 DefSimpleType := DefTypeEquiv | DefEnumeration |
7341 first symbols:lsbratok, lparatok, identtok
7346 static void DefSimpleType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7348 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
7350 DefTypeEquiv (stopset0
, stopset1
, stopset2
);
7352 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
7354 /* avoid dangling else. */
7355 DefEnumeration (stopset0
, stopset1
, stopset2
);
7357 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7359 /* avoid dangling else. */
7360 SubrangeType (stopset0
, stopset1
, stopset2
);
7364 /* avoid dangling else. */
7365 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
7371 DefType := DefSimpleType | ArrayType |
7372 RecordType | SetType | PointerType |
7375 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
7380 static void DefType (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7382 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
))
7384 DefSimpleType (stopset0
, stopset1
, stopset2
);
7386 else if (mcLexBuf_currenttoken
== mcReserved_arraytok
)
7388 /* avoid dangling else. */
7389 ArrayType (stopset0
, stopset1
, stopset2
);
7391 else if (mcLexBuf_currenttoken
== mcReserved_recordtok
)
7393 /* avoid dangling else. */
7394 RecordType (stopset0
, stopset1
, stopset2
);
7396 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
))
7398 /* avoid dangling else. */
7399 SetType (stopset0
, stopset1
, stopset2
);
7401 else if (mcLexBuf_currenttoken
== mcReserved_pointertok
)
7403 /* avoid dangling else. */
7404 PointerType (stopset0
, stopset1
, stopset2
);
7406 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7408 /* avoid dangling else. */
7409 ProcedureType (stopset0
, stopset1
, stopset2
);
7413 /* avoid dangling else. */
7414 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
7420 DefTypeDeclaration := { Ident ( ';' | '=' DefType
7423 first symbols:identtok
7428 static void DefTypeDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7430 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7432 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7433 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
7435 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7437 else if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
7439 /* avoid dangling else. */
7440 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
))));
7441 DefType (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7442 Alignment (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7443 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7447 /* avoid dangling else. */
7448 ErrorArray ((const char *) "expecting one of: = ;", 21);
7456 DefConstantDeclaration := Ident '=' ConstExpression
7458 first symbols:identtok
7463 static void DefConstantDeclaration (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7465 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7466 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
))));
7467 ConstExpression (stopset0
, stopset1
, stopset2
);
7472 Definition := 'CONST' { DefConstantDeclaration ';' } |
7473 'TYPE' { DefTypeDeclaration } |
7474 'VAR' { VariableDeclaration ';' } |
7475 DefProcedureHeading ';'
7477 first symbols:proceduretok, vartok, typetok, consttok
7482 static void Definition (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7484 if (mcLexBuf_currenttoken
== mcReserved_consttok
)
7486 Expect (mcReserved_consttok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7487 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7489 DefConstantDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7490 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7494 else if (mcLexBuf_currenttoken
== mcReserved_typetok
)
7496 /* avoid dangling else. */
7497 Expect (mcReserved_typetok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7498 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7500 DefTypeDeclaration (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7504 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
7506 /* avoid dangling else. */
7507 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7508 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7510 VariableDeclaration (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7511 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7515 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7517 /* avoid dangling else. */
7518 DefProcedureHeading (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7519 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
7523 /* avoid dangling else. */
7524 ErrorArray ((const char *) "expecting one of: PROCEDURE VAR TYPE CONST", 42);
7530 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
7533 first symbols:asmtok
7538 static void AsmStatement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7540 Expect (mcReserved_asmtok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_volatiletok
-mcReserved_recordtok
))));
7541 if (mcLexBuf_currenttoken
== mcReserved_volatiletok
)
7543 Expect (mcReserved_volatiletok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7545 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7546 AsmOperands (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7547 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7552 AsmOperands := string [ AsmOperandSpec ]
7554 first symbols:stringtok
7559 static void AsmOperands (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7561 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7562 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7564 AsmOperandSpec (stopset0
, stopset1
, stopset2
);
7570 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
7573 first symbols:colontok
7578 static void AsmOperandSpec (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7580 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7582 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
))));
7583 AsmList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7584 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7586 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
))));
7587 AsmList (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7588 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7590 Expect (mcReserved_colontok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7591 TrashList (stopset0
, stopset1
, stopset2
);
7599 AsmList := [ AsmElement ] { ',' AsmElement }
7601 first symbols:lsbratok, stringtok, commatok
7606 static void AsmList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7608 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_stringtok
))
7610 AsmElement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7612 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7614 Expect (mcReserved_commatok
, stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7615 AsmElement (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7622 NamedOperand := '[' Ident ']'
7624 first symbols:lsbratok
7629 static void NamedOperand (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7631 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7632 Ident (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7633 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
7638 AsmOperandName := [ NamedOperand ]
7640 first symbols:lsbratok
7645 static void AsmOperandName (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7647 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7649 NamedOperand (stopset0
, stopset1
, stopset2
);
7655 AsmElement := AsmOperandName string '(' Expression
7658 first symbols:stringtok, lsbratok
7663 static void AsmElement (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7665 AsmOperandName (stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7666 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7667 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
))));
7668 Expression (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7669 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7674 TrashList := [ string ] { ',' string }
7676 first symbols:commatok, stringtok
7681 static void TrashList (mcp4_SetOfStop0 stopset0
, mcp4_SetOfStop1 stopset1
, mcp4_SetOfStop2 stopset2
)
7683 if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
7685 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7687 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7689 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp4_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7690 string (stopset0
|(mcp4_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7697 CompilationUnit - returns TRUE if the input was correct enough to parse
7701 extern "C" bool mcp4_CompilationUnit (void)
7703 stk
= mcStack_init ();
7705 FileUnit ((mcp4_SetOfStop0
) ((1 << (mcReserved_eoftok
-mcReserved_eoftok
))), (mcp4_SetOfStop1
) 0, (mcp4_SetOfStop2
) 0);
7706 mcStack_kill (&stk
);
7708 /* static analysis guarentees a RETURN statement will be used before here. */
7709 __builtin_unreachable ();
7712 extern "C" void _M2_mcp4_init (__attribute__((unused
)) int argc
, __attribute__((unused
)) char *argv
[], __attribute__((unused
)) char *envp
[])
7716 extern "C" void _M2_mcp4_fini (__attribute__((unused
)) int argc
, __attribute__((unused
)) char *argv
[], __attribute__((unused
)) char *envp
[])