1 /* do not edit automatically generated by mc from mcp2. */
2 /* output from mc-2.bnf, automatically generated do not edit.
4 Copyright (C) 2015-2024 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 "GmcLexBuf.h"
57 # define Debugging false
58 typedef unsigned int mcp2_stop0
;
60 typedef unsigned int mcp2_SetOfStop0
;
62 typedef unsigned int mcp2_stop1
;
64 typedef unsigned int mcp2_SetOfStop1
;
66 typedef unsigned int mcp2_stop2
;
68 typedef unsigned int mcp2_SetOfStop2
;
70 static bool WasNoError
;
71 static nameKey_Name curident
;
72 static decl_node typeDes
;
73 static decl_node typeExp
;
74 static decl_node curproc
;
75 static decl_node curmodule
;
78 CompilationUnit - returns TRUE if the input was correct enough to parse
82 extern "C" bool mcp2_CompilationUnit (void);
83 static void ErrorString (DynamicStrings_String s
);
84 static void ErrorArray (const char *a_
, unsigned int _a_high
);
87 checkEndName - if module does not have, name, then issue an error containing, desc.
90 static void checkEndName (decl_node module
, nameKey_Name name
, const char *desc_
, unsigned int _desc_high
);
93 DescribeStop - issues a message explaining what tokens were expected
96 static DynamicStrings_String
DescribeStop (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
99 DescribeError - issues a message explaining what tokens were expected
102 static void DescribeError (void);
105 SyntaxError - after a syntax error we skip all tokens up until we reach
109 static void SyntaxError (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
115 static void SyntaxCheck (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
118 WarnMissingToken - generates a warning message about a missing token, t.
121 static void WarnMissingToken (mcReserved_toktype t
);
124 MissingToken - generates a warning message about a missing token, t.
127 static void MissingToken (mcReserved_toktype t
);
133 static bool CheckAndInsert (mcReserved_toktype t
, mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
139 static bool InStopSet (mcReserved_toktype t
, mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
142 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
143 If it is not then it will insert a token providing the token
144 is one of ; ] ) } . OF END ,
146 if the stopset contains <identtok> then we do not insert a token
149 static void PeepToken (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
155 static void Expect (mcReserved_toktype t
, mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
158 Ident - error checking varient of Ident
161 static void Ident (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
167 static void string (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
173 static void Integer (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
179 static void Real (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
182 registerImport - looks up module, ident, and adds it to the
183 current module import list.
186 static void registerImport (nameKey_Name ident
, bool scoped
);
189 FileUnit := DefinitionModule |
190 ImplementationOrProgramModule
192 first symbols:implementationtok, moduletok, definitiontok
197 static void FileUnit (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
200 ProgramModule := 'MODULE' Ident
201 % curmodule := lookupModule (curident) %
203 % enterScope (curmodule) %
204 [ Priority ] ';' { Import } Block
206 % checkEndName (curmodule, curident, 'program module') %
210 % setEnumsComplete (curmodule) %
213 first symbols:moduletok
218 static void ProgramModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
221 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
223 % curmodule := lookupImp (curident) %
225 % enterScope (lookupDef (curident)) %
227 % enterScope (curmodule) %
228 [ Priority ] ';' { Import }
230 % checkEndName (curmodule, curident, 'implementation module') %
232 % leaveScope ; leaveScope %
234 % setEnumsComplete (curmodule) %
237 first symbols:implementationtok
242 static void ImplementationModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
245 ImplementationOrProgramModule := ImplementationModule |
248 first symbols:moduletok, implementationtok
253 static void ImplementationOrProgramModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
256 Number := Integer | Real
258 first symbols:realtok, integertok
263 static void Number (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
266 Qualident := Ident { '.' Ident }
268 first symbols:identtok
273 static void Qualident (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
276 ConstantDeclaration := Ident '=' ConstExpression
278 first symbols:identtok
283 static void ConstantDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
286 ConstExpression := SimpleConstExpr [ Relation SimpleConstExpr ]
288 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
293 static void ConstExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
296 Relation := '=' | '#' | '<>' | '<' | '<=' |
299 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
304 static void Relation (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
307 SimpleConstExpr := UnaryOrConstTerm { AddOperator
310 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
315 static void SimpleConstExpr (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
318 UnaryOrConstTerm := '+' ConstTerm |
322 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
327 static void UnaryOrConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
330 AddOperator := '+' | '-' | 'OR'
332 first symbols:ortok, minustok, plustok
337 static void AddOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
340 ConstTerm := ConstFactor { MulOperator ConstFactor }
342 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
347 static void ConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
350 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
353 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
358 static void MulOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
361 ConstFactor := Number | ConstString |
362 ConstSetOrQualidentOrFunction |
363 '(' ConstExpression ')' |
367 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
372 static void ConstFactor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
375 ConstString := string
377 first symbols:stringtok
382 static void ConstString (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
385 ComponentElement := ConstExpression [ '..' ConstExpression ]
387 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
392 static void ComponentElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
395 ComponentValue := ComponentElement [ 'BY' ConstExpression ]
397 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
402 static void ComponentValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
405 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
407 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
412 static void ArraySetRecordValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
415 Constructor := '{' [ ArraySetRecordValue ] '}'
417 first symbols:lcbratok
422 static void Constructor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
425 ConstSetOrQualidentOrFunction := Qualident [ Constructor |
426 ConstActualParameters ] |
429 first symbols:lcbratok, identtok
434 static void ConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
437 ConstActualParameters := ActualParameters
439 first symbols:lparatok
444 static void ConstActualParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
447 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
448 '(' '(' ConstAttributeExpression
451 first symbols:attributetok
456 static void ConstAttribute (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
459 ConstAttributeExpression := Ident | '<' Qualident
462 first symbols:lesstok, identtok
467 static void ConstAttributeExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
472 first symbols:ldirectivetok
477 static void ByteAlignment (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
480 OptAlignmentExpression := [ AlignmentExpression ]
482 first symbols:lparatok
487 static void OptAlignmentExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
490 AlignmentExpression := '(' ConstExpression ')'
492 first symbols:lparatok
497 static void AlignmentExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
500 Alignment := [ ByteAlignment ]
502 first symbols:ldirectivetok
507 static void Alignment (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
510 TypeDeclaration := Ident
511 % typeDes := lookupSym (curident) %
514 first symbols:identtok
519 static void TypeDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
522 Type := ( DefSimpleType | ArrayType |
523 RecordType | SetType | PointerType |
526 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
531 static void Type (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
534 SimpleType := Qualident [ SubrangeType ] |
535 Enumeration | SubrangeType
537 first symbols:lsbratok, lparatok, identtok
542 static void SimpleType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
550 % f := makeEnumField (n, curident) %
552 % f := makeEnumField (n, curident) %
555 first symbols:identtok
560 static void EnumIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
563 Enumeration := '(' ( EnumIdentList ) ')'
565 first symbols:lparatok
570 static void Enumeration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
573 IdentList := Ident { ',' Ident }
575 first symbols:identtok
580 static void IdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
583 SubrangeType := '[' ConstExpression '..' ConstExpression
586 first symbols:lsbratok
591 static void SubrangeType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
594 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
597 first symbols:arraytok
602 static void ArrayType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
605 RecordType := 'RECORD' [ DefaultRecordAttributes ]
606 FieldListSequence 'END'
608 first symbols:recordtok
613 static void RecordType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
616 DefaultRecordAttributes := ''
618 first symbols:ldirectivetok
623 static void DefaultRecordAttributes (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
626 RecordFieldPragma := [ '' ]
628 first symbols:ldirectivetok
633 static void RecordFieldPragma (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
636 FieldPragmaExpression := Ident PragmaConstExpression
638 first symbols:identtok
643 static void FieldPragmaExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
646 PragmaConstExpression := [ '(' ConstExpression ')' ]
648 first symbols:lparatok
653 static void PragmaConstExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
656 AttributeExpression := Ident '(' ConstExpression
659 first symbols:identtok
664 static void AttributeExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
667 FieldListSequence := FieldListStatement { ';' FieldListStatement }
669 first symbols:casetok, identtok, semicolontok
674 static void FieldListSequence (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
677 FieldListStatement := [ FieldList ]
679 first symbols:identtok, casetok
684 static void FieldListStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
687 FieldList := IdentList ':' Type RecordFieldPragma |
688 'CASE' CaseTag 'OF' Varient { '|' Varient }
689 [ 'ELSE' FieldListSequence ] 'END'
691 first symbols:casetok, identtok
696 static void FieldList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
699 TagIdent := [ Ident ]
701 first symbols:identtok
706 static void TagIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
709 CaseTag := TagIdent [ ':' Qualident ]
711 first symbols:colontok, identtok
716 static void CaseTag (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
719 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
721 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
726 static void Varient (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
729 VarientCaseLabelList := VarientCaseLabels { ','
732 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
737 static void VarientCaseLabelList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
740 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
742 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
747 static void VarientCaseLabels (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
750 SilentConstExpression := SilentSimpleConstExpr [
751 SilentRelation SilentSimpleConstExpr ]
753 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
758 static void SilentConstExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
761 SilentRelation := '=' | '#' | '<>' | '<' |
762 '<=' | '>' | '>=' | 'IN'
764 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
769 static void SilentRelation (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
772 SilentSimpleConstExpr := SilentUnaryOrConstTerm
773 { SilentAddOperator SilentConstTerm }
775 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
780 static void SilentSimpleConstExpr (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
783 SilentUnaryOrConstTerm := '+' SilentConstTerm |
784 '-' SilentConstTerm |
787 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
792 static void SilentUnaryOrConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
795 SilentAddOperator := '+' | '-' | 'OR'
797 first symbols:ortok, minustok, plustok
802 static void SilentAddOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
805 SilentConstTerm := SilentConstFactor { SilentMulOperator
808 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
813 static void SilentConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
816 SilentMulOperator := '*' | '/' | 'DIV' |
817 'MOD' | 'REM' | 'AND' |
820 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
825 static void SilentMulOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
828 SilentConstFactor := Number | SilentConstString |
829 SilentConstSetOrQualidentOrFunction |
830 '(' SilentConstExpression ')' |
831 'NOT' SilentConstFactor |
834 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok
839 static void SilentConstFactor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
842 SilentConstString := string
844 first symbols:stringtok
849 static void SilentConstString (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
852 SilentConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
853 '(' '(' SilentConstAttributeExpression
856 first symbols:attributetok
861 static void SilentConstAttribute (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
864 SilentConstAttributeExpression := Ident |
869 first symbols:lesstok, identtok
874 static void SilentConstAttributeExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
877 SilentComponentElement := SilentConstExpression
878 [ '..' SilentConstExpression ]
880 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
885 static void SilentComponentElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
888 SilentComponentValue := SilentComponentElement [
889 'BY' SilentConstExpression ]
891 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
896 static void SilentComponentValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
899 SilentArraySetRecordValue := SilentComponentValue
900 { ',' SilentComponentValue }
902 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
907 static void SilentArraySetRecordValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
910 SilentConstructor := '{' [ SilentArraySetRecordValue ]
913 first symbols:lcbratok
918 static void SilentConstructor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
921 SilentConstSetOrQualidentOrFunction := SilentConstructor |
923 [ SilentConstructor |
924 SilentActualParameters ]
926 first symbols:identtok, lcbratok
931 static void SilentConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
934 SilentElement := SilentConstExpression [ '..' SilentConstExpression ]
936 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
941 static void SilentElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
944 SilentActualParameters := '(' [ SilentExpList ]
947 first symbols:lparatok
952 static void SilentActualParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
955 SilentExpList := SilentConstExpression { ',' SilentConstExpression }
957 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
962 static void SilentExpList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
965 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
967 first symbols:oftok, packedsettok, settok
972 static void SetType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
975 PointerType := 'POINTER' 'TO' Type
977 first symbols:pointertok
982 static void PointerType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
985 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
987 first symbols:proceduretok
992 static void ProcedureType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
995 FormalTypeList := '(' ( ')' FormalReturn |
996 ProcedureParameters ')'
999 first symbols:lparatok
1004 static void FormalTypeList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1007 FormalReturn := [ ':' OptReturnType ]
1009 first symbols:colontok
1014 static void FormalReturn (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1017 OptReturnType := '[' Qualident ']' |
1020 first symbols:identtok, lsbratok
1025 static void OptReturnType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1028 ProcedureParameters := ProcedureParameter { ','
1029 ProcedureParameter }
1031 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
1036 static void ProcedureParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1039 ProcedureParameter := '...' | 'VAR' FormalType |
1042 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
1047 static void ProcedureParameter (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1050 VarIdent := Ident [ '[' ConstExpression ']' ]
1052 first symbols:identtok
1057 static void VarIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1060 VarIdentList := VarIdent { ',' VarIdent }
1062 first symbols:identtok
1067 static void VarIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1070 VariableDeclaration := VarIdentList ':' Type Alignment
1072 first symbols:identtok
1077 static void VariableDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1080 DefVarIdent := Ident [ '[' ConstExpression ']' ]
1082 first symbols:identtok
1087 static void DefVarIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1090 DefVarIdentList := DefVarIdent { ',' DefVarIdent }
1092 first symbols:identtok
1097 static void DefVarIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1100 DefVariableDeclaration :=
1102 DefVarIdentList ':' Type
1105 first symbols:identtok
1110 static void DefVariableDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1113 Designator := Qualident { SubDesignator }
1115 first symbols:identtok
1120 static void Designator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1123 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
1126 first symbols:uparrowtok, lsbratok, periodtok
1131 static void SubDesignator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1134 ArrayExpList := Expression { ',' Expression }
1136 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1141 static void ArrayExpList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1144 ExpList := Expression { ',' Expression }
1146 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1151 static void ExpList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1154 Expression := SimpleExpression [ Relation SimpleExpression ]
1156 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1161 static void Expression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1164 SimpleExpression := UnaryOrTerm { AddOperator Term }
1166 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
1171 static void SimpleExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1174 UnaryOrTerm := '+' Term | '-' Term |
1177 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
1182 static void UnaryOrTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1185 Term := Factor { MulOperator Factor }
1187 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
1192 static void Term (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1195 Factor := Number | string | SetOrDesignatorOrFunction |
1196 '(' Expression ')' |
1197 'NOT' ( Factor | ConstAttribute )
1199 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
1204 static void Factor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1207 SetOrDesignatorOrFunction := Qualident [ Constructor |
1209 [ ActualParameters ] ] |
1212 first symbols:lcbratok, identtok
1217 static void SetOrDesignatorOrFunction (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1220 SimpleDes := { SubDesignator }
1222 first symbols:periodtok, lsbratok, uparrowtok
1227 static void SimpleDes (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1230 ActualParameters := '(' [ ExpList ] ')'
1232 first symbols:lparatok
1237 static void ActualParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1240 ExitStatement := 'EXIT'
1242 first symbols:exittok
1247 static void ExitStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1250 ReturnStatement := 'RETURN' [ Expression ]
1252 first symbols:returntok
1257 static void ReturnStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1260 Statement := [ AssignmentOrProcedureCall |
1261 IfStatement | CaseStatement |
1264 LoopStatement | ForStatement |
1265 WithStatement | AsmStatement |
1266 ExitStatement | ReturnStatement |
1269 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
1274 static void Statement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1277 RetryStatement := 'RETRY'
1279 first symbols:retrytok
1284 static void RetryStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1287 AssignmentOrProcedureCall := Designator ( ':=' Expression |
1293 first symbols:identtok
1298 static void AssignmentOrProcedureCall (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1301 StatementSequence := Statement { ';' Statement }
1303 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
1308 static void StatementSequence (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1311 IfStatement := 'IF' Expression 'THEN' StatementSequence
1312 { 'ELSIF' Expression 'THEN' StatementSequence }
1313 [ 'ELSE' StatementSequence ] 'END'
1320 static void IfStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1323 CaseStatement := 'CASE' Expression 'OF' Case { '|'
1327 first symbols:casetok
1332 static void CaseStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1335 CaseEndStatement := 'END' | 'ELSE' StatementSequence
1338 first symbols:elsetok, endtok
1343 static void CaseEndStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1346 Case := [ CaseLabelList ':' StatementSequence ]
1348 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1353 static void Case (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1356 CaseLabelList := CaseLabels { ',' CaseLabels }
1358 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
1363 static void CaseLabelList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1366 CaseLabels := ConstExpression [ '..' ConstExpression ]
1368 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
1373 static void CaseLabels (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1376 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
1379 first symbols:whiletok
1384 static void WhileStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1387 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
1390 first symbols:repeattok
1395 static void RepeatStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1398 ForStatement := 'FOR' Ident ':=' Expression 'TO'
1399 Expression [ 'BY' ConstExpression ]
1400 'DO' StatementSequence 'END'
1402 first symbols:fortok
1407 static void ForStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1410 LoopStatement := 'LOOP' StatementSequence 'END'
1412 first symbols:looptok
1417 static void LoopStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1420 WithStatement := 'WITH' Designator 'DO' StatementSequence
1423 first symbols:withtok
1428 static void WithStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1431 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
1434 first symbols:proceduretok
1439 static void ProcedureDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1442 ProcedureIdent := Ident
1443 % curproc := lookupSym (curident) %
1446 first symbols:identtok
1451 static void ProcedureIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1454 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
1455 '(' '(' Ident ')' ')' |
1458 first symbols:inlinetok, attributetok
1463 static void DefineBuiltinProcedure (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1466 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
1468 % enterScope (curproc) %
1469 [ FormalParameters ] AttributeNoReturn )
1471 first symbols:proceduretok
1476 static void ProcedureHeading (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1479 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
1481 first symbols:inlinetok, builtintok
1486 static void Builtin (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1489 DefProcedureHeading := 'PROCEDURE' Builtin ( ProcedureIdent
1490 [ DefFormalParameters ]
1493 first symbols:proceduretok
1498 static void DefProcedureHeading (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1501 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
1506 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
1511 static void ProcedureBlock (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1514 Block := { Declaration } InitialBlock FinalBlock
1517 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
1522 static void Block (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1525 InitialBlock := [ 'BEGIN' InitialBlockBody ]
1527 first symbols:begintok
1532 static void InitialBlock (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1535 FinalBlock := [ 'FINALLY' FinalBlockBody ]
1537 first symbols:finallytok
1542 static void FinalBlock (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1545 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1547 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1552 static void InitialBlockBody (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1555 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1557 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1562 static void FinalBlockBody (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1565 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
1567 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
1572 static void ProcedureBlockBody (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1575 NormalPart := StatementSequence
1577 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1582 static void NormalPart (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1585 ExceptionalPart := StatementSequence
1587 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
1592 static void ExceptionalPart (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1595 Declaration := 'CONST' { ConstantDeclaration ';' } |
1596 'TYPE' { TypeDeclaration ';' } |
1597 'VAR' { VariableDeclaration ';' } |
1598 ProcedureDeclaration ';' |
1599 ModuleDeclaration ';'
1601 first symbols:moduletok, proceduretok, vartok, typetok, consttok
1606 static void Declaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1609 DefFormalParameters := '(' [ DefMultiFPSection ]
1612 first symbols:lparatok
1617 static void DefFormalParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1620 DefMultiFPSection := DefExtendedFP |
1621 FPSection [ ';' DefMultiFPSection ]
1623 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1628 static void DefMultiFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1631 FormalParameters := '(' [ MultiFPSection ] ')'
1634 first symbols:lparatok
1639 static void FormalParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1642 AttributeNoReturn := [ '' ]
1644 first symbols:ldirectivetok
1649 static void AttributeNoReturn (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1652 AttributeUnused := [ '' ]
1654 first symbols:ldirectivetok
1659 static void AttributeUnused (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1662 MultiFPSection := ExtendedFP | FPSection [ ';'
1665 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
1670 static void MultiFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1673 FPSection := NonVarFPSection |
1676 first symbols:vartok, identtok
1681 static void FPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1684 DefExtendedFP := DefOptArg | '...'
1686 first symbols:lsbratok, periodperiodperiodtok
1691 static void DefExtendedFP (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1694 ExtendedFP := OptArg | '...'
1696 first symbols:lsbratok, periodperiodperiodtok
1701 static void ExtendedFP (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1704 VarFPSection := 'VAR' IdentList ':' FormalType [
1707 first symbols:vartok
1712 static void VarFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1715 NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
1717 first symbols:identtok
1722 static void NonVarFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1725 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
1728 first symbols:lsbratok
1733 static void OptArg (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1736 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
1739 first symbols:lsbratok
1744 static void DefOptArg (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1747 FormalType := { 'ARRAY' 'OF' } Qualident
1749 first symbols:identtok, arraytok
1754 static void FormalType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1757 ModuleDeclaration := 'MODULE' Ident [ Priority ]
1758 ';' { Import } [ Export ]
1761 first symbols:moduletok
1766 static void ModuleDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1769 Priority := '[' ConstExpression ']'
1771 first symbols:lsbratok
1776 static void Priority (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1779 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
1780 'UNQUALIFIED' IdentList |
1783 first symbols:exporttok
1788 static void Export (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1791 FromImport := 'FROM' Ident 'IMPORT' IdentList ';'
1793 first symbols:fromtok
1798 static void FromImport (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1801 ImportModuleList := Ident { ',' Ident }
1803 first symbols:identtok
1808 static void ImportModuleList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1811 WithoutFromImport := 'IMPORT' ImportModuleList ';'
1813 first symbols:importtok
1818 static void WithoutFromImport (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1821 Import := FromImport | WithoutFromImport
1823 first symbols:importtok, fromtok
1828 static void Import (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1831 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
1834 % curmodule := lookupDef (curident) %
1836 % enterScope (curmodule) %
1837 { Import } [ Export ] { Definition }
1839 % checkEndName (curmodule, curident, 'definition module') %
1843 % setEnumsComplete (curmodule) %
1846 first symbols:definitiontok
1851 static void DefinitionModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1854 DefQualident := Ident
1855 % typeExp := lookupSym (curident) %
1857 % IF NOT isDef (typeExp)
1859 ErrorArray ('the first component of this qualident must be a definition module')
1862 % typeExp := lookupInScope (typeExp, curident) ;
1865 ErrorArray ('identifier not found in definition module')
1869 first symbols:identtok
1874 static void DefQualident (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1877 DefOptSubrange := [ SubrangeType |
1879 % putType (typeDes, typeExp) %
1882 first symbols:lsbratok
1887 static void DefOptSubrange (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1890 DefTypeEquiv := DefQualident DefOptSubrange
1892 first symbols:identtok
1897 static void DefTypeEquiv (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1901 % VAR n, f: node ; %
1903 % n := makeEnum () %
1905 % f := makeEnumField (n, curident) %
1907 % f := makeEnumField (n, curident) %
1909 % IF typeDes # NIL THEN putType (typeDes, n) END %
1912 first symbols:identtok
1917 static void DefEnumIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1920 DefEnumeration := '(' DefEnumIdentList ')'
1922 first symbols:lparatok
1927 static void DefEnumeration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1930 DefSimpleType := DefTypeEquiv | DefEnumeration |
1933 first symbols:lsbratok, lparatok, identtok
1938 static void DefSimpleType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1941 DefType := DefSimpleType | ArrayType |
1942 RecordType | SetType | PointerType |
1945 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
1950 static void DefType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1953 DefTypeDeclaration := { Ident
1954 % typeDes := lookupSym (curident) %
1955 ( ';' | '=' DefType Alignment
1958 first symbols:identtok
1963 static void DefTypeDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1966 DefConstantDeclaration := Ident '=' ConstExpression
1968 first symbols:identtok
1973 static void DefConstantDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1976 Definition := 'CONST' { DefConstantDeclaration ';' } |
1977 'TYPE' { DefTypeDeclaration } |
1978 'VAR' { DefVariableDeclaration ';' } |
1979 DefProcedureHeading ';'
1981 first symbols:proceduretok, vartok, typetok, consttok
1986 static void Definition (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
1989 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
1992 first symbols:asmtok
1997 static void AsmStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2000 AsmOperands := string [ AsmOperandSpec ]
2002 first symbols:stringtok
2007 static void AsmOperands (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2010 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
2013 first symbols:colontok
2018 static void AsmOperandSpec (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2021 AsmList := [ AsmElement ] { ',' AsmElement }
2023 first symbols:lsbratok, stringtok, commatok
2028 static void AsmList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2031 NamedOperand := '[' Ident ']'
2033 first symbols:lsbratok
2038 static void NamedOperand (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2041 AsmOperandName := [ NamedOperand ]
2043 first symbols:lsbratok
2048 static void AsmOperandName (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2051 AsmElement := AsmOperandName string '(' Expression
2054 first symbols:stringtok, lsbratok
2059 static void AsmElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2062 TrashList := [ string ] { ',' string }
2064 first symbols:commatok, stringtok
2069 static void TrashList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
);
2071 static void ErrorString (DynamicStrings_String s
)
2073 mcError_errorStringAt (s
, mcLexBuf_getTokenNo ());
2077 static void ErrorArray (const char *a_
, unsigned int _a_high
)
2081 /* make a local copy of each unbounded array. */
2082 memcpy (a
, a_
, _a_high
+1);
2084 ErrorString (DynamicStrings_InitString ((const char *) a
, _a_high
));
2089 checkEndName - if module does not have, name, then issue an error containing, desc.
2092 static void checkEndName (decl_node module
, nameKey_Name name
, const char *desc_
, unsigned int _desc_high
)
2094 DynamicStrings_String s
;
2095 char desc
[_desc_high
+1];
2097 /* make a local copy of each unbounded array. */
2098 memcpy (desc
, desc_
, _desc_high
+1);
2100 if ((decl_getSymName (module
)) != name
)
2102 s
= DynamicStrings_InitString ((const char *) "inconsistent module name found with this ", 41);
2103 s
= DynamicStrings_ConCat (s
, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) desc
, _desc_high
)));
2110 DescribeStop - issues a message explaining what tokens were expected
2113 static DynamicStrings_String
DescribeStop (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
2116 DynamicStrings_String str
;
2117 DynamicStrings_String message
;
2120 message
= DynamicStrings_InitString ((const char *) "", 0);
2121 if ((((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2123 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "string", 6)));
2126 if ((((1 << (mcReserved_realtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2128 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "real number", 11)));
2131 if ((((1 << (mcReserved_identtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2133 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "identifier", 10)));
2136 if ((((1 << (mcReserved_integertok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2138 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "integer number", 14)));
2141 if ((((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2143 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__INLINE__", 10)));
2146 if ((((1 << (mcReserved_builtintok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2148 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__BUILTIN__", 11)));
2151 if ((((1 << (mcReserved_attributetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2153 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__ATTRIBUTE__", 13)));
2156 if ((((1 << (mcReserved_filetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2158 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__FILE__", 8)));
2161 if ((((1 << (mcReserved_linetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2163 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__LINE__", 8)));
2166 if ((((1 << (mcReserved_datetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2168 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "__DATE__", 8)));
2171 if ((((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2173 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "...", 3)));
2176 if ((((1 << (mcReserved_volatiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2178 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VOLATILE", 8)));
2181 if ((((1 << (mcReserved_asmtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2183 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ASM", 3)));
2186 if ((((1 << (mcReserved_withtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2188 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WITH", 4)));
2191 if ((((1 << (mcReserved_whiletok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2193 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "WHILE", 5)));
2196 if ((((1 << (mcReserved_vartok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2198 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "VAR", 3)));
2201 if ((((1 << (mcReserved_untiltok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2203 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNTIL", 5)));
2206 if ((((1 << (mcReserved_typetok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2208 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TYPE", 4)));
2211 if ((((1 << (mcReserved_totok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2213 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "TO", 2)));
2216 if ((((1 << (mcReserved_thentok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2218 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "THEN", 4)));
2221 if ((((1 << (mcReserved_settok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2223 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "SET", 3)));
2226 if ((((1 << (mcReserved_returntok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2228 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETURN", 6)));
2231 if ((((1 << (mcReserved_retrytok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2233 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RETRY", 5)));
2236 if ((((1 << (mcReserved_repeattok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2238 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REPEAT", 6)));
2241 if ((((1 << (mcReserved_remtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2243 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "REM", 3)));
2246 if ((((1 << (mcReserved_recordtok
-mcReserved_recordtok
)) & (stopset2
)) != 0))
2248 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "RECORD", 6)));
2251 if ((((1 << (mcReserved_unqualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2253 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "UNQUALIFIED", 11)));
2256 if ((((1 << (mcReserved_qualifiedtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2258 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "QUALIFIED", 9)));
2261 if ((((1 << (mcReserved_proceduretok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2263 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PROCEDURE", 9)));
2266 if ((((1 << (mcReserved_pointertok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2268 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "POINTER", 7)));
2271 if ((((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2273 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "PACKEDSET", 9)));
2276 if ((((1 << (mcReserved_ortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2278 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OR", 2)));
2281 if ((((1 << (mcReserved_oftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2283 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "OF", 2)));
2286 if ((((1 << (mcReserved_nottok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2288 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "NOT", 3)));
2291 if ((((1 << (mcReserved_moduletok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2293 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MODULE", 6)));
2296 if ((((1 << (mcReserved_modtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2298 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MOD", 3)));
2301 if ((((1 << (mcReserved_looptok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2303 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "LOOP", 4)));
2306 if ((((1 << (mcReserved_intok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2308 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IN", 2)));
2311 if ((((1 << (mcReserved_importtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2313 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPORT", 6)));
2316 if ((((1 << (mcReserved_implementationtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2318 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IMPLEMENTATION", 14)));
2321 if ((((1 << (mcReserved_iftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2323 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "IF", 2)));
2326 if ((((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2328 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FROM", 4)));
2331 if ((((1 << (mcReserved_fortok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2333 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FOR", 3)));
2336 if ((((1 << (mcReserved_finallytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2338 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "FINALLY", 7)));
2341 if ((((1 << (mcReserved_exporttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2343 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXPORT", 6)));
2346 if ((((1 << (mcReserved_exittok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2348 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXIT", 4)));
2351 if ((((1 << (mcReserved_excepttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2353 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "EXCEPT", 6)));
2356 if ((((1 << (mcReserved_endtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2358 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "END", 3)));
2361 if ((((1 << (mcReserved_elsiftok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2363 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSIF", 5)));
2366 if ((((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2368 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ELSE", 4)));
2371 if ((((1 << (mcReserved_dotok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2373 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DO", 2)));
2376 if ((((1 << (mcReserved_divtok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2378 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DIV", 3)));
2381 if ((((1 << (mcReserved_definitiontok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2383 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "DEFINITION", 10)));
2386 if ((((1 << (mcReserved_consttok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2388 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CONST", 5)));
2391 if ((((1 << (mcReserved_casetok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2393 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "CASE", 4)));
2396 if ((((1 << (mcReserved_bytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2398 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BY", 2)));
2401 if ((((1 << (mcReserved_begintok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2403 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "BEGIN", 5)));
2406 if ((((1 << (mcReserved_arraytok
-mcReserved_arraytok
)) & (stopset1
)) != 0))
2408 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "ARRAY", 5)));
2411 if ((((1 << (mcReserved_andtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2413 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "AND", 3)));
2416 if ((((1 << (mcReserved_colontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2418 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":", 1)));
2421 if ((((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2423 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "..", 2)));
2426 if ((((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2428 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*>", 2)));
2431 if ((((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2433 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<*", 2)));
2436 if ((((1 << (mcReserved_greaterequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2438 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">=", 2)));
2441 if ((((1 << (mcReserved_lessequaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2443 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<=", 2)));
2446 if ((((1 << (mcReserved_lessgreatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2448 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<>", 2)));
2451 if ((((1 << (mcReserved_hashtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2453 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "#", 1)));
2456 if ((((1 << (mcReserved_equaltok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2458 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "=", 1)));
2461 if ((((1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2463 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "^", 1)));
2466 if ((((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2468 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ";", 1)));
2471 if ((((1 << (mcReserved_commatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2473 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ",", 1)));
2476 if ((((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2478 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1)));
2481 if ((((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2483 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "&", 1)));
2486 if ((((1 << (mcReserved_dividetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2488 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "/", 1)));
2491 if ((((1 << (mcReserved_timestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2493 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "*", 1)));
2496 if ((((1 << (mcReserved_minustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2498 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-", 1)));
2501 if ((((1 << (mcReserved_plustok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2503 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "+", 1)));
2506 if ((((1 << (mcReserved_doublequotestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2508 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '`'), '"'), '\''), ',');
2511 if ((((1 << (mcReserved_singlequotetok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2513 message
= DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (message
, ' '), '"'), '\''), '"'), ',');
2516 if ((((1 << (mcReserved_greatertok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2518 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ">", 1)));
2521 if ((((1 << (mcReserved_lesstok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2523 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<", 1)));
2526 if ((((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2528 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ")", 1)));
2531 if ((((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2533 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "(", 1)));
2536 if ((((1 << (mcReserved_rcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2538 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "}", 1)));
2541 if ((((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2543 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "{", 1)));
2546 if ((((1 << (mcReserved_rsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2548 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "]", 1)));
2551 if ((((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2553 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "[", 1)));
2556 if ((((1 << (mcReserved_bartok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2558 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "|", 1)));
2561 if ((((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2563 message
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (message
, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ":=", 2)));
2566 if ((((1 << (mcReserved_eoftok
-mcReserved_eoftok
)) & (stopset0
)) != 0))
2568 /* eoftok has no token name (needed to generate error messages) */
2571 str
= DynamicStrings_InitString ((const char *) " syntax error", 13);
2572 message
= DynamicStrings_KillString (message
);
2576 /* avoid dangling else. */
2577 str
= DynamicStrings_ConCat (message
, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " missing ", 9)));
2581 /* avoid dangling else. */
2582 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) " expecting one of", 17), message
);
2583 message
= DynamicStrings_KillString (message
);
2586 /* static analysis guarentees a RETURN statement will be used before here. */
2587 __builtin_unreachable ();
2592 DescribeError - issues a message explaining what tokens were expected
2595 static void DescribeError (void)
2597 DynamicStrings_String str
;
2599 str
= DynamicStrings_InitString ((const char *) "", 0);
2600 switch (mcLexBuf_currenttoken
)
2602 case mcReserved_stringtok
:
2603 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found string", 26), DynamicStrings_Mark (str
));
2606 case mcReserved_realtok
:
2607 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found real number", 31), DynamicStrings_Mark (str
));
2610 case mcReserved_identtok
:
2611 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found identifier", 30), DynamicStrings_Mark (str
));
2614 case mcReserved_integertok
:
2615 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found integer number", 34), DynamicStrings_Mark (str
));
2618 case mcReserved_inlinetok
:
2619 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __INLINE__", 30), DynamicStrings_Mark (str
));
2622 case mcReserved_builtintok
:
2623 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __BUILTIN__", 31), DynamicStrings_Mark (str
));
2626 case mcReserved_attributetok
:
2627 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __ATTRIBUTE__", 33), DynamicStrings_Mark (str
));
2630 case mcReserved_filetok
:
2631 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __FILE__", 28), DynamicStrings_Mark (str
));
2634 case mcReserved_linetok
:
2635 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __LINE__", 28), DynamicStrings_Mark (str
));
2638 case mcReserved_datetok
:
2639 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found __DATE__", 28), DynamicStrings_Mark (str
));
2642 case mcReserved_periodperiodperiodtok
:
2643 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ...", 23), DynamicStrings_Mark (str
));
2646 case mcReserved_volatiletok
:
2647 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VOLATILE", 28), DynamicStrings_Mark (str
));
2650 case mcReserved_asmtok
:
2651 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ASM", 23), DynamicStrings_Mark (str
));
2654 case mcReserved_withtok
:
2655 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WITH", 24), DynamicStrings_Mark (str
));
2658 case mcReserved_whiletok
:
2659 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found WHILE", 25), DynamicStrings_Mark (str
));
2662 case mcReserved_vartok
:
2663 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found VAR", 23), DynamicStrings_Mark (str
));
2666 case mcReserved_untiltok
:
2667 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNTIL", 25), DynamicStrings_Mark (str
));
2670 case mcReserved_typetok
:
2671 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TYPE", 24), DynamicStrings_Mark (str
));
2674 case mcReserved_totok
:
2675 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found TO", 22), DynamicStrings_Mark (str
));
2678 case mcReserved_thentok
:
2679 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found THEN", 24), DynamicStrings_Mark (str
));
2682 case mcReserved_settok
:
2683 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found SET", 23), DynamicStrings_Mark (str
));
2686 case mcReserved_returntok
:
2687 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETURN", 26), DynamicStrings_Mark (str
));
2690 case mcReserved_retrytok
:
2691 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RETRY", 25), DynamicStrings_Mark (str
));
2694 case mcReserved_repeattok
:
2695 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REPEAT", 26), DynamicStrings_Mark (str
));
2698 case mcReserved_remtok
:
2699 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found REM", 23), DynamicStrings_Mark (str
));
2702 case mcReserved_recordtok
:
2703 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found RECORD", 26), DynamicStrings_Mark (str
));
2706 case mcReserved_unqualifiedtok
:
2707 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found UNQUALIFIED", 31), DynamicStrings_Mark (str
));
2710 case mcReserved_qualifiedtok
:
2711 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found QUALIFIED", 29), DynamicStrings_Mark (str
));
2714 case mcReserved_proceduretok
:
2715 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PROCEDURE", 29), DynamicStrings_Mark (str
));
2718 case mcReserved_pointertok
:
2719 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found POINTER", 27), DynamicStrings_Mark (str
));
2722 case mcReserved_packedsettok
:
2723 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found PACKEDSET", 29), DynamicStrings_Mark (str
));
2726 case mcReserved_ortok
:
2727 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OR", 22), DynamicStrings_Mark (str
));
2730 case mcReserved_oftok
:
2731 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found OF", 22), DynamicStrings_Mark (str
));
2734 case mcReserved_nottok
:
2735 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found NOT", 23), DynamicStrings_Mark (str
));
2738 case mcReserved_moduletok
:
2739 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MODULE", 26), DynamicStrings_Mark (str
));
2742 case mcReserved_modtok
:
2743 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found MOD", 23), DynamicStrings_Mark (str
));
2746 case mcReserved_looptok
:
2747 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found LOOP", 24), DynamicStrings_Mark (str
));
2750 case mcReserved_intok
:
2751 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IN", 22), DynamicStrings_Mark (str
));
2754 case mcReserved_importtok
:
2755 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPORT", 26), DynamicStrings_Mark (str
));
2758 case mcReserved_implementationtok
:
2759 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IMPLEMENTATION", 34), DynamicStrings_Mark (str
));
2762 case mcReserved_iftok
:
2763 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found IF", 22), DynamicStrings_Mark (str
));
2766 case mcReserved_fromtok
:
2767 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FROM", 24), DynamicStrings_Mark (str
));
2770 case mcReserved_fortok
:
2771 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FOR", 23), DynamicStrings_Mark (str
));
2774 case mcReserved_finallytok
:
2775 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found FINALLY", 27), DynamicStrings_Mark (str
));
2778 case mcReserved_exporttok
:
2779 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXPORT", 26), DynamicStrings_Mark (str
));
2782 case mcReserved_exittok
:
2783 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXIT", 24), DynamicStrings_Mark (str
));
2786 case mcReserved_excepttok
:
2787 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found EXCEPT", 26), DynamicStrings_Mark (str
));
2790 case mcReserved_endtok
:
2791 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found END", 23), DynamicStrings_Mark (str
));
2794 case mcReserved_elsiftok
:
2795 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSIF", 25), DynamicStrings_Mark (str
));
2798 case mcReserved_elsetok
:
2799 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ELSE", 24), DynamicStrings_Mark (str
));
2802 case mcReserved_dotok
:
2803 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DO", 22), DynamicStrings_Mark (str
));
2806 case mcReserved_divtok
:
2807 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DIV", 23), DynamicStrings_Mark (str
));
2810 case mcReserved_definitiontok
:
2811 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found DEFINITION", 30), DynamicStrings_Mark (str
));
2814 case mcReserved_consttok
:
2815 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CONST", 25), DynamicStrings_Mark (str
));
2818 case mcReserved_casetok
:
2819 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found CASE", 24), DynamicStrings_Mark (str
));
2822 case mcReserved_bytok
:
2823 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BY", 22), DynamicStrings_Mark (str
));
2826 case mcReserved_begintok
:
2827 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found BEGIN", 25), DynamicStrings_Mark (str
));
2830 case mcReserved_arraytok
:
2831 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ARRAY", 25), DynamicStrings_Mark (str
));
2834 case mcReserved_andtok
:
2835 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found AND", 23), DynamicStrings_Mark (str
));
2838 case mcReserved_colontok
:
2839 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :", 21), DynamicStrings_Mark (str
));
2842 case mcReserved_periodperiodtok
:
2843 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ..", 22), DynamicStrings_Mark (str
));
2846 case mcReserved_rdirectivetok
:
2847 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *>", 22), DynamicStrings_Mark (str
));
2850 case mcReserved_ldirectivetok
:
2851 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <*", 22), DynamicStrings_Mark (str
));
2854 case mcReserved_greaterequaltok
:
2855 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >=", 22), DynamicStrings_Mark (str
));
2858 case mcReserved_lessequaltok
:
2859 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <=", 22), DynamicStrings_Mark (str
));
2862 case mcReserved_lessgreatertok
:
2863 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <>", 22), DynamicStrings_Mark (str
));
2866 case mcReserved_hashtok
:
2867 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found #", 21), DynamicStrings_Mark (str
));
2870 case mcReserved_equaltok
:
2871 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found =", 21), DynamicStrings_Mark (str
));
2874 case mcReserved_uparrowtok
:
2875 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ^", 21), DynamicStrings_Mark (str
));
2878 case mcReserved_semicolontok
:
2879 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ;", 21), DynamicStrings_Mark (str
));
2882 case mcReserved_commatok
:
2883 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ,", 21), DynamicStrings_Mark (str
));
2886 case mcReserved_periodtok
:
2887 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found .", 21), DynamicStrings_Mark (str
));
2890 case mcReserved_ambersandtok
:
2891 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found &", 21), DynamicStrings_Mark (str
));
2894 case mcReserved_dividetok
:
2895 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found /", 21), DynamicStrings_Mark (str
));
2898 case mcReserved_timestok
:
2899 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found *", 21), DynamicStrings_Mark (str
));
2902 case mcReserved_minustok
:
2903 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found -", 21), DynamicStrings_Mark (str
));
2906 case mcReserved_plustok
:
2907 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found +", 21), DynamicStrings_Mark (str
));
2910 case mcReserved_doublequotestok
:
2911 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found '", 21), '"'), '\''), DynamicStrings_Mark (str
));
2914 case mcReserved_singlequotetok
:
2915 str
= DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_ConCatChar (DynamicStrings_InitString ((const char *) "syntax error, found \"", 21), '\''), '"'), DynamicStrings_Mark (str
));
2918 case mcReserved_greatertok
:
2919 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found >", 21), DynamicStrings_Mark (str
));
2922 case mcReserved_lesstok
:
2923 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found <", 21), DynamicStrings_Mark (str
));
2926 case mcReserved_rparatok
:
2927 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found )", 21), DynamicStrings_Mark (str
));
2930 case mcReserved_lparatok
:
2931 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found (", 21), DynamicStrings_Mark (str
));
2934 case mcReserved_rcbratok
:
2935 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found }", 21), DynamicStrings_Mark (str
));
2938 case mcReserved_lcbratok
:
2939 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found {", 21), DynamicStrings_Mark (str
));
2942 case mcReserved_rsbratok
:
2943 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ]", 21), DynamicStrings_Mark (str
));
2946 case mcReserved_lsbratok
:
2947 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found [", 21), DynamicStrings_Mark (str
));
2950 case mcReserved_bartok
:
2951 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found |", 21), DynamicStrings_Mark (str
));
2954 case mcReserved_becomestok
:
2955 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found :=", 22), DynamicStrings_Mark (str
));
2958 case mcReserved_eoftok
:
2959 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error, found ", 20), DynamicStrings_Mark (str
));
2971 SyntaxError - after a syntax error we skip all tokens up until we reach
2975 static void SyntaxError (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
2980 mcPrintf_printf0 ((const char *) "\\nskipping token *** ", 21);
2983 yes the ORD(currenttoken) looks ugly, but it is *much* safer than
2984 using currenttoken<sometok as a change to the ordering of the
2985 token declarations below would cause this to break. Using ORD() we are
2986 immune from such changes
2988 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)))))
2990 mcLexBuf_getToken ();
2994 mcPrintf_printf0 ((const char *) " ***\\n", 6);
3003 static void SyntaxCheck (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3005 /* and again (see above re: ORD)
3007 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)))))
3009 SyntaxError (stopset0
, stopset1
, stopset2
);
3015 WarnMissingToken - generates a warning message about a missing token, t.
3018 static void WarnMissingToken (mcReserved_toktype t
)
3023 DynamicStrings_String str
;
3025 s0
= (mcp2_SetOfStop0
) 0;
3026 s1
= (mcp2_SetOfStop1
) 0;
3027 s2
= (mcp2_SetOfStop2
) 0;
3028 if ( ((unsigned int) (t
)) < 32)
3030 s0
= (mcp2_SetOfStop0
) ((1 << (t
-mcReserved_eoftok
)));
3032 else if ( ((unsigned int) (t
)) < 64)
3034 /* avoid dangling else. */
3035 s1
= (mcp2_SetOfStop1
) ((1 << (t
-mcReserved_arraytok
)));
3039 /* avoid dangling else. */
3040 s2
= (mcp2_SetOfStop2
) ((1 << (t
-mcReserved_recordtok
)));
3042 str
= DescribeStop (s0
, s1
, s2
);
3043 str
= DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "syntax error,", 13), DynamicStrings_Mark (str
));
3044 mcError_errorStringAt (str
, mcLexBuf_getTokenNo ());
3049 MissingToken - generates a warning message about a missing token, t.
3052 static void MissingToken (mcReserved_toktype t
)
3054 WarnMissingToken (t
);
3055 if ((((t
!= mcReserved_identtok
) && (t
!= mcReserved_integertok
)) && (t
!= mcReserved_realtok
)) && (t
!= mcReserved_stringtok
))
3059 mcPrintf_printf0 ((const char *) "inserting token\\n", 17);
3061 mcLexBuf_insertToken (t
);
3070 static bool CheckAndInsert (mcReserved_toktype t
, mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3072 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))))
3074 WarnMissingToken (t
);
3075 mcLexBuf_insertTokenAndRewind (t
);
3082 /* static analysis guarentees a RETURN statement will be used before here. */
3083 __builtin_unreachable ();
3091 static bool InStopSet (mcReserved_toktype t
, mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3093 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))))
3101 /* static analysis guarentees a RETURN statement will be used before here. */
3102 __builtin_unreachable ();
3107 PeepToken - peep token checks to see whether the stopset is satisfied by currenttoken
3108 If it is not then it will insert a token providing the token
3109 is one of ; ] ) } . OF END ,
3111 if the stopset contains <identtok> then we do not insert a token
3114 static void PeepToken (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3116 /* and again (see above re: ORD)
3118 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
))))
3120 /* SyntaxCheck would fail since currentoken is not part of the stopset
3121 we check to see whether any of currenttoken might be a commonly omitted token */
3122 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
)))
3132 static void Expect (mcReserved_toktype t
, mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3134 if (mcLexBuf_currenttoken
== t
)
3136 /* avoid dangling else. */
3137 mcLexBuf_getToken ();
3140 PeepToken (stopset0
, stopset1
, stopset2
);
3147 SyntaxCheck (stopset0
, stopset1
, stopset2
);
3152 Ident - error checking varient of Ident
3155 static void Ident (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3157 curident
= nameKey_makekey (mcLexBuf_currentstring
);
3158 Expect (mcReserved_identtok
, stopset0
, stopset1
, stopset2
);
3166 static void string (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3169 PushTF(makekey(currentstring), stringtok) ;
3172 Expect (mcReserved_stringtok
, stopset0
, stopset1
, stopset2
);
3180 static void Integer (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3183 PushTF(makekey(currentstring), integertok) ;
3186 Expect (mcReserved_integertok
, stopset0
, stopset1
, stopset2
);
3194 static void Real (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3197 PushTF(makekey(currentstring), realtok) ;
3200 Expect (mcReserved_realtok
, stopset0
, stopset1
, stopset2
);
3205 registerImport - looks up module, ident, and adds it to the
3206 current module import list.
3209 static void registerImport (nameKey_Name ident
, bool scoped
)
3213 n
= decl_lookupDef (ident
);
3214 decl_addImportedModule (decl_getCurrentModule (), n
, scoped
);
3219 FileUnit := DefinitionModule |
3220 ImplementationOrProgramModule
3222 first symbols:implementationtok, moduletok, definitiontok
3227 static void FileUnit (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3229 if (mcLexBuf_currenttoken
== mcReserved_definitiontok
)
3231 DefinitionModule (stopset0
, stopset1
, stopset2
);
3233 else if (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_implementationtok
-mcReserved_arraytok
)) | (1 << (mcReserved_moduletok
-mcReserved_arraytok
))))) != 0)))
3235 /* avoid dangling else. */
3236 ImplementationOrProgramModule (stopset0
, stopset1
, stopset2
);
3240 /* avoid dangling else. */
3241 ErrorArray ((const char *) "expecting one of: IMPLEMENTATION MODULE DEFINITION", 50);
3247 ProgramModule := 'MODULE' Ident
3248 % curmodule := lookupModule (curident) %
3250 % enterScope (curmodule) %
3251 [ Priority ] ';' { Import } Block
3253 % checkEndName (curmodule, curident, 'program module') %
3257 % setEnumsComplete (curmodule) %
3260 first symbols:moduletok
3265 static void ProgramModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3267 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3268 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3269 curmodule
= decl_lookupModule (curident
);
3270 decl_enterScope (curmodule
);
3271 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
3273 Priority (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3275 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
3276 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
3278 Import (stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
3281 Block (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3282 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3283 checkEndName (curmodule
, curident
, (const char *) "program module", 14);
3285 decl_setEnumsComplete (curmodule
);
3286 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
3291 ImplementationModule := 'IMPLEMENTATION' 'MODULE'
3293 % curmodule := lookupImp (curident) %
3295 % enterScope (lookupDef (curident)) %
3297 % enterScope (curmodule) %
3298 [ Priority ] ';' { Import }
3300 % checkEndName (curmodule, curident, 'implementation module') %
3302 % leaveScope ; leaveScope %
3304 % setEnumsComplete (curmodule) %
3307 first symbols:implementationtok
3312 static void ImplementationModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3314 Expect (mcReserved_implementationtok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_moduletok
-mcReserved_arraytok
))), stopset2
);
3315 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3316 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3317 curmodule
= decl_lookupImp (curident
);
3318 decl_enterScope (decl_lookupDef (curident
));
3319 decl_enterScope (curmodule
);
3320 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
3322 Priority (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3324 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
3325 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
3327 Import (stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
3330 Block (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3331 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3332 checkEndName (curmodule
, curident
, (const char *) "implementation module", 21);
3335 decl_setEnumsComplete (curmodule
);
3336 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
3341 ImplementationOrProgramModule := ImplementationModule |
3344 first symbols:moduletok, implementationtok
3349 static void ImplementationOrProgramModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3351 if (mcLexBuf_currenttoken
== mcReserved_implementationtok
)
3353 ImplementationModule (stopset0
, stopset1
, stopset2
);
3355 else if (mcLexBuf_currenttoken
== mcReserved_moduletok
)
3357 /* avoid dangling else. */
3358 ProgramModule (stopset0
, stopset1
, stopset2
);
3362 /* avoid dangling else. */
3363 ErrorArray ((const char *) "expecting one of: MODULE IMPLEMENTATION", 39);
3369 Number := Integer | Real
3371 first symbols:realtok, integertok
3376 static void Number (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3378 if (mcLexBuf_currenttoken
== mcReserved_integertok
)
3380 Integer (stopset0
, stopset1
, stopset2
);
3382 else if (mcLexBuf_currenttoken
== mcReserved_realtok
)
3384 /* avoid dangling else. */
3385 Real (stopset0
, stopset1
, stopset2
);
3389 /* avoid dangling else. */
3390 ErrorArray ((const char *) "expecting one of: real number integer number", 44);
3396 Qualident := Ident { '.' Ident }
3398 first symbols:identtok
3403 static void Qualident (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3405 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3406 while (mcLexBuf_currenttoken
== mcReserved_periodtok
)
3408 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3409 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3416 ConstantDeclaration := Ident '=' ConstExpression
3418 first symbols:identtok
3423 static void ConstantDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3425 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3426 Expect (mcReserved_equaltok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3427 ConstExpression (stopset0
, stopset1
, stopset2
);
3432 ConstExpression := SimpleConstExpr [ Relation SimpleConstExpr ]
3434 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3439 static void ConstExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3441 SimpleConstExpr (stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_intok
-mcReserved_arraytok
))), stopset2
);
3442 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
))
3444 Relation (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
3445 SimpleConstExpr (stopset0
, stopset1
, stopset2
);
3451 Relation := '=' | '#' | '<>' | '<' | '<=' |
3454 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
3459 static void Relation (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3461 if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
3463 Expect (mcReserved_equaltok
, stopset0
, stopset1
, stopset2
);
3465 else if (mcLexBuf_currenttoken
== mcReserved_hashtok
)
3467 /* avoid dangling else. */
3468 Expect (mcReserved_hashtok
, stopset0
, stopset1
, stopset2
);
3470 else if (mcLexBuf_currenttoken
== mcReserved_lessgreatertok
)
3472 /* avoid dangling else. */
3473 Expect (mcReserved_lessgreatertok
, stopset0
, stopset1
, stopset2
);
3475 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
3477 /* avoid dangling else. */
3478 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
);
3480 else if (mcLexBuf_currenttoken
== mcReserved_lessequaltok
)
3482 /* avoid dangling else. */
3483 Expect (mcReserved_lessequaltok
, stopset0
, stopset1
, stopset2
);
3485 else if (mcLexBuf_currenttoken
== mcReserved_greatertok
)
3487 /* avoid dangling else. */
3488 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
3490 else if (mcLexBuf_currenttoken
== mcReserved_greaterequaltok
)
3492 /* avoid dangling else. */
3493 Expect (mcReserved_greaterequaltok
, stopset0
, stopset1
, stopset2
);
3495 else if (mcLexBuf_currenttoken
== mcReserved_intok
)
3497 /* avoid dangling else. */
3498 Expect (mcReserved_intok
, stopset0
, stopset1
, stopset2
);
3502 /* avoid dangling else. */
3503 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
3509 SimpleConstExpr := UnaryOrConstTerm { AddOperator
3512 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3517 static void SimpleConstExpr (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3519 UnaryOrConstTerm (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
3520 while (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_ortok
))
3522 AddOperator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
3523 ConstTerm (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
3530 UnaryOrConstTerm := '+' ConstTerm |
3534 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3539 static void UnaryOrConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3541 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
3543 Expect (mcReserved_plustok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
3544 ConstTerm (stopset0
, stopset1
, stopset2
);
3546 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
3548 /* avoid dangling else. */
3549 Expect (mcReserved_minustok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
3550 ConstTerm (stopset0
, stopset1
, stopset2
);
3552 else if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))))) != 0))))
3554 /* avoid dangling else. */
3555 ConstTerm (stopset0
, stopset1
, stopset2
);
3559 /* avoid dangling else. */
3560 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ identifier { string - +", 88);
3566 AddOperator := '+' | '-' | 'OR'
3568 first symbols:ortok, minustok, plustok
3573 static void AddOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3575 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
3577 Expect (mcReserved_plustok
, stopset0
, stopset1
, stopset2
);
3579 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
3581 /* avoid dangling else. */
3582 Expect (mcReserved_minustok
, stopset0
, stopset1
, stopset2
);
3584 else if (mcLexBuf_currenttoken
== mcReserved_ortok
)
3586 /* avoid dangling else. */
3587 Expect (mcReserved_ortok
, stopset0
, stopset1
, stopset2
);
3591 /* avoid dangling else. */
3592 ErrorArray ((const char *) "expecting one of: OR - +", 24);
3598 ConstTerm := ConstFactor { MulOperator ConstFactor }
3600 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok
3605 static void ConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3607 ConstFactor (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_timestok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_modtok
-mcReserved_arraytok
)) | (1 << (mcReserved_divtok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
3608 while ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))))) != 0)))) || (mcLexBuf_currenttoken
== mcReserved_remtok
))
3610 MulOperator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3611 ConstFactor (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_timestok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_ambersandtok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
3618 MulOperator := '*' | '/' | 'DIV' | 'MOD' |
3621 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
3626 static void MulOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3628 if (mcLexBuf_currenttoken
== mcReserved_timestok
)
3630 Expect (mcReserved_timestok
, stopset0
, stopset1
, stopset2
);
3632 else if (mcLexBuf_currenttoken
== mcReserved_dividetok
)
3634 /* avoid dangling else. */
3635 Expect (mcReserved_dividetok
, stopset0
, stopset1
, stopset2
);
3637 else if (mcLexBuf_currenttoken
== mcReserved_divtok
)
3639 /* avoid dangling else. */
3640 Expect (mcReserved_divtok
, stopset0
, stopset1
, stopset2
);
3642 else if (mcLexBuf_currenttoken
== mcReserved_modtok
)
3644 /* avoid dangling else. */
3645 Expect (mcReserved_modtok
, stopset0
, stopset1
, stopset2
);
3647 else if (mcLexBuf_currenttoken
== mcReserved_remtok
)
3649 /* avoid dangling else. */
3650 Expect (mcReserved_remtok
, stopset0
, stopset1
, stopset2
);
3652 else if (mcLexBuf_currenttoken
== mcReserved_andtok
)
3654 /* avoid dangling else. */
3655 Expect (mcReserved_andtok
, stopset0
, stopset1
, stopset2
);
3657 else if (mcLexBuf_currenttoken
== mcReserved_ambersandtok
)
3659 /* avoid dangling else. */
3660 Expect (mcReserved_ambersandtok
, stopset0
, stopset1
, stopset2
);
3664 /* avoid dangling else. */
3665 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
3671 ConstFactor := Number | ConstString |
3672 ConstSetOrQualidentOrFunction |
3673 '(' ConstExpression ')' |
3677 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok
3682 static void ConstFactor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3684 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
))))) != 0)))
3686 Number (stopset0
, stopset1
, stopset2
);
3688 else if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
3690 /* avoid dangling else. */
3691 ConstString (stopset0
, stopset1
, stopset2
);
3693 else if ((mcLexBuf_currenttoken
== mcReserved_lcbratok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
3695 /* avoid dangling else. */
3696 ConstSetOrQualidentOrFunction (stopset0
, stopset1
, stopset2
);
3698 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
3700 /* avoid dangling else. */
3701 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3702 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3703 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
3705 else if (mcLexBuf_currenttoken
== mcReserved_nottok
)
3707 /* avoid dangling else. */
3708 Expect (mcReserved_nottok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3709 ConstFactor (stopset0
, stopset1
, stopset2
);
3711 else if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
3713 /* avoid dangling else. */
3714 ConstAttribute (stopset0
, stopset1
, stopset2
);
3718 /* avoid dangling else. */
3719 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( identifier { string integer number real number", 84);
3725 ConstString := string
3727 first symbols:stringtok
3732 static void ConstString (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3734 string (stopset0
, stopset1
, stopset2
);
3739 ComponentElement := ConstExpression [ '..' ConstExpression ]
3741 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3746 static void ComponentElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3748 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3749 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
3751 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3752 ConstExpression (stopset0
, stopset1
, stopset2
);
3758 ComponentValue := ComponentElement [ 'BY' ConstExpression ]
3760 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
3765 static void ComponentValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3767 ComponentElement (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
))), stopset2
);
3768 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
3770 Expect (mcReserved_bytok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3771 ConstExpression (stopset0
, stopset1
, stopset2
);
3777 ArraySetRecordValue := ComponentValue { ',' ComponentValue }
3779 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
3784 static void ArraySetRecordValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3786 ComponentValue (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3787 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
3789 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3790 ComponentValue (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3797 Constructor := '{' [ ArraySetRecordValue ] '}'
3799 first symbols:lcbratok
3804 static void Constructor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3806 Expect (mcReserved_lcbratok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
3807 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))))) != 0))))
3809 ArraySetRecordValue (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rcbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3811 Expect (mcReserved_rcbratok
, stopset0
, stopset1
, stopset2
);
3816 ConstSetOrQualidentOrFunction := Qualident [ Constructor |
3817 ConstActualParameters ] |
3820 first symbols:lcbratok, identtok
3825 static void ConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3827 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
3829 /* avoid dangling else. */
3830 Qualident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3831 if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))))) != 0)))
3833 /* avoid gcc warning by using compound statement even if not strictly necessary. */
3834 /* seen optional [ | ] expression */
3835 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
3837 Constructor (stopset0
, stopset1
, stopset2
);
3839 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
3841 /* avoid dangling else. */
3842 ConstActualParameters (stopset0
, stopset1
, stopset2
);
3846 /* avoid dangling else. */
3847 ErrorArray ((const char *) "expecting one of: ( {", 21);
3850 /* end of optional [ | ] expression */
3852 else if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
3854 /* avoid dangling else. */
3855 Constructor (stopset0
, stopset1
, stopset2
);
3859 /* avoid dangling else. */
3860 ErrorArray ((const char *) "expecting one of: { identifier", 30);
3866 ConstActualParameters := ActualParameters
3868 first symbols:lparatok
3873 static void ConstActualParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3875 ActualParameters (stopset0
, stopset1
, stopset2
);
3880 ConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
3881 '(' '(' ConstAttributeExpression
3884 first symbols:attributetok
3889 static void ConstAttribute (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3891 Expect (mcReserved_attributetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_builtintok
-mcReserved_recordtok
))));
3892 Expect (mcReserved_builtintok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3893 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3894 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lesstok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3895 ConstAttributeExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3896 Expect (mcReserved_rparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3897 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
3902 ConstAttributeExpression := Ident | '<' Qualident
3905 first symbols:lesstok, identtok
3910 static void ConstAttributeExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3912 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
3914 Ident (stopset0
, stopset1
, stopset2
);
3916 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
3918 /* avoid dangling else. */
3919 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3920 Qualident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3921 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3922 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_greatertok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3923 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
3927 /* avoid dangling else. */
3928 ErrorArray ((const char *) "expecting one of: < identifier", 30);
3936 first symbols:ldirectivetok
3941 static void ByteAlignment (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3943 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
3944 AttributeExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3945 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
3950 OptAlignmentExpression := [ AlignmentExpression ]
3952 first symbols:lparatok
3957 static void OptAlignmentExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3959 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
3961 AlignmentExpression (stopset0
, stopset1
, stopset2
);
3967 AlignmentExpression := '(' ConstExpression ')'
3969 first symbols:lparatok
3974 static void AlignmentExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3976 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
3977 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
3978 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
3983 Alignment := [ ByteAlignment ]
3985 first symbols:ldirectivetok
3990 static void Alignment (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
3992 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
3994 ByteAlignment (stopset0
, stopset1
, stopset2
);
4000 TypeDeclaration := Ident
4001 % typeDes := lookupSym (curident) %
4004 first symbols:identtok
4009 static void TypeDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4011 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4012 typeDes
= decl_lookupSym (curident
);
4013 Expect (mcReserved_equaltok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4014 Type (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4015 Alignment (stopset0
, stopset1
, stopset2
);
4020 Type := ( DefSimpleType | ArrayType |
4021 RecordType | SetType | PointerType |
4024 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
4029 static void Type (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4031 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
4033 DefSimpleType (stopset0
, stopset1
, stopset2
);
4035 else if (mcLexBuf_currenttoken
== mcReserved_arraytok
)
4037 /* avoid dangling else. */
4038 ArrayType (stopset0
, stopset1
, stopset2
);
4040 else if (mcLexBuf_currenttoken
== mcReserved_recordtok
)
4042 /* avoid dangling else. */
4043 RecordType (stopset0
, stopset1
, stopset2
);
4045 else if ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) | (1 << (mcReserved_oftok
-mcReserved_arraytok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_settok
))
4047 /* avoid dangling else. */
4048 SetType (stopset0
, stopset1
, stopset2
);
4050 else if (mcLexBuf_currenttoken
== mcReserved_pointertok
)
4052 /* avoid dangling else. */
4053 PointerType (stopset0
, stopset1
, stopset2
);
4055 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
4057 /* avoid dangling else. */
4058 ProcedureType (stopset0
, stopset1
, stopset2
);
4062 /* avoid dangling else. */
4063 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
4069 SimpleType := Qualident [ SubrangeType ] |
4070 Enumeration | SubrangeType
4072 first symbols:lsbratok, lparatok, identtok
4077 static void SimpleType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4079 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4081 /* avoid dangling else. */
4082 Qualident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4083 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
4085 SubrangeType (stopset0
, stopset1
, stopset2
);
4088 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4090 /* avoid dangling else. */
4091 Enumeration (stopset0
, stopset1
, stopset2
);
4093 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
4095 /* avoid dangling else. */
4096 SubrangeType (stopset0
, stopset1
, stopset2
);
4100 /* avoid dangling else. */
4101 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
4108 % VAR n, f: node ; %
4110 % n := makeEnum () %
4112 % f := makeEnumField (n, curident) %
4114 % f := makeEnumField (n, curident) %
4117 first symbols:identtok
4122 static void EnumIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4127 n
= decl_makeEnum ();
4128 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4129 f
= decl_makeEnumField (n
, curident
);
4130 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4132 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4133 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4134 f
= decl_makeEnumField (n
, curident
);
4141 Enumeration := '(' ( EnumIdentList ) ')'
4143 first symbols:lparatok
4148 static void Enumeration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4150 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4151 EnumIdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4152 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4157 IdentList := Ident { ',' Ident }
4159 first symbols:identtok
4164 static void IdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4166 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4167 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4169 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4170 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4177 SubrangeType := '[' ConstExpression '..' ConstExpression
4180 first symbols:lsbratok
4185 static void SubrangeType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4187 Expect (mcReserved_lsbratok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4188 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4189 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4190 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4191 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
4196 ArrayType := 'ARRAY' SimpleType { ',' SimpleType }
4199 first symbols:arraytok
4204 static void ArrayType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4206 Expect (mcReserved_arraytok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4207 SimpleType (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4208 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4210 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4211 SimpleType (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4214 Expect (mcReserved_oftok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4215 Type (stopset0
, stopset1
, stopset2
);
4220 RecordType := 'RECORD' [ DefaultRecordAttributes ]
4221 FieldListSequence 'END'
4223 first symbols:recordtok
4228 static void RecordType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4230 Expect (mcReserved_recordtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4231 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4233 DefaultRecordAttributes (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4235 FieldListSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4236 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
4241 DefaultRecordAttributes := ''
4243 first symbols:ldirectivetok
4248 static void DefaultRecordAttributes (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4250 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4251 AttributeExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4252 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4257 RecordFieldPragma := [ '' ]
4259 first symbols:ldirectivetok
4264 static void RecordFieldPragma (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4266 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
4268 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4269 FieldPragmaExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
)) | (1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4270 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4272 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4273 FieldPragmaExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4276 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
4282 FieldPragmaExpression := Ident PragmaConstExpression
4284 first symbols:identtok
4289 static void FieldPragmaExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4291 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4292 PragmaConstExpression (stopset0
, stopset1
, stopset2
);
4297 PragmaConstExpression := [ '(' ConstExpression ')' ]
4299 first symbols:lparatok
4304 static void PragmaConstExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4306 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4308 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4309 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4310 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4316 AttributeExpression := Ident '(' ConstExpression
4319 first symbols:identtok
4324 static void AttributeExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4326 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4327 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4328 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4329 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4334 FieldListSequence := FieldListStatement { ';' FieldListStatement }
4336 first symbols:casetok, identtok, semicolontok
4341 static void FieldListSequence (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4343 FieldListStatement (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4344 while (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
4346 Expect (mcReserved_semicolontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4347 FieldListStatement (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4354 FieldListStatement := [ FieldList ]
4356 first symbols:identtok, casetok
4361 static void FieldListStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4363 if ((mcLexBuf_currenttoken
== mcReserved_casetok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
4365 FieldList (stopset0
, stopset1
, stopset2
);
4371 FieldList := IdentList ':' Type RecordFieldPragma |
4372 'CASE' CaseTag 'OF' Varient { '|' Varient }
4373 [ 'ELSE' FieldListSequence ] 'END'
4375 first symbols:casetok, identtok
4380 static void FieldList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4382 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4384 IdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4385 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4386 Type (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4387 RecordFieldPragma (stopset0
, stopset1
, stopset2
);
4389 else if (mcLexBuf_currenttoken
== mcReserved_casetok
)
4391 /* avoid dangling else. */
4392 Expect (mcReserved_casetok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4393 CaseTag (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
4394 Expect (mcReserved_oftok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4395 Varient (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4396 while (mcLexBuf_currenttoken
== mcReserved_bartok
)
4398 Expect (mcReserved_bartok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4399 Varient (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
))), stopset2
);
4402 if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
4404 Expect (mcReserved_elsetok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4405 FieldListSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
4407 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
4411 /* avoid dangling else. */
4412 ErrorArray ((const char *) "expecting one of: CASE identifier", 33);
4418 TagIdent := [ Ident ]
4420 first symbols:identtok
4425 static void TagIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4427 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4429 Ident (stopset0
, stopset1
, stopset2
);
4435 CaseTag := TagIdent [ ':' Qualident ]
4437 first symbols:colontok, identtok
4442 static void CaseTag (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4444 TagIdent (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4445 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
4447 Expect (mcReserved_colontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4448 Qualident (stopset0
, stopset1
, stopset2
);
4454 Varient := [ VarientCaseLabelList ':' FieldListSequence ]
4456 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4461 static void Varient (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4463 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))))) != 0))))
4465 VarientCaseLabelList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4466 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_casetok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4467 FieldListSequence (stopset0
, stopset1
, stopset2
);
4473 VarientCaseLabelList := VarientCaseLabels { ','
4476 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4481 static void VarientCaseLabelList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4483 VarientCaseLabels (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4484 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4486 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4487 VarientCaseLabels (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4494 VarientCaseLabels := ConstExpression [ '..' ConstExpression ]
4496 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4501 static void VarientCaseLabels (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4503 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4504 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
4506 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4507 ConstExpression (stopset0
, stopset1
, stopset2
);
4513 SilentConstExpression := SilentSimpleConstExpr [
4514 SilentRelation SilentSimpleConstExpr ]
4516 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4521 static void SilentConstExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4523 SilentSimpleConstExpr (stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_intok
-mcReserved_arraytok
))), stopset2
);
4524 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
))
4526 SilentRelation (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4527 SilentSimpleConstExpr (stopset0
, stopset1
, stopset2
);
4533 SilentRelation := '=' | '#' | '<>' | '<' |
4534 '<=' | '>' | '>=' | 'IN'
4536 first symbols:intok, greaterequaltok, greatertok, lessequaltok, lesstok, lessgreatertok, hashtok, equaltok
4541 static void SilentRelation (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4543 if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
4545 Expect (mcReserved_equaltok
, stopset0
, stopset1
, stopset2
);
4547 else if (mcLexBuf_currenttoken
== mcReserved_hashtok
)
4549 /* avoid dangling else. */
4550 Expect (mcReserved_hashtok
, stopset0
, stopset1
, stopset2
);
4552 else if (mcLexBuf_currenttoken
== mcReserved_lessgreatertok
)
4554 /* avoid dangling else. */
4555 Expect (mcReserved_lessgreatertok
, stopset0
, stopset1
, stopset2
);
4557 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
4559 /* avoid dangling else. */
4560 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
);
4562 else if (mcLexBuf_currenttoken
== mcReserved_lessequaltok
)
4564 /* avoid dangling else. */
4565 Expect (mcReserved_lessequaltok
, stopset0
, stopset1
, stopset2
);
4567 else if (mcLexBuf_currenttoken
== mcReserved_greatertok
)
4569 /* avoid dangling else. */
4570 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
4572 else if (mcLexBuf_currenttoken
== mcReserved_greaterequaltok
)
4574 /* avoid dangling else. */
4575 Expect (mcReserved_greaterequaltok
, stopset0
, stopset1
, stopset2
);
4577 else if (mcLexBuf_currenttoken
== mcReserved_intok
)
4579 /* avoid dangling else. */
4580 Expect (mcReserved_intok
, stopset0
, stopset1
, stopset2
);
4584 /* avoid dangling else. */
4585 ErrorArray ((const char *) "expecting one of: IN >= > <= < <> # =", 37);
4591 SilentSimpleConstExpr := SilentUnaryOrConstTerm
4592 { SilentAddOperator SilentConstTerm }
4594 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4599 static void SilentSimpleConstExpr (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4601 SilentUnaryOrConstTerm (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
4602 while (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_ortok
))
4604 SilentAddOperator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4605 SilentConstTerm (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
4612 SilentUnaryOrConstTerm := '+' SilentConstTerm |
4613 '-' SilentConstTerm |
4616 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4621 static void SilentUnaryOrConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4623 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
4625 Expect (mcReserved_plustok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4626 SilentConstTerm (stopset0
, stopset1
, stopset2
);
4628 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
4630 /* avoid dangling else. */
4631 Expect (mcReserved_minustok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4632 SilentConstTerm (stopset0
, stopset1
, stopset2
);
4634 else if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))))) != 0))))
4636 /* avoid dangling else. */
4637 SilentConstTerm (stopset0
, stopset1
, stopset2
);
4641 /* avoid dangling else. */
4642 ErrorArray ((const char *) "expecting one of: NOT ( integer number real number __ATTRIBUTE__ { identifier string - +", 88);
4648 SilentAddOperator := '+' | '-' | 'OR'
4650 first symbols:ortok, minustok, plustok
4655 static void SilentAddOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4657 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
4659 Expect (mcReserved_plustok
, stopset0
, stopset1
, stopset2
);
4661 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
4663 /* avoid dangling else. */
4664 Expect (mcReserved_minustok
, stopset0
, stopset1
, stopset2
);
4666 else if (mcLexBuf_currenttoken
== mcReserved_ortok
)
4668 /* avoid dangling else. */
4669 Expect (mcReserved_ortok
, stopset0
, stopset1
, stopset2
);
4673 /* avoid dangling else. */
4674 ErrorArray ((const char *) "expecting one of: OR - +", 24);
4680 SilentConstTerm := SilentConstFactor { SilentMulOperator
4683 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok
4688 static void SilentConstTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4690 SilentConstFactor (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_timestok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_modtok
-mcReserved_arraytok
)) | (1 << (mcReserved_divtok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
4691 while ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))))) != 0)))) || (mcLexBuf_currenttoken
== mcReserved_remtok
))
4693 SilentMulOperator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4694 SilentConstFactor (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_timestok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_ambersandtok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
4701 SilentMulOperator := '*' | '/' | 'DIV' |
4702 'MOD' | 'REM' | 'AND' |
4705 first symbols:ambersandtok, andtok, remtok, modtok, divtok, dividetok, timestok
4710 static void SilentMulOperator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4712 if (mcLexBuf_currenttoken
== mcReserved_timestok
)
4714 Expect (mcReserved_timestok
, stopset0
, stopset1
, stopset2
);
4716 else if (mcLexBuf_currenttoken
== mcReserved_dividetok
)
4718 /* avoid dangling else. */
4719 Expect (mcReserved_dividetok
, stopset0
, stopset1
, stopset2
);
4721 else if (mcLexBuf_currenttoken
== mcReserved_divtok
)
4723 /* avoid dangling else. */
4724 Expect (mcReserved_divtok
, stopset0
, stopset1
, stopset2
);
4726 else if (mcLexBuf_currenttoken
== mcReserved_modtok
)
4728 /* avoid dangling else. */
4729 Expect (mcReserved_modtok
, stopset0
, stopset1
, stopset2
);
4731 else if (mcLexBuf_currenttoken
== mcReserved_remtok
)
4733 /* avoid dangling else. */
4734 Expect (mcReserved_remtok
, stopset0
, stopset1
, stopset2
);
4736 else if (mcLexBuf_currenttoken
== mcReserved_andtok
)
4738 /* avoid dangling else. */
4739 Expect (mcReserved_andtok
, stopset0
, stopset1
, stopset2
);
4741 else if (mcLexBuf_currenttoken
== mcReserved_ambersandtok
)
4743 /* avoid dangling else. */
4744 Expect (mcReserved_ambersandtok
, stopset0
, stopset1
, stopset2
);
4748 /* avoid dangling else. */
4749 ErrorArray ((const char *) "expecting one of: & AND REM MOD DIV / *", 39);
4755 SilentConstFactor := Number | SilentConstString |
4756 SilentConstSetOrQualidentOrFunction |
4757 '(' SilentConstExpression ')' |
4758 'NOT' SilentConstFactor |
4759 SilentConstAttribute
4761 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok
4766 static void SilentConstFactor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4768 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
))))) != 0)))
4770 Number (stopset0
, stopset1
, stopset2
);
4772 else if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
4774 /* avoid dangling else. */
4775 SilentConstString (stopset0
, stopset1
, stopset2
);
4777 else if ((mcLexBuf_currenttoken
== mcReserved_lcbratok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
4779 /* avoid dangling else. */
4780 SilentConstSetOrQualidentOrFunction (stopset0
, stopset1
, stopset2
);
4782 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4784 /* avoid dangling else. */
4785 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4786 SilentConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4787 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4789 else if (mcLexBuf_currenttoken
== mcReserved_nottok
)
4791 /* avoid dangling else. */
4792 Expect (mcReserved_nottok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4793 SilentConstFactor (stopset0
, stopset1
, stopset2
);
4795 else if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
4797 /* avoid dangling else. */
4798 SilentConstAttribute (stopset0
, stopset1
, stopset2
);
4802 /* avoid dangling else. */
4803 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ NOT ( { identifier string integer number real number", 84);
4809 SilentConstString := string
4811 first symbols:stringtok
4816 static void SilentConstString (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4818 string (stopset0
, stopset1
, stopset2
);
4823 SilentConstAttribute := '__ATTRIBUTE__' '__BUILTIN__'
4824 '(' '(' SilentConstAttributeExpression
4827 first symbols:attributetok
4832 static void SilentConstAttribute (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4834 Expect (mcReserved_attributetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_builtintok
-mcReserved_recordtok
))));
4835 Expect (mcReserved_builtintok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4836 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4837 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lesstok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4838 SilentConstAttributeExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4839 Expect (mcReserved_rparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4840 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
4845 SilentConstAttributeExpression := Ident |
4850 first symbols:lesstok, identtok
4855 static void SilentConstAttributeExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4857 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4859 Ident (stopset0
, stopset1
, stopset2
);
4861 else if (mcLexBuf_currenttoken
== mcReserved_lesstok
)
4863 /* avoid dangling else. */
4864 Expect (mcReserved_lesstok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
4865 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4866 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4867 SilentConstString (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_greatertok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4868 Expect (mcReserved_greatertok
, stopset0
, stopset1
, stopset2
);
4872 /* avoid dangling else. */
4873 ErrorArray ((const char *) "expecting one of: < identifier", 30);
4879 SilentComponentElement := SilentConstExpression
4880 [ '..' SilentConstExpression ]
4882 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4887 static void SilentComponentElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4889 SilentConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4890 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
4892 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4893 SilentConstExpression (stopset0
, stopset1
, stopset2
);
4899 SilentComponentValue := SilentComponentElement [
4900 'BY' SilentConstExpression ]
4902 first symbols:attributetok, lcbratok, identtok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
4907 static void SilentComponentValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4909 SilentComponentElement (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
))), stopset2
);
4910 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
4912 Expect (mcReserved_bytok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4913 SilentConstExpression (stopset0
, stopset1
, stopset2
);
4919 SilentArraySetRecordValue := SilentComponentValue
4920 { ',' SilentComponentValue }
4922 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
4927 static void SilentArraySetRecordValue (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4929 SilentComponentValue (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4930 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
4932 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
4933 SilentComponentValue (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4940 SilentConstructor := '{' [ SilentArraySetRecordValue ]
4943 first symbols:lcbratok
4948 static void SilentConstructor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4950 Expect (mcReserved_lcbratok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
4951 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))))) != 0))))
4953 SilentArraySetRecordValue (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rcbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4955 Expect (mcReserved_rcbratok
, stopset0
, stopset1
, stopset2
);
4960 SilentConstSetOrQualidentOrFunction := SilentConstructor |
4962 [ SilentConstructor |
4963 SilentActualParameters ]
4965 first symbols:identtok, lcbratok
4970 static void SilentConstSetOrQualidentOrFunction (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
4972 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
4974 SilentConstructor (stopset0
, stopset1
, stopset2
);
4976 else if (mcLexBuf_currenttoken
== mcReserved_identtok
)
4978 /* avoid dangling else. */
4979 Qualident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lcbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
4980 if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))))) != 0)))
4982 /* avoid gcc warning by using compound statement even if not strictly necessary. */
4983 /* seen optional [ | ] expression */
4984 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
4986 SilentConstructor (stopset0
, stopset1
, stopset2
);
4988 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
4990 /* avoid dangling else. */
4991 SilentActualParameters (stopset0
, stopset1
, stopset2
);
4995 /* avoid dangling else. */
4996 ErrorArray ((const char *) "expecting one of: ( {", 21);
4999 /* end of optional [ | ] expression */
5003 /* avoid dangling else. */
5004 ErrorArray ((const char *) "expecting one of: identifier {", 30);
5010 SilentElement := SilentConstExpression [ '..' SilentConstExpression ]
5012 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5017 static void SilentElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5019 SilentConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5020 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
5022 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
5023 SilentConstExpression (stopset0
, stopset1
, stopset2
);
5029 SilentActualParameters := '(' [ SilentExpList ]
5032 first symbols:lparatok
5037 static void SilentActualParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5039 Expect (mcReserved_lparatok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
5040 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))))) != 0))))
5042 SilentExpList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5044 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
5049 SilentExpList := SilentConstExpression { ',' SilentConstExpression }
5051 first symbols:stringtok, identtok, lcbratok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
5056 static void SilentExpList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5058 SilentConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5059 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5061 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
5062 SilentConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5069 SetType := ( 'SET' | 'PACKEDSET' ) 'OF' SimpleType
5071 first symbols:oftok, packedsettok, settok
5076 static void SetType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5078 if (mcLexBuf_currenttoken
== mcReserved_settok
)
5080 Expect (mcReserved_settok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
5082 else if (mcLexBuf_currenttoken
== mcReserved_packedsettok
)
5084 /* avoid dangling else. */
5085 Expect (mcReserved_packedsettok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
5089 /* avoid dangling else. */
5090 ErrorArray ((const char *) "expecting one of: PACKEDSET SET", 31);
5092 Expect (mcReserved_oftok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5093 SimpleType (stopset0
, stopset1
, stopset2
);
5098 PointerType := 'POINTER' 'TO' Type
5100 first symbols:pointertok
5105 static void PointerType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5107 Expect (mcReserved_pointertok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_totok
-mcReserved_recordtok
))));
5108 Expect (mcReserved_totok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5109 Type (stopset0
, stopset1
, stopset2
);
5114 ProcedureType := 'PROCEDURE' [ FormalTypeList ]
5116 first symbols:proceduretok
5121 static void ProcedureType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5123 Expect (mcReserved_proceduretok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5124 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5126 FormalTypeList (stopset0
, stopset1
, stopset2
);
5132 FormalTypeList := '(' ( ')' FormalReturn |
5133 ProcedureParameters ')'
5136 first symbols:lparatok
5141 static void FormalTypeList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5143 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5144 if (mcLexBuf_currenttoken
== mcReserved_rparatok
)
5146 Expect (mcReserved_rparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5147 FormalReturn (stopset0
, stopset1
, stopset2
);
5149 else if ((mcLexBuf_currenttoken
== mcReserved_arraytok
) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5151 /* avoid dangling else. */
5152 ProcedureParameters (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5153 Expect (mcReserved_rparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5154 FormalReturn (stopset0
, stopset1
, stopset2
);
5158 /* avoid dangling else. */
5159 ErrorArray ((const char *) "expecting one of: VAR ... ARRAY identifier )", 44);
5165 FormalReturn := [ ':' OptReturnType ]
5167 first symbols:colontok
5172 static void FormalReturn (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5174 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
5176 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5177 OptReturnType (stopset0
, stopset1
, stopset2
);
5183 OptReturnType := '[' Qualident ']' |
5186 first symbols:identtok, lsbratok
5191 static void OptReturnType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5193 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5195 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5196 Qualident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5197 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5199 else if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5201 /* avoid dangling else. */
5202 Qualident (stopset0
, stopset1
, stopset2
);
5206 /* avoid dangling else. */
5207 ErrorArray ((const char *) "expecting one of: identifier [", 30);
5213 ProcedureParameters := ProcedureParameter { ','
5214 ProcedureParameter }
5216 first symbols:identtok, arraytok, periodperiodperiodtok, vartok
5221 static void ProcedureParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5223 ProcedureParameter (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5224 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5226 Expect (mcReserved_commatok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5227 ProcedureParameter (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5234 ProcedureParameter := '...' | 'VAR' FormalType |
5237 first symbols:arraytok, identtok, vartok, periodperiodperiodtok
5242 static void ProcedureParameter (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5244 if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
5246 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
5248 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
5250 /* avoid dangling else. */
5251 Expect (mcReserved_vartok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5252 FormalType (stopset0
, stopset1
, stopset2
);
5254 else if ((mcLexBuf_currenttoken
== mcReserved_arraytok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
5256 /* avoid dangling else. */
5257 FormalType (stopset0
, stopset1
, stopset2
);
5261 /* avoid dangling else. */
5262 ErrorArray ((const char *) "expecting one of: ARRAY identifier VAR ...", 42);
5268 VarIdent := Ident [ '[' ConstExpression ']' ]
5270 first symbols:identtok
5275 static void VarIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5277 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5278 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5280 Expect (mcReserved_lsbratok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
5281 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5282 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5288 VarIdentList := VarIdent { ',' VarIdent }
5290 first symbols:identtok
5295 static void VarIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5297 VarIdent (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5298 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5300 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5301 VarIdent (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5308 VariableDeclaration := VarIdentList ':' Type Alignment
5310 first symbols:identtok
5315 static void VariableDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5317 VarIdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5318 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5319 Type (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5320 Alignment (stopset0
, stopset1
, stopset2
);
5325 DefVarIdent := Ident [ '[' ConstExpression ']' ]
5327 first symbols:identtok
5332 static void DefVarIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5334 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5335 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5337 Expect (mcReserved_lsbratok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
5338 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5339 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5345 DefVarIdentList := DefVarIdent { ',' DefVarIdent }
5347 first symbols:identtok
5352 static void DefVarIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5354 DefVarIdent (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5355 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5357 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5358 DefVarIdent (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5365 DefVariableDeclaration :=
5367 DefVarIdentList ':' Type
5370 first symbols:identtok
5375 static void DefVariableDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5377 typeDes
= static_cast<decl_node
> (NULL
);
5378 DefVarIdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5379 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5380 Type (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5381 Alignment (stopset0
, stopset1
, stopset2
);
5386 Designator := Qualident { SubDesignator }
5388 first symbols:identtok
5393 static void Designator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5395 Qualident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5396 while ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))))) != 0)))
5398 SubDesignator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5405 SubDesignator := '.' Ident | '[' ArrayExpList ']' |
5408 first symbols:uparrowtok, lsbratok, periodtok
5413 static void SubDesignator (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5415 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
5417 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5418 Ident (stopset0
, stopset1
, stopset2
);
5420 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
5422 /* avoid dangling else. */
5423 Expect (mcReserved_lsbratok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5424 ArrayExpList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5425 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
5427 else if (mcLexBuf_currenttoken
== mcReserved_uparrowtok
)
5429 /* avoid dangling else. */
5430 Expect (mcReserved_uparrowtok
, stopset0
, stopset1
, stopset2
);
5434 /* avoid dangling else. */
5435 ErrorArray ((const char *) "expecting one of: ^ [ .", 23);
5441 ArrayExpList := Expression { ',' Expression }
5443 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5448 static void ArrayExpList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5450 Expression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5451 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5453 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5454 Expression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5461 ExpList := Expression { ',' Expression }
5463 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5468 static void ExpList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5470 Expression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5471 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
5473 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5474 Expression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5481 Expression := SimpleExpression [ Relation SimpleExpression ]
5483 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5488 static void Expression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5490 SimpleExpression (stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_intok
-mcReserved_arraytok
))), stopset2
);
5491 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
))
5493 Relation (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5494 SimpleExpression (stopset0
, stopset1
, stopset2
);
5500 SimpleExpression := UnaryOrTerm { AddOperator Term }
5502 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok, plustok, minustok
5507 static void SimpleExpression (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5509 UnaryOrTerm (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
5510 while (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_ortok
))
5512 AddOperator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5513 Term (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_ortok
-mcReserved_arraytok
))), stopset2
);
5520 UnaryOrTerm := '+' Term | '-' Term |
5523 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok, minustok, plustok
5528 static void UnaryOrTerm (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5530 if (mcLexBuf_currenttoken
== mcReserved_plustok
)
5532 Expect (mcReserved_plustok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5533 Term (stopset0
, stopset1
, stopset2
);
5535 else if (mcLexBuf_currenttoken
== mcReserved_minustok
)
5537 /* avoid dangling else. */
5538 Expect (mcReserved_minustok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5539 Term (stopset0
, stopset1
, stopset2
);
5541 else if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5543 /* avoid dangling else. */
5544 Term (stopset0
, stopset1
, stopset2
);
5548 /* avoid dangling else. */
5549 ErrorArray ((const char *) "expecting one of: NOT ( string integer number real number identifier { - +", 74);
5555 Term := Factor { MulOperator Factor }
5557 first symbols:lcbratok, identtok, realtok, integertok, stringtok, lparatok, nottok
5562 static void Term (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5564 Factor (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ambersandtok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_timestok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_modtok
-mcReserved_arraytok
)) | (1 << (mcReserved_divtok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
5565 while ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))))) != 0)))) || (mcLexBuf_currenttoken
== mcReserved_remtok
))
5567 MulOperator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5568 Factor (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_timestok
-mcReserved_eoftok
)) | (1 << (mcReserved_dividetok
-mcReserved_eoftok
)) | (1 << (mcReserved_andtok
-mcReserved_eoftok
)) | (1 << (mcReserved_ambersandtok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_divtok
-mcReserved_arraytok
)) | (1 << (mcReserved_modtok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_remtok
-mcReserved_recordtok
))));
5575 Factor := Number | string | SetOrDesignatorOrFunction |
5576 '(' Expression ')' |
5577 'NOT' ( Factor | ConstAttribute )
5579 first symbols:identtok, lcbratok, nottok, lparatok, stringtok, integertok, realtok
5584 static void Factor (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5586 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
))))) != 0)))
5588 Number (stopset0
, stopset1
, stopset2
);
5590 else if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
5592 /* avoid dangling else. */
5593 string (stopset0
, stopset1
, stopset2
);
5595 else if ((mcLexBuf_currenttoken
== mcReserved_lcbratok
) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
5597 /* avoid dangling else. */
5598 SetOrDesignatorOrFunction (stopset0
, stopset1
, stopset2
);
5600 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5602 /* avoid dangling else. */
5603 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5604 Expression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5605 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
5607 else if (mcLexBuf_currenttoken
== mcReserved_nottok
)
5609 /* avoid dangling else. */
5610 Expect (mcReserved_nottok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_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
))));
5611 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5613 Factor (stopset0
, stopset1
, stopset2
);
5615 else if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
5617 /* avoid dangling else. */
5618 ConstAttribute (stopset0
, stopset1
, stopset2
);
5622 /* avoid dangling else. */
5623 ErrorArray ((const char *) "expecting one of: __ATTRIBUTE__ real number integer number string ( NOT { identifier", 84);
5628 /* avoid dangling else. */
5629 ErrorArray ((const char *) "expecting one of: NOT ( identifier { string integer number real number", 70);
5635 SetOrDesignatorOrFunction := Qualident [ Constructor |
5637 [ ActualParameters ] ] |
5640 first symbols:lcbratok, identtok
5645 static void SetOrDesignatorOrFunction (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5647 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5649 /* avoid dangling else. */
5650 Qualident (stopset0
|(mcp2_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
);
5651 if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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)))
5653 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5654 /* seen optional [ | ] expression */
5655 if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
5657 Constructor (stopset0
, stopset1
, stopset2
);
5659 else if ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_periodtok
-mcReserved_eoftok
))))) != 0)))
5661 /* avoid dangling else. */
5662 SimpleDes (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5663 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5665 ActualParameters (stopset0
, stopset1
, stopset2
);
5670 /* avoid dangling else. */
5671 ErrorArray ((const char *) "expecting one of: ( ^ [ . {", 27);
5674 /* end of optional [ | ] expression */
5676 else if (mcLexBuf_currenttoken
== mcReserved_lcbratok
)
5678 /* avoid dangling else. */
5679 Constructor (stopset0
, stopset1
, stopset2
);
5683 /* avoid dangling else. */
5684 ErrorArray ((const char *) "expecting one of: { identifier", 30);
5690 SimpleDes := { SubDesignator }
5692 first symbols:periodtok, lsbratok, uparrowtok
5697 static void SimpleDes (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5699 while ((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))))) != 0)))
5701 SubDesignator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
)) | (1 << (mcReserved_uparrowtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5708 ActualParameters := '(' [ ExpList ] ')'
5710 first symbols:lparatok
5715 static void ActualParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5717 Expect (mcReserved_lparatok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5718 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5720 ExpList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5722 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
5727 ExitStatement := 'EXIT'
5729 first symbols:exittok
5734 static void ExitStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5736 Expect (mcReserved_exittok
, stopset0
, stopset1
, stopset2
);
5741 ReturnStatement := 'RETURN' [ Expression ]
5743 first symbols:returntok
5748 static void ReturnStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5750 Expect (mcReserved_returntok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5751 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
5753 Expression (stopset0
, stopset1
, stopset2
);
5759 Statement := [ AssignmentOrProcedureCall |
5760 IfStatement | CaseStatement |
5763 LoopStatement | ForStatement |
5764 WithStatement | AsmStatement |
5765 ExitStatement | ReturnStatement |
5768 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok
5773 static void Statement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5775 if ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_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
)) & ((mcp2_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))))
5777 /* avoid gcc warning by using compound statement even if not strictly necessary. */
5778 /* seen optional [ | ] expression */
5779 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
5781 AssignmentOrProcedureCall (stopset0
, stopset1
, stopset2
);
5783 else if (mcLexBuf_currenttoken
== mcReserved_iftok
)
5785 /* avoid dangling else. */
5786 IfStatement (stopset0
, stopset1
, stopset2
);
5788 else if (mcLexBuf_currenttoken
== mcReserved_casetok
)
5790 /* avoid dangling else. */
5791 CaseStatement (stopset0
, stopset1
, stopset2
);
5793 else if (mcLexBuf_currenttoken
== mcReserved_whiletok
)
5795 /* avoid dangling else. */
5796 WhileStatement (stopset0
, stopset1
, stopset2
);
5798 else if (mcLexBuf_currenttoken
== mcReserved_repeattok
)
5800 /* avoid dangling else. */
5801 RepeatStatement (stopset0
, stopset1
, stopset2
);
5803 else if (mcLexBuf_currenttoken
== mcReserved_looptok
)
5805 /* avoid dangling else. */
5806 LoopStatement (stopset0
, stopset1
, stopset2
);
5808 else if (mcLexBuf_currenttoken
== mcReserved_fortok
)
5810 /* avoid dangling else. */
5811 ForStatement (stopset0
, stopset1
, stopset2
);
5813 else if (mcLexBuf_currenttoken
== mcReserved_withtok
)
5815 /* avoid dangling else. */
5816 WithStatement (stopset0
, stopset1
, stopset2
);
5818 else if (mcLexBuf_currenttoken
== mcReserved_asmtok
)
5820 /* avoid dangling else. */
5821 AsmStatement (stopset0
, stopset1
, stopset2
);
5823 else if (mcLexBuf_currenttoken
== mcReserved_exittok
)
5825 /* avoid dangling else. */
5826 ExitStatement (stopset0
, stopset1
, stopset2
);
5828 else if (mcLexBuf_currenttoken
== mcReserved_returntok
)
5830 /* avoid dangling else. */
5831 ReturnStatement (stopset0
, stopset1
, stopset2
);
5833 else if (mcLexBuf_currenttoken
== mcReserved_retrytok
)
5835 /* avoid dangling else. */
5836 RetryStatement (stopset0
, stopset1
, stopset2
);
5840 /* avoid dangling else. */
5841 ErrorArray ((const char *) "expecting one of: RETRY RETURN EXIT ASM WITH FOR LOOP REPEAT WHILE CASE IF identifier", 85);
5844 /* end of optional [ | ] expression */
5849 RetryStatement := 'RETRY'
5851 first symbols:retrytok
5856 static void RetryStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5858 Expect (mcReserved_retrytok
, stopset0
, stopset1
, stopset2
);
5863 AssignmentOrProcedureCall := Designator ( ':=' Expression |
5869 first symbols:identtok
5874 static void AssignmentOrProcedureCall (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5876 Designator (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_becomestok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5877 if (mcLexBuf_currenttoken
== mcReserved_becomestok
)
5879 Expect (mcReserved_becomestok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5880 Expression (stopset0
, stopset1
, stopset2
);
5882 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
5884 /* avoid dangling else. */
5885 ActualParameters (stopset0
, stopset1
, stopset2
);
5892 StatementSequence := Statement { ';' Statement }
5894 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok
5899 static void StatementSequence (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5901 Statement (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5902 while (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
5904 Expect (mcReserved_semicolontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
5905 Statement (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
5912 IfStatement := 'IF' Expression 'THEN' StatementSequence
5913 { 'ELSIF' Expression 'THEN' StatementSequence }
5914 [ 'ELSE' StatementSequence ] 'END'
5921 static void IfStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5923 Expect (mcReserved_iftok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5924 Expression (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_thentok
-mcReserved_recordtok
))));
5925 Expect (mcReserved_thentok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
5926 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_elsiftok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5927 while (mcLexBuf_currenttoken
== mcReserved_elsiftok
)
5929 Expect (mcReserved_elsiftok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5930 Expression (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_thentok
-mcReserved_recordtok
))));
5931 Expect (mcReserved_thentok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
5932 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsiftok
-mcReserved_arraytok
))), stopset2
);
5935 if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
5937 Expect (mcReserved_elsetok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
5938 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5940 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5945 CaseStatement := 'CASE' Expression 'OF' Case { '|'
5949 first symbols:casetok
5954 static void CaseStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5956 Expect (mcReserved_casetok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
5957 Expression (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
5958 Expect (mcReserved_oftok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
5959 Case (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5960 while (mcLexBuf_currenttoken
== mcReserved_bartok
)
5962 Expect (mcReserved_bartok
, stopset0
|(mcp2_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
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
)) | (1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
5963 Case (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_bartok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_elsetok
-mcReserved_arraytok
))), stopset2
);
5966 CaseEndStatement (stopset0
, stopset1
, stopset2
);
5971 CaseEndStatement := 'END' | 'ELSE' StatementSequence
5974 first symbols:elsetok, endtok
5979 static void CaseEndStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
5981 if (mcLexBuf_currenttoken
== mcReserved_endtok
)
5983 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5985 else if (mcLexBuf_currenttoken
== mcReserved_elsetok
)
5987 /* avoid dangling else. */
5988 Expect (mcReserved_elsetok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
5989 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
5990 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
5994 /* avoid dangling else. */
5995 ErrorArray ((const char *) "expecting one of: ELSE END", 26);
6001 Case := [ CaseLabelList ':' StatementSequence ]
6003 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6008 static void Case (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6010 if ((((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))))) != 0))))
6012 CaseLabelList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6013 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6014 StatementSequence (stopset0
, stopset1
, stopset2
);
6020 CaseLabelList := CaseLabels { ',' CaseLabels }
6022 first symbols:attributetok, identtok, lcbratok, stringtok, nottok, lparatok, integertok, realtok, minustok, plustok
6027 static void CaseLabelList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6029 CaseLabels (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6030 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
6032 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))));
6033 CaseLabels (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6040 CaseLabels := ConstExpression [ '..' ConstExpression ]
6042 first symbols:stringtok, lcbratok, identtok, attributetok, realtok, integertok, lparatok, nottok, plustok, minustok
6047 static void CaseLabels (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6049 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodperiodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6050 if (mcLexBuf_currenttoken
== mcReserved_periodperiodtok
)
6052 Expect (mcReserved_periodperiodtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
6053 ConstExpression (stopset0
, stopset1
, stopset2
);
6059 WhileStatement := 'WHILE' Expression 'DO' StatementSequence
6062 first symbols:whiletok
6067 static void WhileStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6069 Expect (mcReserved_whiletok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6070 Expression (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
6071 Expect (mcReserved_dotok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6072 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6073 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6078 RepeatStatement := 'REPEAT' StatementSequence 'UNTIL'
6081 first symbols:repeattok
6086 static void RepeatStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6088 Expect (mcReserved_repeattok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6089 StatementSequence (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_untiltok
-mcReserved_recordtok
))));
6090 Expect (mcReserved_untiltok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6091 Expression (stopset0
, stopset1
, stopset2
);
6096 ForStatement := 'FOR' Ident ':=' Expression 'TO'
6097 Expression [ 'BY' ConstExpression ]
6098 'DO' StatementSequence 'END'
6100 first symbols:fortok
6105 static void ForStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6107 Expect (mcReserved_fortok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6108 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_becomestok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6109 Expect (mcReserved_becomestok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6110 Expression (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_totok
-mcReserved_recordtok
))));
6111 Expect (mcReserved_totok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6112 Expression (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_bytok
-mcReserved_arraytok
)) | (1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
6113 if (mcLexBuf_currenttoken
== mcReserved_bytok
)
6115 Expect (mcReserved_bytok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
6116 ConstExpression (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
6118 Expect (mcReserved_dotok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6119 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6120 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6125 LoopStatement := 'LOOP' StatementSequence 'END'
6127 first symbols:looptok
6132 static void LoopStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6134 Expect (mcReserved_looptok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6135 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6136 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6141 WithStatement := 'WITH' Designator 'DO' StatementSequence
6144 first symbols:withtok
6149 static void WithStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6151 Expect (mcReserved_withtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6152 Designator (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_dotok
-mcReserved_arraytok
))), stopset2
);
6153 Expect (mcReserved_dotok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6154 StatementSequence (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6155 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6160 ProcedureDeclaration := ProcedureHeading ';' ProcedureBlock
6163 first symbols:proceduretok
6168 static void ProcedureDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6170 ProcedureHeading (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6171 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6172 ProcedureBlock (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6173 Ident (stopset0
, stopset1
, stopset2
);
6178 ProcedureIdent := Ident
6179 % curproc := lookupSym (curident) %
6182 first symbols:identtok
6187 static void ProcedureIdent (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6189 Ident (stopset0
, stopset1
, stopset2
);
6190 curproc
= decl_lookupSym (curident
);
6195 DefineBuiltinProcedure := [ '__ATTRIBUTE__' '__BUILTIN__'
6196 '(' '(' Ident ')' ')' |
6199 first symbols:inlinetok, attributetok
6204 static void DefineBuiltinProcedure (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6206 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
))))) != 0)))
6208 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6209 /* seen optional [ | ] expression */
6210 if (mcLexBuf_currenttoken
== mcReserved_attributetok
)
6212 Expect (mcReserved_attributetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_builtintok
-mcReserved_recordtok
))));
6213 Expect (mcReserved_builtintok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6214 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6215 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6216 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6217 Expect (mcReserved_rparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6218 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
6220 else if (mcLexBuf_currenttoken
== mcReserved_inlinetok
)
6222 /* avoid dangling else. */
6223 Expect (mcReserved_inlinetok
, stopset0
, stopset1
, stopset2
);
6227 /* avoid dangling else. */
6228 ErrorArray ((const char *) "expecting one of: __INLINE__ __ATTRIBUTE__", 42);
6231 /* end of optional [ | ] expression */
6236 ProcedureHeading := 'PROCEDURE' DefineBuiltinProcedure
6238 % enterScope (curproc) %
6239 [ FormalParameters ] AttributeNoReturn )
6241 first symbols:proceduretok
6246 static void ProcedureHeading (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6248 Expect (mcReserved_proceduretok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6249 DefineBuiltinProcedure (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6250 ProcedureIdent (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6251 decl_enterScope (curproc
);
6252 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
6254 FormalParameters (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6256 AttributeNoReturn (stopset0
, stopset1
, stopset2
);
6261 Builtin := [ '__BUILTIN__' | '__INLINE__' ]
6263 first symbols:inlinetok, builtintok
6268 static void Builtin (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6270 if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_builtintok
-mcReserved_recordtok
))))) != 0)))
6272 /* avoid gcc warning by using compound statement even if not strictly necessary. */
6273 /* seen optional [ | ] expression */
6274 if (mcLexBuf_currenttoken
== mcReserved_builtintok
)
6276 Expect (mcReserved_builtintok
, stopset0
, stopset1
, stopset2
);
6278 else if (mcLexBuf_currenttoken
== mcReserved_inlinetok
)
6280 /* avoid dangling else. */
6281 Expect (mcReserved_inlinetok
, stopset0
, stopset1
, stopset2
);
6285 /* avoid dangling else. */
6286 ErrorArray ((const char *) "expecting one of: __INLINE__ __BUILTIN__", 40);
6289 /* end of optional [ | ] expression */
6294 DefProcedureHeading := 'PROCEDURE' Builtin ( ProcedureIdent
6295 [ DefFormalParameters ]
6298 first symbols:proceduretok
6303 static void DefProcedureHeading (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6305 Expect (mcReserved_proceduretok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_inlinetok
-mcReserved_recordtok
)) | (1 << (mcReserved_builtintok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6306 Builtin (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6307 ProcedureIdent (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6308 if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
6310 DefFormalParameters (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6312 AttributeNoReturn (stopset0
, stopset1
, stopset2
);
6317 ProcedureBlock := { Declaration } [ 'BEGIN' ProcedureBlockBody ]
6322 first symbols:proceduretok, moduletok, consttok, typetok, vartok, endtok, begintok
6327 static void ProcedureBlock (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6329 while ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0))))
6331 Declaration (stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6334 if (mcLexBuf_currenttoken
== mcReserved_begintok
)
6336 Expect (mcReserved_begintok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6337 ProcedureBlockBody (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6339 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6345 Block := { Declaration } InitialBlock FinalBlock
6348 first symbols:proceduretok, moduletok, finallytok, begintok, consttok, typetok, vartok, endtok
6353 static void Block (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6355 while ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_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
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0))))
6357 Declaration (stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6360 InitialBlock (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_finallytok
-mcReserved_arraytok
))), stopset2
);
6361 FinalBlock (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
))), stopset2
);
6362 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
);
6367 InitialBlock := [ 'BEGIN' InitialBlockBody ]
6369 first symbols:begintok
6374 static void InitialBlock (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6376 if (mcLexBuf_currenttoken
== mcReserved_begintok
)
6378 Expect (mcReserved_begintok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6379 InitialBlockBody (stopset0
, stopset1
, stopset2
);
6385 FinalBlock := [ 'FINALLY' FinalBlockBody ]
6387 first symbols:finallytok
6392 static void FinalBlock (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6394 if (mcLexBuf_currenttoken
== mcReserved_finallytok
)
6396 Expect (mcReserved_finallytok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6397 FinalBlockBody (stopset0
, stopset1
, stopset2
);
6403 InitialBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6405 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6410 static void InitialBlockBody (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6412 NormalPart (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6413 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6415 Expect (mcReserved_excepttok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6416 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6422 FinalBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6424 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6429 static void FinalBlockBody (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6431 NormalPart (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6432 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6434 Expect (mcReserved_excepttok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6435 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6441 ProcedureBlockBody := NormalPart [ 'EXCEPT' ExceptionalPart ]
6443 first symbols:identtok, iftok, casetok, whiletok, repeattok, looptok, fortok, withtok, asmtok, retrytok, semicolontok, exittok, returntok, excepttok
6448 static void ProcedureBlockBody (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6450 NormalPart (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_excepttok
-mcReserved_arraytok
))), stopset2
);
6451 if (mcLexBuf_currenttoken
== mcReserved_excepttok
)
6453 Expect (mcReserved_excepttok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_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
))));
6454 ExceptionalPart (stopset0
, stopset1
, stopset2
);
6460 NormalPart := StatementSequence
6462 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6467 static void NormalPart (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6469 StatementSequence (stopset0
, stopset1
, stopset2
);
6474 ExceptionalPart := StatementSequence
6476 first symbols:retrytok, asmtok, withtok, fortok, looptok, repeattok, whiletok, casetok, iftok, identtok, returntok, exittok, semicolontok
6481 static void ExceptionalPart (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6483 StatementSequence (stopset0
, stopset1
, stopset2
);
6488 Declaration := 'CONST' { ConstantDeclaration ';' } |
6489 'TYPE' { TypeDeclaration ';' } |
6490 'VAR' { VariableDeclaration ';' } |
6491 ProcedureDeclaration ';' |
6492 ModuleDeclaration ';'
6494 first symbols:moduletok, proceduretok, vartok, typetok, consttok
6499 static void Declaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6501 if (mcLexBuf_currenttoken
== mcReserved_consttok
)
6503 Expect (mcReserved_consttok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6504 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6506 ConstantDeclaration (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6507 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6511 else if (mcLexBuf_currenttoken
== mcReserved_typetok
)
6513 /* avoid dangling else. */
6514 Expect (mcReserved_typetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6515 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6517 TypeDeclaration (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6518 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6522 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
6524 /* avoid dangling else. */
6525 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6526 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
6528 VariableDeclaration (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6529 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6533 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
6535 /* avoid dangling else. */
6536 ProcedureDeclaration (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6537 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6539 else if (mcLexBuf_currenttoken
== mcReserved_moduletok
)
6541 /* avoid dangling else. */
6542 ModuleDeclaration (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6543 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6547 /* avoid dangling else. */
6548 ErrorArray ((const char *) "expecting one of: MODULE PROCEDURE VAR TYPE CONST", 49);
6554 DefFormalParameters := '(' [ DefMultiFPSection ]
6557 first symbols:lparatok
6562 static void DefFormalParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6564 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6565 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
6567 DefMultiFPSection (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6569 Expect (mcReserved_rparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6570 FormalReturn (stopset0
, stopset1
, stopset2
);
6575 DefMultiFPSection := DefExtendedFP |
6576 FPSection [ ';' DefMultiFPSection ]
6578 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6583 static void DefMultiFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6585 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
))
6587 DefExtendedFP (stopset0
, stopset1
, stopset2
);
6589 else if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0)))
6591 /* avoid dangling else. */
6592 FPSection (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6593 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
6595 Expect (mcReserved_semicolontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6596 DefMultiFPSection (stopset0
, stopset1
, stopset2
);
6601 /* avoid dangling else. */
6602 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6608 FormalParameters := '(' [ MultiFPSection ] ')'
6611 first symbols:lparatok
6616 static void FormalParameters (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6618 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6619 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))))) != 0))))
6621 MultiFPSection (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6623 Expect (mcReserved_rparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6624 FormalReturn (stopset0
, stopset1
, stopset2
);
6629 AttributeNoReturn := [ '' ]
6631 first symbols:ldirectivetok
6636 static void AttributeNoReturn (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6638 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6640 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6641 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6642 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
6648 AttributeUnused := [ '' ]
6650 first symbols:ldirectivetok
6655 static void AttributeUnused (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6657 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6659 Expect (mcReserved_ldirectivetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6660 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rdirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6661 Expect (mcReserved_rdirectivetok
, stopset0
, stopset1
, stopset2
);
6667 MultiFPSection := ExtendedFP | FPSection [ ';'
6670 first symbols:identtok, vartok, lsbratok, periodperiodperiodtok
6675 static void MultiFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6677 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
))
6679 ExtendedFP (stopset0
, stopset1
, stopset2
);
6681 else if ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0)))
6683 /* avoid dangling else. */
6684 FPSection (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6685 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
6687 Expect (mcReserved_semicolontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_periodperiodperiodtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6688 MultiFPSection (stopset0
, stopset1
, stopset2
);
6693 /* avoid dangling else. */
6694 ErrorArray ((const char *) "expecting one of: identifier VAR ... [", 38);
6700 FPSection := NonVarFPSection |
6703 first symbols:vartok, identtok
6708 static void FPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6710 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
6712 NonVarFPSection (stopset0
, stopset1
, stopset2
);
6714 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
6716 /* avoid dangling else. */
6717 VarFPSection (stopset0
, stopset1
, stopset2
);
6721 /* avoid dangling else. */
6722 ErrorArray ((const char *) "expecting one of: VAR identifier", 32);
6728 DefExtendedFP := DefOptArg | '...'
6730 first symbols:lsbratok, periodperiodperiodtok
6735 static void DefExtendedFP (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6737 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6739 DefOptArg (stopset0
, stopset1
, stopset2
);
6741 else if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
6743 /* avoid dangling else. */
6744 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
6748 /* avoid dangling else. */
6749 ErrorArray ((const char *) "expecting one of: ... [", 23);
6755 ExtendedFP := OptArg | '...'
6757 first symbols:lsbratok, periodperiodperiodtok
6762 static void ExtendedFP (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6764 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6766 OptArg (stopset0
, stopset1
, stopset2
);
6768 else if (mcLexBuf_currenttoken
== mcReserved_periodperiodperiodtok
)
6770 /* avoid dangling else. */
6771 Expect (mcReserved_periodperiodperiodtok
, stopset0
, stopset1
, stopset2
);
6775 /* avoid dangling else. */
6776 ErrorArray ((const char *) "expecting one of: ... [", 23);
6782 VarFPSection := 'VAR' IdentList ':' FormalType [
6785 first symbols:vartok
6790 static void VarFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6792 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6793 IdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6794 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6795 FormalType (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6796 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6798 AttributeUnused (stopset0
, stopset1
, stopset2
);
6804 NonVarFPSection := IdentList ':' FormalType [ AttributeUnused ]
6806 first symbols:identtok
6811 static void NonVarFPSection (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6813 IdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6814 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6815 FormalType (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6816 if (mcLexBuf_currenttoken
== mcReserved_ldirectivetok
)
6818 AttributeUnused (stopset0
, stopset1
, stopset2
);
6824 OptArg := '[' Ident ':' FormalType [ '=' ConstExpression ]
6827 first symbols:lsbratok
6832 static void OptArg (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6834 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6835 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6836 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6837 FormalType (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
)) | (1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6838 if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
6840 Expect (mcReserved_equaltok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
6841 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6843 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6848 DefOptArg := '[' Ident ':' FormalType '=' ConstExpression
6851 first symbols:lsbratok
6856 static void DefOptArg (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6858 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6859 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6860 Expect (mcReserved_colontok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6861 FormalType (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6862 Expect (mcReserved_equaltok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
6863 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6864 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6869 FormalType := { 'ARRAY' 'OF' } Qualident
6871 first symbols:identtok, arraytok
6876 static void FormalType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6878 while (mcLexBuf_currenttoken
== mcReserved_arraytok
)
6880 Expect (mcReserved_arraytok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_oftok
-mcReserved_arraytok
))), stopset2
);
6881 Expect (mcReserved_oftok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_arraytok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6884 Qualident (stopset0
, stopset1
, stopset2
);
6889 ModuleDeclaration := 'MODULE' Ident [ Priority ]
6890 ';' { Import } [ Export ]
6893 first symbols:moduletok
6898 static void ModuleDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6900 Expect (mcReserved_moduletok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6901 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6902 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
6904 Priority (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6906 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
6907 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
6909 Import (stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
6912 if (mcLexBuf_currenttoken
== mcReserved_exporttok
)
6914 Export (stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
6916 Block (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6917 Ident (stopset0
, stopset1
, stopset2
);
6922 Priority := '[' ConstExpression ']'
6924 first symbols:lsbratok
6929 static void Priority (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6931 Expect (mcReserved_lsbratok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
6932 ConstExpression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6933 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
6938 Export := 'EXPORT' ( 'QUALIFIED' IdentList |
6939 'UNQUALIFIED' IdentList |
6942 first symbols:exporttok
6947 static void Export (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6949 Expect (mcReserved_exporttok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_qualifiedtok
-mcReserved_arraytok
)) | (1 << (mcReserved_unqualifiedtok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6950 if (mcLexBuf_currenttoken
== mcReserved_qualifiedtok
)
6952 Expect (mcReserved_qualifiedtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6953 IdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6955 else if (mcLexBuf_currenttoken
== mcReserved_unqualifiedtok
)
6957 /* avoid dangling else. */
6958 Expect (mcReserved_unqualifiedtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6959 IdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6961 else if (mcLexBuf_currenttoken
== mcReserved_identtok
)
6963 /* avoid dangling else. */
6964 IdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6968 /* avoid dangling else. */
6969 ErrorArray ((const char *) "expecting one of: identifier UNQUALIFIED QUALIFIED", 50);
6971 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6976 FromImport := 'FROM' Ident 'IMPORT' IdentList ';'
6978 first symbols:fromtok
6983 static void FromImport (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
6985 Expect (mcReserved_fromtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6986 Ident (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_importtok
-mcReserved_arraytok
))), stopset2
);
6987 Expect (mcReserved_importtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
6988 IdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
6989 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
6994 ImportModuleList := Ident { ',' Ident }
6996 first symbols:identtok
7001 static void ImportModuleList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7003 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7004 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7006 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7007 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7014 WithoutFromImport := 'IMPORT' ImportModuleList ';'
7016 first symbols:importtok
7021 static void WithoutFromImport (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7023 Expect (mcReserved_importtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7024 ImportModuleList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7025 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
7030 Import := FromImport | WithoutFromImport
7032 first symbols:importtok, fromtok
7037 static void Import (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7039 if (mcLexBuf_currenttoken
== mcReserved_fromtok
)
7041 FromImport (stopset0
, stopset1
, stopset2
);
7043 else if (mcLexBuf_currenttoken
== mcReserved_importtok
)
7045 /* avoid dangling else. */
7046 WithoutFromImport (stopset0
, stopset1
, stopset2
);
7050 /* avoid dangling else. */
7051 ErrorArray ((const char *) "expecting one of: IMPORT FROM", 29);
7057 DefinitionModule := 'DEFINITION' 'MODULE' [ 'FOR'
7060 % curmodule := lookupDef (curident) %
7062 % enterScope (curmodule) %
7063 { Import } [ Export ] { Definition }
7065 % checkEndName (curmodule, curident, 'definition module') %
7069 % setEnumsComplete (curmodule) %
7072 first symbols:definitiontok
7077 static void DefinitionModule (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7079 Expect (mcReserved_definitiontok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_moduletok
-mcReserved_arraytok
))), stopset2
);
7080 Expect (mcReserved_moduletok
, stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_fortok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7081 if (mcLexBuf_currenttoken
== mcReserved_fortok
)
7083 Expect (mcReserved_fortok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7084 string (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7086 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7087 Expect (mcReserved_semicolontok
, stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_vartok
-mcReserved_recordtok
)) | (1 << (mcReserved_typetok
-mcReserved_recordtok
))));
7088 curmodule
= decl_lookupDef (curident
);
7089 decl_enterScope (curmodule
);
7090 while (((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_fromtok
-mcReserved_arraytok
)) | (1 << (mcReserved_importtok
-mcReserved_arraytok
))))) != 0)))
7092 Import (stopset0
, stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
7095 if (mcLexBuf_currenttoken
== mcReserved_exporttok
)
7097 Export (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_consttok
-mcReserved_arraytok
)) | (1 << (mcReserved_proceduretok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
7099 while ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_consttok
-mcReserved_arraytok
)) | (1 << (mcReserved_proceduretok
-mcReserved_arraytok
))))) != 0))) || ((mcLexBuf_currenttoken
>= mcReserved_recordtok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_recordtok
)) & ((mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))))) != 0))))
7101 Definition (stopset0
, stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_endtok
-mcReserved_arraytok
)) | (1 << (mcReserved_consttok
-mcReserved_arraytok
)) | (1 << (mcReserved_proceduretok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_typetok
-mcReserved_recordtok
)) | (1 << (mcReserved_vartok
-mcReserved_recordtok
))));
7104 Expect (mcReserved_endtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7105 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7106 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
);
7107 checkEndName (curmodule
, curident
, (const char *) "definition module", 17);
7109 decl_setEnumsComplete (curmodule
);
7114 DefQualident := Ident
7115 % typeExp := lookupSym (curident) %
7117 % IF NOT isDef (typeExp)
7119 ErrorArray ('the first component of this qualident must be a definition module')
7122 % typeExp := lookupInScope (typeExp, curident) ;
7125 ErrorArray ('identifier not found in definition module')
7129 first symbols:identtok
7134 static void DefQualident (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7136 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_periodtok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7137 typeExp
= decl_lookupSym (curident
);
7138 if (mcLexBuf_currenttoken
== mcReserved_periodtok
)
7140 Expect (mcReserved_periodtok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7141 if (! (decl_isDef (typeExp
)))
7143 ErrorArray ((const char *) "the first component of this qualident must be a definition module", 65);
7145 Ident (stopset0
, stopset1
, stopset2
);
7146 typeExp
= decl_lookupInScope (typeExp
, curident
);
7147 if (typeExp
== NULL
)
7149 ErrorArray ((const char *) "identifier not found in definition module", 41);
7156 DefOptSubrange := [ SubrangeType |
7158 % putType (typeDes, typeExp) %
7161 first symbols:lsbratok
7166 static void DefOptSubrange (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7168 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7170 /* avoid gcc warning by using compound statement even if not strictly necessary. */
7171 /* seen optional [ | ] expression */
7172 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7174 SubrangeType (stopset0
, stopset1
, stopset2
);
7178 decl_putType (typeDes
, typeExp
);
7181 /* end of optional [ | ] expression */
7186 DefTypeEquiv := DefQualident DefOptSubrange
7188 first symbols:identtok
7193 static void DefTypeEquiv (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7195 DefQualident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7196 DefOptSubrange (stopset0
, stopset1
, stopset2
);
7202 % VAR n, f: node ; %
7204 % n := makeEnum () %
7206 % f := makeEnumField (n, curident) %
7208 % f := makeEnumField (n, curident) %
7210 % IF typeDes # NIL THEN putType (typeDes, n) END %
7213 first symbols:identtok
7218 static void DefEnumIdentList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7223 n
= decl_makeEnum ();
7224 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7225 f
= decl_makeEnumField (n
, curident
);
7226 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7228 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7229 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7230 f
= decl_makeEnumField (n
, curident
);
7233 if (typeDes
!= NULL
)
7235 decl_putType (typeDes
, n
);
7241 DefEnumeration := '(' DefEnumIdentList ')'
7243 first symbols:lparatok
7248 static void DefEnumeration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7250 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7251 DefEnumIdentList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7252 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7257 DefSimpleType := DefTypeEquiv | DefEnumeration |
7260 first symbols:lsbratok, lparatok, identtok
7265 static void DefSimpleType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7267 if (mcLexBuf_currenttoken
== mcReserved_identtok
)
7269 DefTypeEquiv (stopset0
, stopset1
, stopset2
);
7271 else if (mcLexBuf_currenttoken
== mcReserved_lparatok
)
7273 /* avoid dangling else. */
7274 DefEnumeration (stopset0
, stopset1
, stopset2
);
7276 else if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7278 /* avoid dangling else. */
7279 SubrangeType (stopset0
, stopset1
, stopset2
);
7283 /* avoid dangling else. */
7284 ErrorArray ((const char *) "expecting one of: [ ( identifier", 32);
7290 DefType := DefSimpleType | ArrayType |
7291 RecordType | SetType | PointerType |
7294 first symbols:proceduretok, pointertok, settok, packedsettok, oftok, recordtok, arraytok, identtok, lparatok, lsbratok
7299 static void DefType (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7301 if (((mcLexBuf_currenttoken
< mcReserved_arraytok
) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_eoftok
)) & ((mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_identtok
))
7303 DefSimpleType (stopset0
, stopset1
, stopset2
);
7305 else if (mcLexBuf_currenttoken
== mcReserved_arraytok
)
7307 /* avoid dangling else. */
7308 ArrayType (stopset0
, stopset1
, stopset2
);
7310 else if (mcLexBuf_currenttoken
== mcReserved_recordtok
)
7312 /* avoid dangling else. */
7313 RecordType (stopset0
, stopset1
, stopset2
);
7315 else if ((((mcLexBuf_currenttoken
>= mcReserved_arraytok
) && (mcLexBuf_currenttoken
< mcReserved_recordtok
)) && ((((1 << (mcLexBuf_currenttoken
-mcReserved_arraytok
)) & ((mcp2_SetOfStop1
) ((1 << (mcReserved_packedsettok
-mcReserved_arraytok
)) | (1 << (mcReserved_oftok
-mcReserved_arraytok
))))) != 0))) || (mcLexBuf_currenttoken
== mcReserved_settok
))
7317 /* avoid dangling else. */
7318 SetType (stopset0
, stopset1
, stopset2
);
7320 else if (mcLexBuf_currenttoken
== mcReserved_pointertok
)
7322 /* avoid dangling else. */
7323 PointerType (stopset0
, stopset1
, stopset2
);
7325 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7327 /* avoid dangling else. */
7328 ProcedureType (stopset0
, stopset1
, stopset2
);
7332 /* avoid dangling else. */
7333 ErrorArray ((const char *) "expecting one of: PROCEDURE POINTER SET PACKEDSET OF RECORD ARRAY identifier ( [", 80);
7339 DefTypeDeclaration := { Ident
7340 % typeDes := lookupSym (curident) %
7341 ( ';' | '=' DefType Alignment
7344 first symbols:identtok
7349 static void DefTypeDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7351 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7353 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
)) | (1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7354 typeDes
= decl_lookupSym (curident
);
7355 if (mcLexBuf_currenttoken
== mcReserved_semicolontok
)
7357 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7359 else if (mcLexBuf_currenttoken
== mcReserved_equaltok
)
7361 /* avoid dangling else. */
7362 Expect (mcReserved_equaltok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_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
|(mcp2_SetOfStop2
) ((1 << (mcReserved_settok
-mcReserved_recordtok
)) | (1 << (mcReserved_recordtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7363 DefType (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_ldirectivetok
-mcReserved_eoftok
)) | (1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7364 Alignment (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7365 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7369 /* avoid dangling else. */
7370 ErrorArray ((const char *) "expecting one of: = ;", 21);
7378 DefConstantDeclaration := Ident '=' ConstExpression
7380 first symbols:identtok
7385 static void DefConstantDeclaration (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7387 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_equaltok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7388 Expect (mcReserved_equaltok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_attributetok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
)) | (1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7389 ConstExpression (stopset0
, stopset1
, stopset2
);
7394 Definition := 'CONST' { DefConstantDeclaration ';' } |
7395 'TYPE' { DefTypeDeclaration } |
7396 'VAR' { DefVariableDeclaration ';' } |
7397 DefProcedureHeading ';'
7399 first symbols:proceduretok, vartok, typetok, consttok
7404 static void Definition (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7406 if (mcLexBuf_currenttoken
== mcReserved_consttok
)
7408 Expect (mcReserved_consttok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7409 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7411 DefConstantDeclaration (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7412 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7416 else if (mcLexBuf_currenttoken
== mcReserved_typetok
)
7418 /* avoid dangling else. */
7419 Expect (mcReserved_typetok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7420 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7422 DefTypeDeclaration (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7426 else if (mcLexBuf_currenttoken
== mcReserved_vartok
)
7428 /* avoid dangling else. */
7429 Expect (mcReserved_vartok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7430 while (mcLexBuf_currenttoken
== mcReserved_identtok
)
7432 DefVariableDeclaration (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7433 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7437 else if (mcLexBuf_currenttoken
== mcReserved_proceduretok
)
7439 /* avoid dangling else. */
7440 DefProcedureHeading (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_semicolontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7441 Expect (mcReserved_semicolontok
, stopset0
, stopset1
, stopset2
);
7445 /* avoid dangling else. */
7446 ErrorArray ((const char *) "expecting one of: PROCEDURE VAR TYPE CONST", 42);
7452 AsmStatement := 'ASM' [ 'VOLATILE' ] '(' AsmOperands
7455 first symbols:asmtok
7460 static void AsmStatement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7462 Expect (mcReserved_asmtok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_volatiletok
-mcReserved_recordtok
))));
7463 if (mcLexBuf_currenttoken
== mcReserved_volatiletok
)
7465 Expect (mcReserved_volatiletok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7467 Expect (mcReserved_lparatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7468 AsmOperands (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7469 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7474 AsmOperands := string [ AsmOperandSpec ]
7476 first symbols:stringtok
7481 static void AsmOperands (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7483 string (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7484 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7486 AsmOperandSpec (stopset0
, stopset1
, stopset2
);
7492 AsmOperandSpec := [ ':' AsmList [ ':' AsmList [
7495 first symbols:colontok
7500 static void AsmOperandSpec (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7502 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7504 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
)) | (1 << (mcReserved_commatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7505 AsmList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7506 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7508 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
)) | (1 << (mcReserved_commatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7509 AsmList (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_colontok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7510 if (mcLexBuf_currenttoken
== mcReserved_colontok
)
7512 Expect (mcReserved_colontok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7513 TrashList (stopset0
, stopset1
, stopset2
);
7521 AsmList := [ AsmElement ] { ',' AsmElement }
7523 first symbols:lsbratok, stringtok, commatok
7528 static void AsmList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7530 if ((mcLexBuf_currenttoken
== mcReserved_lsbratok
) || (mcLexBuf_currenttoken
== mcReserved_stringtok
))
7532 AsmElement (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7534 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7536 Expect (mcReserved_commatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7537 AsmElement (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7544 NamedOperand := '[' Ident ']'
7546 first symbols:lsbratok
7551 static void NamedOperand (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7553 Expect (mcReserved_lsbratok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7554 Ident (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rsbratok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7555 Expect (mcReserved_rsbratok
, stopset0
, stopset1
, stopset2
);
7560 AsmOperandName := [ NamedOperand ]
7562 first symbols:lsbratok
7567 static void AsmOperandName (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7569 if (mcLexBuf_currenttoken
== mcReserved_lsbratok
)
7571 NamedOperand (stopset0
, stopset1
, stopset2
);
7577 AsmElement := AsmOperandName string '(' Expression
7580 first symbols:stringtok, lsbratok
7585 static void AsmElement (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7587 AsmOperandName (stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7588 string (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_lparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7589 Expect (mcReserved_lparatok
, stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_minustok
-mcReserved_eoftok
)) | (1 << (mcReserved_plustok
-mcReserved_eoftok
)) | (1 << (mcReserved_lparatok
-mcReserved_eoftok
)) | (1 << (mcReserved_lcbratok
-mcReserved_eoftok
))), stopset1
|(mcp2_SetOfStop1
) ((1 << (mcReserved_nottok
-mcReserved_arraytok
))), stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
)) | (1 << (mcReserved_integertok
-mcReserved_recordtok
)) | (1 << (mcReserved_realtok
-mcReserved_recordtok
)) | (1 << (mcReserved_identtok
-mcReserved_recordtok
))));
7590 Expression (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_rparatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7591 Expect (mcReserved_rparatok
, stopset0
, stopset1
, stopset2
);
7596 TrashList := [ string ] { ',' string }
7598 first symbols:commatok, stringtok
7603 static void TrashList (mcp2_SetOfStop0 stopset0
, mcp2_SetOfStop1 stopset1
, mcp2_SetOfStop2 stopset2
)
7605 if (mcLexBuf_currenttoken
== mcReserved_stringtok
)
7607 string (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7609 while (mcLexBuf_currenttoken
== mcReserved_commatok
)
7611 Expect (mcReserved_commatok
, stopset0
, stopset1
, stopset2
|(mcp2_SetOfStop2
) ((1 << (mcReserved_stringtok
-mcReserved_recordtok
))));
7612 string (stopset0
|(mcp2_SetOfStop0
) ((1 << (mcReserved_commatok
-mcReserved_eoftok
))), stopset1
, stopset2
);
7619 CompilationUnit - returns TRUE if the input was correct enough to parse
7623 extern "C" bool mcp2_CompilationUnit (void)
7626 FileUnit ((mcp2_SetOfStop0
) ((1 << (mcReserved_eoftok
-mcReserved_eoftok
))), (mcp2_SetOfStop1
) 0, (mcp2_SetOfStop2
) 0);
7628 /* static analysis guarentees a RETURN statement will be used before here. */
7629 __builtin_unreachable ();
7632 extern "C" void _M2_mcp2_init (__attribute__((unused
)) int argc
, __attribute__((unused
)) char *argv
[], __attribute__((unused
)) char *envp
[])
7636 extern "C" void _M2_mcp2_fini (__attribute__((unused
)) int argc
, __attribute__((unused
)) char *argv
[], __attribute__((unused
)) char *envp
[])