home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-05-03 | 422.0 KB | 10,836 lines |
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccgrmcon.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- package MCC_Grammar_Constants is
-
- type ParserInteger is range 0..400000;
- --| range of possible values for parser's integer types (found
- --| in NYU parse tables generator output)
-
- function setGrammarSymbolCount return ParserInteger;
-
- function setActionCount return ParserInteger;
-
- function setStateCountPlusOne return ParserInteger;
-
- function setLeftHandSideCount return ParserInteger;
-
- function setRightHandSideCount return ParserInteger;
-
- end MCC_Grammar_Constants;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccptbls.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with Host_Dependencies; -- host dependent constants for the compiler.
- with MCC_Grammar_Constants; -- constants generated by parser generator
- use MCC_Grammar_Constants;
-
- package MCC_ParseTables is --| Table output of parse tables generator
-
- --| Overview
- --|
- --| This package contains the constants and tables generated by running
- --| the LALR(1) parse tables generator on the Ada Grammar.
- --| It also contains subprograms to access values in the more complex
- --| tables, that could have their structures tuned later.
- --|
-
- --| Tuning
- --|
- --| --------------------------------------------------------------
- --|
- --| The Parser Generator has two options that effect the speed of
- --| compilation:
- --|
- --| NODEFAULT : Eliminates the default reductions.
- --| This also would improve error recovery.
- --| Note that the table DefaultMap is still produced, though it
- --| will never be referenced.
- --| Thus, there need be no change to the code
- --| in ParserUtilities.GetAction .
- --|
- --| LF : This changes the load factor used to pack and size the
- --| ActionTables. It can range between 0 and 100.
- --| A low LF means fewer collisions and faster parsing.
- --| A high LF means more collisions and slower parsing.
- --| ----------------------------------------------------------------
- --|
- --| The types GrammarSymbolRecord and FollowSymbolRecord
- --| have a lot of unused space. The space/time tradeoff of
- --| converting these into discriminated records or another
- --| alternative representation, could be investigated.
- --| This investigation should take the elaboration time
- --| of the initializing aggregates into account.
- --|
- --| ----------------------------------------------------------------
- --|
- --| The Action Tables might be made made smaller by a restructuring of
- --| the grammar.
- --| For example: Have a rule for the token sequence:
- --|
- --| BEGIN seq_Of_Statements [EXCP..]
- --|
- --| ----------------------------------------------------------------
- --|
- --| The ParserGenerator might be modified along with
- --| ParseTables.GetAction to produce smaller tables.
- --| See:
- --|
- --| "Combined Actions to Reduce LR-Parsertables"
- --| by K.Groneing. SIGPLAN Notices, Volume 19, Number 3, March 1984.
- --|
- --| ----------------------------------------------------------------
- --|
-
- --| Notes
- --|
- --| Abbreviations Used
- --|
- --| Rep : Representation
- --|
-
- --| RUN-TIME INPUT OF NYU LALR GENERATED TABLES AND CONSTANTS
- --|
- --|
- --| followed by the current correct value of the
- --| constant supplied by the NYU LALR Parser Generator:
- --|
- --| GrammarSymbolCount
- --| LeftHandSideCount
- --| RightHandSideCount
- --| ActionTableOneLength
- --| ActionTableTwoLength
- --| DefaultMapLength
- --| InSymbolMapLength
- --| FollowMapLength
- --| StateCountPlusOne
- --| GrammarSymbolCountPlusOne
- --| ActionCount
- --| ActionTableSize
- --|
- --| in each of the eight declarations:
- --|
- --| GrammarSymbolTable
- --| LeftHandSide
- --| RightHandSide
- --| ActionTableOne
- --| ActionTableTwo
- --| DefaultMap
- --| InSymbolMap
- --| FollowSymbolMap
- --|
-
- package GC renames MCC_Grammar_Constants;
-
- ------------------------------------------------------------------
- -- Common Declarations for Action_Token_Map
- ------------------------------------------------------------------
-
- Max_Action_Token_Count : constant := 48;
- --| This constant may need to be made larger if the grammar
- --| ever gets too large.
- --| It could be automatically generated.
-
-
- ------------------------------------------------------------------
- -- Common Declarations for Shift_State_Map
- ------------------------------------------------------------------
-
- Max_Shift_State_Count : constant := 90;
- --| This constant may need to be made larger if the grammar
- --| ever gets too large.
- --| It could be automatically generated.
-
-
-
- subtype ParserStringRangePlusZeroCommon is natural
- range 0..Host_Dependencies.MaxColumn;
- --| Parser's string should never be greater than a source line
- --| worth of text.
-
- subtype GrammarSymbolRepRangePlusZeroCommon is
- ParserStringRangePlusZeroCommon range 0..57;
-
- subtype FollowSymbolRangeCommon is GC.ParserInteger range 1..50;
-
- ------------------------------------------------------------------
- -- Declarations Global to Package ParseTables
- ------------------------------------------------------------------
-
- subtype PositiveParserInteger is GC.ParserInteger range
- 1..GC.ParserInteger'last ;
-
- subtype ParserStringRangePlusZero is
- ParserStringRangePlusZeroCommon;
- --| Parser's string should never be greater than a source line
- --| worth of text.
-
- ----------------------------------------------------------------------
- -- The first constant used to define the Parse Tables
- ----------------------------------------------------------------------
-
- GrammarSymbolCount : constant GC.ParserInteger :=
- GC.setGrammarSymbolCount ;
- --| Number of terminals and nonterminals in the Ada grammar
- --| rules input to the parse tables generator
-
- subtype GrammarSymbolRange is
- GC.ParserInteger range 1..GrammarSymbolCount;
- --| valid range of values for grammar symbols
-
- ------------------------------------------------------------------
- -- Parser Table Generated Token Values for Terminals
- ------------------------------------------------------------------
-
- -- WARNING: need to be checked after each Parser Generator Run.
- -- This could be made part of the ParseTables/ErrorParseTables
- -- generator program(s) at some point.
-
- ------------------------------------------------------------------
- -- Special Empty Terminal
- ------------------------------------------------------------------
-
- Empty_TokenValue : constant GrammarSymbolRange := 1;
-
- ------------------------------------------------------------------
- -- Reserved Words
- ------------------------------------------------------------------
-
- AbortTokenValue : constant GrammarSymbolRange := 2;
- AbsTokenValue : constant GrammarSymbolRange := 3;
- AcceptTokenValue : constant GrammarSymbolRange := 4;
- AccessTokenValue : constant GrammarSymbolRange := 5;
- AllTokenValue : constant GrammarSymbolRange := 6;
- AndTokenValue : constant GrammarSymbolRange := 7;
- ArrayTokenValue : constant GrammarSymbolRange := 8;
- AtTokenValue : constant GrammarSymbolRange := 9;
- BeginTokenValue : constant GrammarSymbolRange := 10;
- BodyTokenValue : constant GrammarSymbolRange := 11;
- CaseTokenValue : constant GrammarSymbolRange := 12;
- ConstantTokenValue : constant GrammarSymbolRange := 13;
- DeclareTokenValue : constant GrammarSymbolRange := 14;
- DelayTokenValue : constant GrammarSymbolRange := 15;
- DeltaTokenValue : constant GrammarSymbolRange := 16;
- DigitsTokenValue : constant GrammarSymbolRange := 17;
- DoTokenValue : constant GrammarSymbolRange := 18;
- ElseTokenValue : constant GrammarSymbolRange := 19;
- ElsifTokenValue : constant GrammarSymbolRange := 20;
- EndTokenValue : constant GrammarSymbolRange := 21;
- EntryTokenValue : constant GrammarSymbolRange := 22;
- ExceptionTokenValue : constant GrammarSymbolRange := 23;
- ExitTokenValue : constant GrammarSymbolRange := 24;
- ForTokenValue : constant GrammarSymbolRange := 25;
- FunctionTokenValue : constant GrammarSymbolRange := 26;
- GenericTokenValue : constant GrammarSymbolRange := 27;
- GotoTokenValue : constant GrammarSymbolRange := 28;
- IfTokenValue : constant GrammarSymbolRange := 29;
- InTokenValue : constant GrammarSymbolRange := 30;
- IsTokenValue : constant GrammarSymbolRange := 31;
- LimitedTokenValue : constant GrammarSymbolRange := 32;
- LoopTokenValue : constant GrammarSymbolRange := 33;
- ModTokenValue : constant GrammarSymbolRange := 34;
- NewTokenValue : constant GrammarSymbolRange := 35;
- NotTokenValue : constant GrammarSymbolRange := 36;
- NullTokenValue : constant GrammarSymbolRange := 37;
- OfTokenValue : constant GrammarSymbolRange := 38;
- OrTokenValue : constant GrammarSymbolRange := 39;
- OthersTokenValue : constant GrammarSymbolRange := 40;
- OutTokenValue : constant GrammarSymbolRange := 41;
- PackageTokenValue : constant GrammarSymbolRange := 42;
- PragmaTokenValue : constant GrammarSymbolRange := 43;
- PrivateTokenValue : constant GrammarSymbolRange := 44;
- ProcedureTokenValue : constant GrammarSymbolRange := 45;
- RaiseTokenValue : constant GrammarSymbolRange := 46;
- RangeTokenValue : constant GrammarSymbolRange := 47;
- RecordTokenValue : constant GrammarSymbolRange := 48;
- RemTokenValue : constant GrammarSymbolRange := 49;
- RenamesTokenValue : constant GrammarSymbolRange := 50;
- ReturnTokenValue : constant GrammarSymbolRange := 51;
- ReverseTokenValue : constant GrammarSymbolRange := 52;
- SelectTokenValue : constant GrammarSymbolRange := 53;
- SeparateTokenValue : constant GrammarSymbolRange := 54;
- SubtypeTokenValue : constant GrammarSymbolRange := 55;
- TaskTokenValue : constant GrammarSymbolRange := 56;
- TerminateTokenValue : constant GrammarSymbolRange := 57;
- ThenTokenValue : constant GrammarSymbolRange := 58;
- TypeTokenValue : constant GrammarSymbolRange := 59;
- UseTokenValue : constant GrammarSymbolRange := 60;
- WhenTokenValue : constant GrammarSymbolRange := 61;
- WhileTokenValue : constant GrammarSymbolRange := 62;
- WithTokenValue : constant GrammarSymbolRange := 63;
- XorTokenValue : constant GrammarSymbolRange := 64;
-
- ------------------------------------------------------------------
- -- Identifier and Literals
- ------------------------------------------------------------------
-
- IdentifierTokenValue : constant GrammarSymbolRange := 65;
- NumericTokenValue : constant GrammarSymbolRange := 66;
- StringTokenValue : constant GrammarSymbolRange := 67;
- CharacterTokenValue : constant GrammarSymbolRange := 68;
-
- ------------------------------------------------------------------
- -- Single Delimiters
- ------------------------------------------------------------------
-
- Ampersand_TokenValue : constant GrammarSymbolRange := 69;
- Apostrophe_TokenValue : constant GrammarSymbolRange := 70;
- LeftParen_TokenValue : constant GrammarSymbolRange := 71;
- RightParen_TokenValue : constant GrammarSymbolRange := 72;
- Star_TokenValue : constant GrammarSymbolRange := 73;
- Plus_TokenValue : constant GrammarSymbolRange := 74;
- Comma_TokenValue : constant GrammarSymbolRange := 75;
- Minus_TokenValue : constant GrammarSymbolRange := 76;
- Dot_TokenValue : constant GrammarSymbolRange := 77;
- Slash_TokenValue : constant GrammarSymbolRange := 78;
- Colon_TokenValue : constant GrammarSymbolRange := 79;
- SemiColon_TokenValue : constant GrammarSymbolRange := 80;
- LT_TokenValue : constant GrammarSymbolRange := 81;
- EQ_TokenValue : constant GrammarSymbolRange := 82;
- GT_TokenValue : constant GrammarSymbolRange := 83;
- Bar_TokenValue : constant GrammarSymbolRange := 84;
-
-
- ------------------------------------------------------------------
- -- Double Delimiters
- ------------------------------------------------------------------
-
- EQGT_TokenValue : constant GrammarSymbolRange := 85;
- DotDot_TokenValue : constant GrammarSymbolRange := 86;
- StarStar_TokenValue : constant GrammarSymbolRange := 87;
- ColonEQ_TokenValue : constant GrammarSymbolRange := 88;
- SlashEQ_TokenValue : constant GrammarSymbolRange := 89;
- GTEQ_TokenValue : constant GrammarSymbolRange := 90;
- LTEQ_TokenValue : constant GrammarSymbolRange := 91;
- LTLT_TokenValue : constant GrammarSymbolRange := 92;
- GTGT_TokenValue : constant GrammarSymbolRange := 93;
- LTGT_TokenValue : constant GrammarSymbolRange := 94;
-
- ------------------------------------------------------------------
- -- Comment Terminal
- ------------------------------------------------------------------
-
- Comment_TokenValue : constant GrammarSymbolRange := 95;
-
- ------------------------------------------------------------------
- -- Special Terminals
- ------------------------------------------------------------------
-
- EOF_TokenValue : constant GrammarSymbolRange := 96;
-
- ------------------------------------------------------------------
- -- Special Non-Terminals
- ------------------------------------------------------------------
-
- ACC_TokenValue : constant GrammarSymbolRange := 97;
-
- ------------------------------------------------------------------
- -- Grammar Symbol Classes
- ------------------------------------------------------------------
-
- subtype TokenRange is GrammarSymbolRange range 1..EOF_TokenValue;
-
- subtype TokenRangeLessEOF is
- GrammarSymbolRange range 1..(EOF_TokenValue - 1);
-
- subtype NonTokenRange is
- GrammarSymbolRange range (EOF_TokenValue + 1)..GrammarSymbolCount;
-
- ActionCount : constant GC.ParserInteger :=
- GC.setActionCount ;
- --| Number of actions in the parse tables.
- -- NYU Reference Name: NUM_ACTIONS
-
- StateCountPlusOne : constant GC.ParserInteger :=
- GC.setStateCountPlusOne ;
- --| Number of states plus one in the parse tables.
- -- NYU Reference Name: NUM_STATES
-
- subtype StateRange is
- GC.ParserInteger range 1..(StateCountPlusOne - 1);
-
- subtype ActionRange is GC.ParserInteger range 0..ActionCount;
-
- LeftHandSideCount :
- constant GC.ParserInteger := GC.setLeftHandSideCount;
- --| Number of left hand sides in the Ada grammar rules.
-
- subtype LeftHandSideRange is
- GC.ParserInteger range 1..LeftHandSideCount;
-
- function Get_LeftHandSide(
- GrammarRule : LeftHandSideRange) return GrammarSymbolRange;
- pragma inline (Get_LeftHandSide) ;
-
- RightHandSideCount : constant GC.ParserInteger :=
- GC.setRightHandSideCount ;
- --| Number of right hand sides in the Ada grammar rules.
-
- subtype RightHandSideRange is
- GC.ParserInteger range 1..RightHandSideCount;
-
- function Get_RightHandSide(
- GrammarRule : RightHandSideRange) return GC.ParserInteger;
- pragma inline (Get_RightHandSide) ;
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package ParseTables
- ------------------------------------------------------------------
-
- function GetAction(
- InStateValue : in StateRange;
- InSymbolValue : in GrammarSymbolRange
- ) return ActionRange;
-
- function Get_Grammar_Symbol( --| return the string representation
- --| of the grammar symbol
- In_Index : in GrammarSymbolRange) return string;
-
- --| Effects
- --|
- --| This subprogram returns the string representation of the
- --| GrammarSymbolRange passed in.
- --|
-
- ------------------------------------------------------------------
- subtype FollowMapRange is NonTokenRange;
-
- type FollowSymbolArray is array(PositiveParserInteger range <>)
- of GrammarSymbolRange;
-
- type FollowSymbolRecord is
- record
- follow_symbol_count : TokenRange;
- follow_symbol : FollowSymbolArray (TokenRange);
- end record;
- ------------------------------------------------------------------
-
- function Get_Follow_Map( --| return the array of follow symbols
- --| of the grammar symbol passed in
- In_Index : in FollowMapRange) return FollowSymbolRecord;
-
-
- --| Effects
- --|
- --| This subprogram returns the array of follow symbols for the
- --| grammar symbol passed in.
- --|
-
- ------------------------------------------------------------------
- -- The following declarations are for Error Recovery.
- ------------------------------------------------------------------
- ------------------------------------------------------------------
- -- Action_Token_Map
- ------------------------------------------------------------------
-
- subtype Action_Token_Range is
- GC.ParserInteger range 1..Max_Action_Token_Count;
-
- subtype Action_Token_Range_Plus_Zero is
- GC.ParserInteger range 0..Max_Action_Token_Count;
- --| for the set_size (which could be null!)
-
- type Action_Token_Array is array (PositiveParserInteger range <>)
- of TokenRangeLessEOF;
-
- type Action_Token_Record is
- record
- set_size : Action_Token_Range_Plus_Zero;
- set : Action_Token_Array (Action_Token_Range);
- end record;
-
- ------------------------------------------------------------------
- -- Shift_State_Map
- ------------------------------------------------------------------
-
- subtype Shift_State_Range is
- GC.ParserInteger range 1..Max_Shift_State_Count;
-
- subtype Shift_State_Range_Plus_Zero is
- GC.ParserInteger range 0..Max_Shift_State_Count;
- --| for the set_size (which could be null!)
-
- type Shift_State_Array is array (PositiveParserInteger range <>)
- of StateRange;
-
- type Shift_State_Record is
- record
- set_size : Shift_State_Range_Plus_Zero;
- set : Shift_State_Array (Shift_State_Range);
- end record;
-
- ------------------------------------------------------------------
-
- function Get_Action_Token_Map( --| return the array of action tokens
- --| for the state passed in.
- In_Index : in StateRange
- --| the state to return action tokens
- --| for.
- ) return Action_Token_Record;
-
- ------------------------------------------------------------------
-
- function Get_Shift_State_Map( --| return the array of shift states
- --| for the grammar symbol passed in.
- In_Index : in GrammarSymbolRange
- --| grammar symbol to return shifts
- --| for.
- ) return Shift_State_Record;
-
- -- The following variables contain statistics information
- -- collected during the parse:
- ParserDecisionCount : Natural := 0 ; --| Total number of times that
- --| GetAction was called.
- MaxCollisions : Natural := 0 ; --| Of all the calls to GetAction
- --| The one which resulted in the greatest number of collisions
- TotalCollisions : Natural := 0 ;
- --| Total number of collisions which occurred during parsing.
-
- end MCC_ParseTables;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mcclexidv.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with MCC_ParseTables; -- tables from parser generator
-
- package MCC_Lex_Identifier_Token_Value is
- --| Classify identifiers and reserved words and determine which
- --| identifiers are in package STANDARD.
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to
- -- Package Lex_Identifier_Token_Value
- ------------------------------------------------------------------
-
- procedure Find(
- --| returns token value and whether identifier is in package STANDARD.
-
- In_Identifier : in string; --| text of identifier to identify
-
- Out_Token_Value : out MCC_ParseTables.TokenRange);
- --| TokenValue of this identifier
-
- --| Effects
- --|
- --| This subprogram determines if the identifier is
- --| a reserved word or a plain identifier.
- --|
- --| The answer is indicated by returning the appropriate TokenValue.
- --|
-
- ------------------------------------------------------------------
-
- end MCC_Lex_Identifier_Token_Value;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccpdecls.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- -----------------------------------------------------------------------
-
- with Host_Dependencies; -- host dependent constants
- with MCC_ParseTables; -- constants and state tables
- use MCC_ParseTables;
-
- with MCC_Grammar_Constants;
- use MCC_Grammar_Constants;
-
- package MCC_ParserDeclarations is --| Objects used by the Parser
-
- --| Notes
-
- --| Abbreviations used in this compilation unit:
- --|
- --| gram : grammar
- --| sym : symbol
- --| val : value
- --|
-
- package HD renames Host_Dependencies;
- package PT renames MCC_ParseTables;
- package GC renames MCC_Grammar_Constants;
-
- -- Exceptions --
-
- MemoryOverflow : exception; --| raised if Parser runs out of
- --| newable memory.
- Parser_Error : exception; --| raised if an error occurs during
- --| parsing.
-
- --| The double delimiters were named with a combination of the name of
- --| each component symbol.
-
- Arrow_TokenValue : GrammarSymbolRange
- renames EQGT_TokenValue;
- Exponentiation_TokenValue : GrammarSymbolRange
- renames StarStar_TokenValue;
- Assignment_TokenValue : GrammarSymbolRange
- renames ColonEQ_TokenValue;
- NotEquals_TokenValue : GrammarSymbolRange
- renames SlashEQ_TokenValue;
- StartLabel_TokenValue : GrammarSymbolRange
- renames LTLT_TokenValue;
- EndLabel_TokenValue : GrammarSymbolRange
- renames GTGT_TokenValue;
- Box_TokenValue : GrammarSymbolRange
- renames LTGT_TokenValue;
-
- ------------------------------------------------------------------
- -- Grammar Symbol Classes
- ------------------------------------------------------------------
-
- subtype ReservedWordRange is GrammarSymbolRange
- range AbortTokenValue .. XorTokenValue;
-
- subtype SingleDelimiterRange is GrammarSymbolRange
- range Ampersand_TokenValue .. Bar_TokenValue;
-
- subtype DoubleDelimiterRange is GrammarSymbolRange
- range Arrow_TokenValue .. Box_TokenValue;
-
- ------------------------------------------------------------------
- -- ParseTables.GetAction return values
- ------------------------------------------------------------------
-
- subtype Error_Action_Range is --| ActionRange that indicates
- ActionRange range 0..0; --| the error range
-
- subtype Shift_Action_Range is --| ActionRange that indicates
- --| a shift action.
- ActionRange range 1..(StateCountPlusOne - 1);
-
- subtype Accept_Action_Range is --| ActionRange that indicates
- --| the accept action.
- ActionRange range StateCountPlusOne..StateCountPlusOne;
-
- subtype Reduce_Action_Range is --| ActionRange that indicates
- --| a reduce action.
- ActionRange range (StateCountPlusOne + 1)..ActionCount;
-
- ------------------------------------------------------------------
- -- Queue and Stack Management
- ------------------------------------------------------------------
-
- subtype StateParseStacksIndex is --| range of index values for
- GC.ParserInteger range 0..200; --| StateStack and ParseStack
-
- subtype StateParseStacksRange is --| array index values for
- --| StateStack and ParseStack
- StateParseStacksIndex range 1..StateParseStacksIndex'Last;
-
- Look_Ahead_Limit : positive := 5;--| Look ahead limit for parser
-
- ------------------------------------------------------------------
- -- StateStack Element
- ------------------------------------------------------------------
-
- subtype StateStackElement is StateRange;
-
- type Source_Text is access String;
-
- Null_Source_Text : constant Source_Text
- := null;
-
- ------------------------------------------------------------------
- -- ParseStack and Grammar Symbol Elements
- ------------------------------------------------------------------
-
- type Token is
- record
- text : Source_Text;
- srcpos_line : HD.Source_Line;
- srcpos_column : HD.Source_Column;
- end record;
-
- type ParseStackElement is
- record
- gram_sym_val : GrammarSymbolRange;
- --| used by parser to identify kind of grammar symbol
- lexed_token : Token;
- --| lexed tokens not yet reduced (eliminated)
- --| by ReduceActions.
- end record;
-
- ------------------------------------------------------------------
-
- CurToken : ParseStackElement;
- --| return from Lex.GetNextSourceToken
- --| Token used in subprogram Parse to determine
- --| next action from.
- --| Also used in ReduceActionsUtilities to determine last
- --| compilation unit in a compilation.
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package ParserDeclarations
- ------------------------------------------------------------------
-
- function Get_Source_Text( --| get a string from a Source_Text
- --| object
- In_Source_Text : --| the object to get the string from
- in Source_Text
- ) return string;
-
- --| Effects
-
- --| This subprogram gets a string from a Source_Text object.
- --| It exists to concentrate the interface to Source_Text objects.
-
- ------------------------------------------------------------------
-
- procedure Put_Source_Text( --| put a string into a Source_Text
- --| object
- In_String : in string; --| the string to store
- In_Out_Source_Text : --| the object to store the string in
- in out Source_Text);
-
-
- --| Effects
-
- --| This subprogram stores a string in a Source_Text object.
- --| It exists to concentrate the interface to Source_Text objects.
-
- ------------------------------------------------------------------
-
- function Dump_Parse_Stack_Element( --| return the data in a
- --| ParseStackElement or
- --| TokenQueueElement as a string
- In_PSE : in ParseStackElement --| the Element to display.
- ) return string;
-
- --| Effects
-
- --| This subprogram returns the data in a ParseStackElement or its
- --| sub-type a TokenQueueElement as a string.
-
- --| Notes
-
- --| Abbreviations used in this compilation unit
- --|
- --| PSE : ParseStackElement
- --|
- --| Only the lexed_token variant is currently fully displayed.
- --| The other variants would have to make use of an IDL
- --| writer.
-
- ------------------------------------------------------------------
-
- procedure flush_source_text (s : in out source_text);
-
- --| Effects: Deallocates the string associated with the source
- --| text given.
-
- ------------------------------------------------------------------
-
- end MCC_ParserDeclarations;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mcclex.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with MCC_ParserDeclarations; -- declarations for the Parser
- with Host_Dependencies; -- Host dependents constants
-
- package MCC_Lex is --| perform lexical analysis
-
- --| Overview
- --|
- --| This package is used to identify tokens in the source file and
- --| return them to subprogram Parser.
- --|
- --| The useful reference is Chapter 2 of the Ada (Trade Mark) LRM.
-
- --| Effects
- --|
- --| The subprograms in package Lex are used to sequentially read
- --| a source file and identify lexical units (tokens) in the file.
- --| Comments and error messages are saved for use by the lister.
-
- package HD renames Host_Dependencies;
- package PD renames MCC_ParserDeclarations;
- -- other package renames are in the package body
-
- ------------------------------------------------------------------
- -- Subprogram Declarations Global to Package Lex
- ------------------------------------------------------------------
-
- procedure Initialization; --| Initializes the lexer
-
- --| Effects
- --|
- --| This subprogram initializes the lexer.
-
- ------------------------------------------------------------------
-
- function GetNextNonCommentToken --| returns next non-comment token
- --| in source file.
- return PD.ParseStackElement;
-
- --| Effects
- --|
- --| This subprogram scans the source file for the next token not
- --| including comment tokens.
-
- --| Requires
- --|
- --| This subprogram requires an opened source file,
- --| and the state information internal to the package body.
-
- ------------------------------------------------------------------
-
- function GetNextSourceToken --| returns next token in source file.
- return PD.ParseStackElement;
-
- --| Effects
- --|
- --| This subprogram scans the source file for the next token.
- --| The tokens returned include any comment literal tokens.
-
- --| Requires
- --|
- --| This subprogram requires an opened source file,
- --| and the state information internal to the package body.
-
- ------------------------------------------------------------------
-
- function Show_Current_Line
- return HD.Source_Line;
-
- --| Effects
- --|
- --| Returns the current line number being processed
-
- ------------------------------------------------------------------
-
- procedure Write_Line;
-
- --| Effects
- --|
- --| Write a line to an appropriate file
-
- ------------------------------------------------------------------
-
- end MCC_Lex;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mcclex.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with Host_Dependencies; -- Host dependents constants
- with MCC_Lex_Identifier_Token_Value;
- -- contains data structures and subprogram
- -- to distinguish identifiers from
- -- reserved words
- with Lexical_Error_Message; -- outputs error messages.
- with MCC_ParseTables; -- tables from parser generator
- use MCC_ParseTables;
- with MCC_Grammar_Constants; -- constants from the parser generator
- use MCC_Grammar_Constants;
- with TEXT_IO;
-
-
- package body MCC_Lex is
-
- --| Overview
- --|
- --| Package Lex is implemented as a state machine via case statements.
- --| The implementation is optimized to minimize the number of times
- --| each character is handled. Each character is handled twice: once
- --| on input and once on lexing based on the character.
- --|
- --| The algorithm depends on having an End_Of_Line_Character
- --| terminate each source file line. This concludes the final token
- --| on the line for the case statement scanners.
-
- --| Notes
- --|
- --| Abbreviations Used:
- --|
- --| Char : Character
- --| CST : Current_Source_Token
- --| gram : grammar
- --| sym : symbol
- --| val : value
- --| RW : Reserved Word
- --|
-
- use MCC_ParserDeclarations;
- package LEM renames Lexical_Error_Message;
- package PT renames MCC_ParseTables;
- package GC renames MCC_Grammar_Constants;
- -- other package renames are in the package spec
-
- ------------------------------------------------------------------
- -- Character Types
- ------------------------------------------------------------------
-
- subtype Graphic_Character
- is character range ' ' .. ASCII.TILDE;
-
- subtype Upper_Case_Letter
- is character range 'A'..'Z';
-
- subtype Lower_Case_Letter
- is character range ASCII.LC_A .. ASCII.LC_Z;
-
- subtype Digit
- is character range '0'..'9';
-
- subtype Valid_Base_Range is GC.ParserInteger
- range 2..16;
-
- subtype End_Of_Line_Character
- is character range ASCII.LF .. ASCII.CR;
-
- ------------------------------------------------------------------
- -- Source position management
- ------------------------------------------------------------------
-
- Current_Column : HD.Source_Column := 1;
- Current_Line : HD.Source_Line := 1;
- --| the position of Next_Char in the source file.
- --| Visible so the Lexical_Error_message package can use them.
-
- ------------------------------------------------------------------
- -- Source Input Buffers and their Management
- ------------------------------------------------------------------
-
- Next_Char : character := ' '; --| input buffer for next character
- --| to scan from source file
-
- End_Of_Line_Buffer : --| character that signals end of
- --| line buffer
- constant character := End_Of_Line_Character'First;
-
- subtype Line_Buffer_Range is
- positive range 1..(( HD.Source_Column'Last) + 2);
- --| The first extra element is needed to hold the End_Of_Line_Buffer
- --| character. The second extra element allows Line_Buffer_Index
- --| to exceed Line_Buffer_Last.
-
- Line_Buffer : string (Line_Buffer_Range) := (-- 1 =>
- End_Of_Line_Buffer, others => ' ');
- --| input buffer containing source file line being lexed.
-
- Line_Buffer_Last : HD.Source_Column := Line_Buffer'First;
- --| length of source file line being lexed.
-
- Line_Buffer_Index : Line_Buffer_Range;
- --| index of character being lexed.
-
- End_Of_File_Reached : boolean := false;
- --| true when end of the input source has been reached
-
- ------------------------------------------------------------------
- -- Token to be Returned and its Management
- ------------------------------------------------------------------
-
- CST : PD.ParseStackElement; --| token being assembled for return by
- --| subprogram GetNextSourceToken
-
- subtype CST_Initialization_Type is PD.ParseStackElement;
-
- CST_Initializer : CST_Initialization_Type;
- --| short cut to initializing discriminants properly
-
- End_Of_File_Token : CST_Initialization_Type;
-
- ------------------------------------------------------------------
- -- Other objects
- ------------------------------------------------------------------
-
- Exit_After_Get_Next_Char : boolean := false;
- --| true; call Get_Next_Char before exiting, so that
- --| Next_Char contains the next character to be scanned.
- --| This object is not located in subprogram GetNextSourceToken,
- --| to save the time of re-elaboration on each call.
-
- Previous_Token_Value : PT.TokenRange := PT.StringTokenValue;
- --| used to resolve tick use as a token in T'('a') versus
- --| use as a delimiter in a character literal.
-
- Source_File : TEXT_IO.FILE_TYPE;
-
- ------------------------------------------------------------------
- -- Declarations for Scan_Numeric_Literal and Scan_Comment
- ------------------------------------------------------------------
-
- Temp_Source_Text : PD.Source_Text; --| temporary to hold value of
- --| Source_Text
-
- ------------------------------------------------------------------
-
- subtype Work_String_Range_Plus_Zero is
- natural range 0 .. natural(HD.Source_Column'Last);
-
- Work_String : string (1..Work_String_Range_Plus_Zero'Last);
-
- Work_String_Length : Work_String_Range_Plus_Zero;
- -- Must initialize to 0 before each use.
-
- ------------------------------------------------------------------
- -- Declarations for Procedures:
- --
- -- Scan_Exponent, Scan_Based_Integer, Scan_Integer,
- -- and Scan_Numeric_Literal
- ------------------------------------------------------------------
-
- Seen_Radix_Point : boolean := false;
- --| true : real
- --| false : integer
-
- ------------------------------------------------------------------
- -- Subprogram Specifications Local to Package Lex
- ------------------------------------------------------------------
-
- procedure Get_Next_Char; --| Obtains next character
-
- --| Requires
- --|
- --| This subprogram requires an opened source file, and
- --| Current Column > Line_Buffer_Last on its first call to initialize
- --| the input buffers Next_Char and Line_Buffer correctly.
- --|
-
- --| Effects
- --|
- --| This subprogram places the next character from the source file
- --| in Next_Char and updates the source file position.
- --| Subprogram Get_Next_Line sets End_Of_File_Reached true, and causes
- --| Next_Char to be set to the last character in Line_Buffer.
- --|
-
- --| Modifies
- --|
- --| Current_Column
- --| Current_Line
- --| Next_Char
- --| Line_Buffer
- --| Line_Buffer_Last
- --| Line_Buffer_Index
- --| End_Of_File_Reached
- --|
-
- ------------------------------------------------------------------
-
- procedure Get_Next_Line; --| gets next source file line to lex
-
- --| Requires
- --|
- --| This subprogram requires the source file to be open.
- --|
-
- --| Effects
- --|
- --| This subprogram gets next source line from input file.
- --| Sets Current_Column and Line_Buffer_Index to 1, and
- --| increments Current_Line.
- --| If the End of File is detected,
- --| End_Of_File_Reached is set true,
- --| End_Of_File_Token is set up,
- --| and Next_Char is set to End_Of_Line_Buffer.
- --|
-
- --| Modifies
- --|
- --| Current_Line
- --| End_Of_File_Reached
- --| End_Of_File_Token - only when the end of file is reached.
- --| Line_Buffer
- --| Line_Buffer_Last
- --|
-
- ------------------------------------------------------------------
-
- function Look_Ahead( --| Return character n columns ahead
- --| in current in current line.
- In_Columns_Ahead : --| Number of columns ahead to get
- in HD.Source_Column --| return character from.
- ) return character;
-
- --| Requires
- --|
- --| Line_Buffer
- --| Line_Buffer_Last
- --|
-
- --| Effects
- --|
- --| Return character In_Columns_Ahead in Line_Buffer.
- --| If this character is off the end of Line_Buffer,
- --| End_Of_Line_Buffer character is returned.
- --|
-
- ------------------------------------------------------------------
-
- procedure Set_CST_Gram_Sym_Val( --| Sets gram_sym_val for current
- --| token.
- In_Token_Value : in PT.TokenRange); --| value of token
-
- --| Effects
- --|
- --| This subprogram fills in gram_sym_val for the current token.
- --|
-
- ------------------------------------------------------------------
-
- procedure Set_CST_Source_Rep( --| Saves the symbol representation
- --| in the current token.
- In_String : in string); --| string holding symbol.
-
- --| Effects
- --|
- --| This subprogram fills in lexed_token.symrep for the current token.
- --|
-
- ------------------------------------------------------------------
-
- procedure Initialize_CST; --| Sets lx_srcpos for current token.
-
- --| Requires
- --|
- --| This subprogram requires Current_Column and Current_Line.
- --|
-
- --| Effects
- --|
- --| This subprogram sets common fields in CST.
- --|
-
- ------------------------------------------------------------------
-
- procedure Add_Next_Char_To_Source_Rep;
- --| appends Next_Char to growing
- --| source representation
-
- --| Requires
- --|
- --| Next_Char
- --|
-
- --| Effects
- --|
- --| This subprogram appends Next_Char to the growing source
- --| representation.
- --|
-
- --| Modifies
- --|
- --| Work_String
- --| Work_String_Length
- --|
-
- ------------------------------------------------------------------
-
- procedure Check_For_Consecutive_Underlines;
- --| Issues an error message if
- --| consecutive underlines occur.
-
- --| Requires
- --|
- --| Work_String
- --| Work_String_Length
- --|
-
- --| Effects
- --|
- --| Issues an error message if consecutive underlines occur.
- --|
-
- ------------------------------------------------------------------
-
- procedure Check_For_Terminal_Underline;
- --| Issues an error message if
- --| a terminal underline occurs.
-
- --| Requires
- --|
- --| Work_String
- --| Work_String_Length
- --|
-
- --| Effects
- --|
- --| This subprogram issues an error message if a terminal underline
- --| occurs.
-
- ------------------------------------------------------------------
-
- procedure Scan_Comment; --| Scans comments.
-
- --| Requires
- --|
- --| This subprogram requires an opened source file.
- --|
-
- --| Effects
- --|
- --| This subprogram scans the rest of a comment.
- --|
-
- --| Modifies
- --|
- --| CST
- --|
-
- ------------------------------------------------------------------
-
- procedure Scan_Identifier_Including_RW;
- --| Scans identifiers including
- --| reserved words
-
- --| Requires
- --|
- --| This subprogram requires an opened source file.
- --|
-
- --| Effects
- --|
- --| This subprogram scans the rest of the identifier,
- --| and determines if its a reserved word.
- --|
-
- --| Modifies
- --|
- --| CST
- --|
-
- ------------------------------------------------------------------
-
- procedure Scan_Exponent; --| Scans exponent field in
- --| appropriate numeric_literals
-
- --| Requires
- --|
- --| This subprogram requires an opened source file.
- --|
-
- --| Effects
- --|
- --| This subprogram scans the end of numeric_literals which
- --| contain exponents.
- --|
-
- --| Modifies
- --|
- --| Work_String
- --| Work_String_Length
- --|
-
- ------------------------------------------------------------------
-
- procedure Scan_Based_Integer( --| scans a based integer field of
- --| a numeric literal
- In_Base_To_Use : --| the base to use for lexing.
- in Valid_Base_Range);
-
- --| Requires
- --|
- --| This subprogram requires an opened source file.
-
- --| Effects
- --|
- --| This subprogram scans a based integer field in a numeric literal,
- --| verifying that is lexically correct.
- --|
-
- --| Modifies
- --|
- --| Work_String
- --| Work_String_Length
- --|
-
- --| Notes
- --|
- --| This subprogram and Scan_Integer are nearly identical.
- --| They are separate to save the overhead of:
- --|
- --| - passing a base in for decimal literals; and
- --|
- --| - distinguishing the extended digit 'E' from the exponent
- --| delimiter 'E'.
- --|
-
- ------------------------------------------------------------------
-
- procedure Scan_Integer; --| scans an integer field of
- --| a numeric literal
-
- --| Requires
- --|
- --| This subprogram requires an opened source file.
- --|
-
- --| Effects
- --|
- --| This subprogram scans an integer field in a numeric literal,
- --| verifying it is lexically correct.
- --|
-
- --| Modifies
- --|
- --| Work_String
- --| Work_String_Length
- --|
-
- --| Notes
- --|
- --| This subprogram and Scan_Based_Integer are nearly identical.
- --| They are separate to save the overhead of:
- --|
- --| - passing a base in for decimal literals; and
- --|
- --| - distinguishing the extended digit 'E' from the exponent
- --| delimiter 'E'.
- --|
-
- ------------------------------------------------------------------
-
- procedure Scan_Numeric_Literal; --| Scans numbers
-
- --| Requires
- --|
- --| This subprogram requires an opened source file, and the
- --| Universal Arithmetic package to handle conversions.
- --|
-
- --| Effects
- --|
- --| This subprogram scans the rest of the numeric literal and converts
- --| it to internal universal number format.
- --|
-
- --| Modifies
- --|
- --| CST
- --|
-
- -------------------------------------------------------------------
-
- procedure Scan_String_Literal; --| Scans string literals
-
- --| Requires
- --|
- --| This subprogram requires an opened source file.
- --|
-
- --| Effects
- --|
- --| This subprogram scans the rest of the string literal.
- --|
-
- --| Modifies
- --|
- --| CST
- --|
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package Lex
- -- (declared in package specification).
- ------------------------------------------------------------------
-
- procedure Initialization is
-
- begin
-
- End_Of_File_Reached := false;
- Line_Buffer_Index := Line_Buffer_Last + 1;
- -- forces Get_Next_Char to call Get_Next_Line
- Get_Next_Char;
-
- end Initialization;
-
- ------------------------------------------------------------------
-
- function GetNextNonCommentToken return PD.ParseStackElement is
- separate;
-
- ------------------------------------------------------------------
-
- function GetNextSourceToken return PD.ParseStackElement is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.2 - Lexical Elements, Separators and Delimiters
- --| LRM Section 2.2 - Notes
- --| LRM Section 2.5 - Character Literals
- --| LRM Section 2.7 - Comments
- --| LRM Section 2.7 - Note
- --| LRM Section 2.10 - Allowed Replacements of Characters
- --|
-
- begin
-
- if (End_Of_File_Reached) then
- CST := End_Of_File_Token;
- else -- this else terminates
- -- shortly before the return statement
-
- -- This loop performs the following functions:
- --
- -- 1) It scans for and ignores repeated separators.
- -- 2) It reports illegal characters between tokens.
- -- 3) It identifies and lexes tokens.
- -- Delimiters and character literals are handled
- -- by code inside this loop.
- -- Complex tokens: identifiers, string and
- -- numeric literals are lexed by called
- -- subprograms.
- -- 4) It recognizes and processes comments that
- -- occur before the first token found. Comments
- -- after tokens are processed by a separate loop
- -- after this one.
-
- Scan_For_Token: loop
- case Next_Char is
- when Upper_Case_Letter |
- Lower_Case_Letter =>
- Initialize_CST;
- Scan_Identifier_Including_RW;
- exit Scan_For_Token;
- -- Next_Char already updated
-
- when Digit =>
- Initialize_CST;
- Scan_Numeric_Literal;
- exit Scan_For_Token;
- -- Next_Char already updated
-
- when ASCII.QUOTATION | -- '"'
- ASCII.PERCENT => -- '%'
- Initialize_CST;
- Scan_String_Literal;
- exit Scan_For_Token;
- -- Next_Char already updated
-
- when ''' =>
- Initialize_CST;
- if ((GC."="(Previous_Token_Value,
- PT.IdentifierTokenValue))
- or else (GC."="(Previous_Token_Value,
- PT.AllTokenValue))
- or else (GC."="(Previous_Token_Value,
- PT.StringTokenValue))
- or else (GC."="(Previous_Token_Value,
- PT.CharacterTokenValue))
- or else (GC."="(Previous_Token_Value,
- PT.RightParen_TokenValue)) ) then
- -- CST is a ' delimiter
- Set_CST_Gram_Sym_Val(
- PT.Apostrophe_TokenValue);
- elsif (Look_Ahead(2) = ''') then
- -- CST is a character literal
- CST.gram_sym_val := PT.CharacterTokenValue;
- Get_Next_Char;
- if not (Next_Char in Graphic_Character) then
- -- flag as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , Integer'Image(
- Character'Pos(Next_Char))
- -- convert to string
- , LEM.Character_Is_Non_Graphic);
- end if;
- -- save the source representation.
- Set_CST_Source_Rep ("'" & Next_Char);
- Get_Next_Char; -- pass by the closing
- -- single quote
- else
- -- flag single quote use as illegal
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Illegal_Use_Of_Single_Quote);
- -- assume CST is a ' delimiter;
- Set_CST_Gram_Sym_Val(
- PT.Apostrophe_TokenValue);
- end if;
- Exit_After_Get_Next_Char := true;
-
-
- when ASCII.AMPERSAND => -- '&'
- Initialize_CST;
- Set_CST_Gram_Sym_Val(PT.Ampersand_TokenValue);
- Exit_After_Get_Next_Char := true;
-
- when '(' =>
- Initialize_CST;
- Set_CST_Gram_Sym_Val(PT.LeftParen_TokenValue);
- Exit_After_Get_Next_Char := true;
-
- when ')' =>
- Initialize_CST;
- Set_CST_Gram_Sym_Val(PT.RightParen_TokenValue);
- Exit_After_Get_Next_Char := true;
-
- when '*' =>
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '*' =>
- Set_CST_Gram_Sym_Val(
- PD.Exponentiation_TokenValue);
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(PT.Star_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when '+' =>
- Initialize_CST;
- Set_CST_Gram_Sym_Val(PT.Plus_TokenValue);
- Exit_After_Get_Next_Char := true;
-
- when ',' =>
- Initialize_CST;
- Set_CST_Gram_Sym_Val(PT.Comma_TokenValue);
- Exit_After_Get_Next_Char := true;
-
- when '-' => -- Minus_Sign or Hyphen
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '-' => -- Minus_Sign or Hyphen
- -- two hyphens indicate a comment
- Set_CST_Gram_Sym_Val(
- PT.Comment_TokenValue);
- Scan_Comment;
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(PT.Minus_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when '.' =>
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '.' =>
- Set_CST_Gram_Sym_Val(
- PT.DotDot_TokenValue);
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(PT.Dot_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when '/' =>
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '=' =>
- Set_CST_Gram_Sym_Val(
- PD.NotEquals_TokenValue);
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(
- PT.Slash_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when ASCII.COLON => -- ':'
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '=' =>
- Set_CST_Gram_Sym_Val(
- PD.Assignment_TokenValue);
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(PT.Colon_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when ASCII.SEMICOLON => -- ';'
- Initialize_CST;
- Set_CST_Gram_Sym_Val(PT.SemiColon_TokenValue);
- Exit_After_Get_Next_Char := true;
-
- when '<' =>
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '=' =>
- Set_CST_Gram_Sym_Val(PT.LTEQ_TokenValue);
- Exit_After_Get_Next_Char := true;
- when '<' =>
- Set_CST_Gram_Sym_Val(
- PD.StartLabel_TokenValue);
- Exit_After_Get_Next_Char := true;
- when '>' =>
- Set_CST_Gram_Sym_Val(PD.Box_TokenValue);
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(PT.LT_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when '=' =>
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '>' =>
- Set_CST_Gram_Sym_Val(PD.Arrow_TokenValue);
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(PT.EQ_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when '>' =>
- Initialize_CST;
- Get_Next_Char;
- case Next_Char is
- when '=' =>
- Set_CST_Gram_Sym_Val(PT.GTEQ_TokenValue);
- Exit_After_Get_Next_Char := true;
- when '>' =>
- Set_CST_Gram_Sym_Val(
- PD.EndLabel_TokenValue);
- Exit_After_Get_Next_Char := true;
- when others =>
- Set_CST_Gram_Sym_Val(PT.GT_TokenValue);
- exit Scan_For_Token;
- -- Next_Char already updated
- end case;
-
- when ASCII.BAR | -- '|'
- ASCII.EXCLAM => -- '!'
- -- vertical bar and its alternative
- Initialize_CST;
- Set_CST_Gram_Sym_Val(PT.Bar_TokenValue);
- Exit_After_Get_Next_Char := true;
-
- when ASCII.HT => -- Horizontal Tab
- -- a lexical unit separator - skip it.
- -- position Current_Column properly. This is done
- -- here to save the cost of a test on every
- -- character in Get_Next_Char.
-
- Current_Column :=
- HD.FindTabColumn(Current_Column);
-
- when ' ' | End_Of_Line_Character =>
- -- rest of the lexical unit separators
-
- if (End_Of_File_Reached) then
- return End_Of_File_Token;
- end if;
-
-
- when ASCII.UNDERLINE => -- '_'
- case Look_Ahead(1) is
- when Upper_Case_Letter | Lower_Case_Letter =>
- -- flag illegal leading under line
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Leading_Underline);
- Initialize_CST;
- Scan_Identifier_Including_RW;
- exit Scan_For_Token;
- -- Next_Char already updated
- when Digit =>
- -- flag illegal leading under line
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Leading_Underline);
- Initialize_CST;
- Scan_Numeric_Literal;
- exit Scan_For_Token;
- -- Next_Char already updated
- when others =>
- -- flag illegal character for start
- -- of token
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , "_"
- , LEM.Character_Can_Not_Start_Token);
- end case;
-
-
- when ASCII.SHARP | -- '#'
- ASCII.DOLLAR | -- '$'
- ASCII.QUERY | -- '?'
- ASCII.AT_SIGN | -- '@'
- ASCII.L_BRACKET | -- '['
- ASCII.BACK_SLASH | -- '\'
- ASCII.R_BRACKET | -- ']'
- ASCII.CIRCUMFLEX | -- '^'
- ASCII.GRAVE | -- '`'
- ASCII.L_BRACE | -- '{'
- ASCII.R_BRACE | -- '}'
- ASCII.TILDE => -- '~'
- -- flag illegal character for start of token
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , Next_Char & "" -- convert to string
- , LEM.Character_Can_Not_Start_Token);
-
- when ASCII.NUL .. -- Null to
- ASCII.BS | -- Back Space
- ASCII.SO .. -- Shift Out to
- ASCII.US | -- Unit Separator
- ASCII.DEL => -- Delete
- -- flag as non-graphic ASCII control character
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , Integer'Image(Character'Pos(Next_Char))
- -- convert to string
- , LEM.Character_Is_Non_Graphic);
-
- when others =>
- -- should never happen due to 's
- -- definition of CHARACTER. flag as illegal anyhow
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Character_Is_Non_ASCII);
- end case;
-
- Get_Next_Char; -- for next time through loop.
-
- if (Exit_After_Get_Next_Char) then
- Exit_After_Get_Next_Char := false;
- exit Scan_For_Token;
- end if;
-
- end loop Scan_For_Token; -- Next_Char already updated
-
- Previous_Token_Value := CST.gram_sym_val;
- -- for resolving T'('c')
-
- end if; -- (End_Of_File_Reached)
-
- return CST;
-
- -- On leaving: object Next_Char should contain character
- -- to scan on next call of this function.
-
- end GetNextSourceToken;
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Local to Package Lex
- ------------------------------------------------------------------
-
- procedure Get_Next_Char is
-
- begin
-
- --| Algorithm
- --|
- --| Source File is scanned returning each character until the
- --| end of the file is found. Proper column positioning for a tab
- --| character is done in GetNextSourceToken for speed.
- --|
-
- -- The End_Of_Line_Character that Get_Next_Line
- -- inserts needs to be seen by the scanning
- -- case statements to terminate tokens correctly.
-
- Current_Column := Current_Column + 1;
- Line_Buffer_Index := Line_Buffer_Index + 1;
- Next_Char := Line_Buffer (Line_Buffer_Index);
-
- if (Line_Buffer_Index > Line_Buffer_Last) then
- Get_Next_Line;
- -- Current_Column and Line_Buffer_Index are handled there.
- Next_Char := Line_Buffer (Line_Buffer_Index);
- end if;
-
- end Get_Next_Char; -- procedure
-
- ------------------------------------------------------------------
-
- procedure Get_Next_Line is
-
- begin
-
- -- Get next source line from CURRENT_INPUT. Update column and
- -- line counts
- Current_Column := 1;
- Line_Buffer_Index := 1;
-
- Ignore_Null_Line:
- loop
- -- do NOT move next statement out of loop
- if (Current_Line < HD.Source_Line'Last) then
- begin -- block
- Current_Line := HD.Source_Line -- type conversion
- (TEXT_IO.LINE(FILE => TEXT_IO.CURRENT_INPUT));
- if (Current_Line >= HD.Source_Line'Last) then
- raise CONSTRAINT_ERROR;
- end if;
- exception
- when others =>
- Current_Line := HD.Source_Line'Last;
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , HD.Source_Line'IMAGE(HD.Source_Line'Last)
- , LEM.Source_Line_Maximum_Exceeded);
- end; -- block
- end if;
- TEXT_IO.GET_LINE(
- FILE => TEXT_IO.CURRENT_INPUT,
- ITEM => Line_Buffer(1..(Line_Buffer'Last - 1)),
- LAST => Line_Buffer_Last);
- -- flag a line that is too long as an error
- if (Line_Buffer_Last >= Line_Buffer'Last - 1) and then
- (TEXT_IO.END_OF_LINE(FILE => TEXT_IO.CURRENT_INPUT) )
- then
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Source_Line_Too_Long);
- end if;
- Write_Line;
- exit Ignore_Null_Line when
- (Line_Buffer_Last /= (Line_Buffer'First - 1));
- end loop Ignore_Null_Line;
-
- Line_Buffer_Last := Line_Buffer_Last + 1;
- Line_Buffer(Line_Buffer_Last) := End_Of_Line_Buffer;
-
- exception
- -- when end of file is reached
- when TEXT_IO.END_ERROR =>
- -- save that state for GetNextSourceToken
- End_Of_File_Reached := true;
-
- -- update column and line counts
- Line_Buffer_Last := 1;
- Line_Buffer(Line_Buffer_Last) := End_Of_Line_Buffer;
- Line_Buffer_Index := 1;
- Current_Column := 1;
- -- Current_Line is ok.
- -- Last call to GET_LINE advanced it one.
-
- -- set the value of End_Of_File_Token
- -- the discriminants were set up by the object declaration
- End_Of_File_Token.gram_sym_val := PT.EOF_TokenValue;
- End_Of_File_Token.lexed_token := (
- srcpos_line => Current_Line,
- srcpos_column => Current_Column,
- text => PD.Null_Source_Text);
-
- end Get_Next_Line;
-
- ------------------------------------------------------------------
-
- function Look_Ahead(
- In_Columns_Ahead : in HD.Source_Column) return character is
-
- ------------------------------------------------------------------
- -- Declarations for subprogram Look_Ahead
- ------------------------------------------------------------------
-
- Position_To_Try : Integer := Integer --type conversion
- ( Line_Buffer_Index
- + In_Columns_Ahead);
-
- ------------------------------------------------------------------
-
- begin
-
- -- if request is past the end of line
- if (Position_To_Try > Integer(Line_Buffer_Last) ) then
- -- type conversion
- -- return the end_of_line character
- return End_Of_Line_Buffer;
- else
- -- else return the requested character
- return Line_Buffer(Position_To_Try);
- end if;
-
- end Look_Ahead; -- function
-
- ------------------------------------------------------------------
-
- procedure Set_CST_Gram_Sym_Val(
- In_Token_Value : in PT.TokenRange) is
-
- begin
-
- CST.gram_sym_val := In_Token_Value;
-
- end Set_CST_Gram_Sym_Val;
-
- ----------------------------------------------------------------------
-
- procedure Set_CST_Source_Rep(
- In_String : in string) is
-
- begin
-
- -- store the representation
- PD.Put_Source_Text(
- In_String,
- CST.lexed_token.text);
-
- end Set_CST_Source_Rep;
-
- ------------------------------------------------------------------
-
- procedure Initialize_CST is
-
- begin
-
- -- Set up discriminants, and source position properly
- -- Set other CST fields to null values
- CST := CST_Initializer;
-
- CST.lexed_token := (
- srcpos_line => Current_Line,
- srcpos_column => Current_Column,
- text => PD.Null_Source_Text);
-
- end Initialize_CST;
-
- ------------------------------------------------------------------
-
- procedure Add_Next_Char_To_Source_Rep is
-
- begin
-
- -- append the character to growing source representation
- Work_String_Length := Work_String_Length + 1;
- Work_String(Work_String_Length) := Next_Char;
-
- end Add_Next_Char_To_Source_Rep;
-
- ------------------------------------------------------------------
-
- procedure Check_For_Consecutive_Underlines is
-
- begin
-
- -- flag consecutive underlines as an error (leading
- -- underlines are handled in GetNextSourceToken).
- if (Work_String(Work_String_Length) = ASCII.UNDERLINE)
- then
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Consecutive_Underlines);
- end if;
-
- end Check_For_Consecutive_Underlines; -- procedure
-
- ------------------------------------------------------------------
-
- procedure Check_For_Terminal_Underline is
-
- begin
-
- -- flag a trailing underline as an error.
- -- trailing underlines are saved for the same
- -- reason as leading ones.
- -- See comment in GetNextSourceToken.
-
- if (Work_String(Work_String_Length) = ASCII.UNDERLINE)
- -- check the preceeding character
- then
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Terminal_Underline);
- end if;
-
- end Check_For_Terminal_Underline;
-
- ------------------------------------------------------------------
-
- procedure Scan_Comment is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.7 - Comments
- --| LRM Section 2.7 - Note
- --|
-
- begin
-
- -- get to the beginning of the comment
- Get_Next_Char;
- Set_CST_Source_Rep(
- Line_Buffer(Line_Buffer_Index .. Line_Buffer_Last - 1));
- -- subtract 1 so that the carridge return is not also returned.
-
- Line_Buffer_Index := Line_Buffer_Last + 1;
- -- force next call to Get_Next_Char to call Get_Next_Line
-
- end Scan_Comment;
-
- ------------------------------------------------------------------
-
- procedure Scan_Identifier_Including_RW is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.3 - Identifiers
- --| LRM Section 2.3 - Note
- --| LRM Section 2.9 - Reserved Words
- --| LRM Section 2.9 - Notes
- --|
-
- ------------------------------------------------------------------
-
- begin
-
- Work_String_Length := 0;
-
- -- scan source file for rest of token
- -- note that first character of the token is stored first
- Scan_For_Identifier_Including_RW: loop
- Add_Next_Char_To_Source_Rep;
-
- -- set up for processing next characte
- Get_Next_Char;
-
- case Next_Char is
- when Upper_Case_Letter | Lower_Case_Letter | Digit =>
- -- action is at start of next loop cycle
- null;
- when ASCII.UNDERLINE => -- '_'
- Check_For_Consecutive_Underlines;
- when others =>
- Check_For_Terminal_Underline;
-
- -- token is terminated by any character except letter
- -- digit, or underline;
- exit Scan_For_Identifier_Including_RW; -- this loop
- end case;
-
- end loop Scan_For_Identifier_Including_RW;
-
- -- find out what kind of token it is
- MCC_Lex_Identifier_Token_Value.Find(
- In_Identifier =>
- Work_String(1..Work_String_Length),
- Out_Token_Value => CST.gram_sym_val);
-
- -- store the source representation of the token found
- Set_CST_Source_Rep(Work_String(1..Work_String_Length) );
-
- end Scan_Identifier_Including_RW;
-
- ------------------------------------------------------------------
-
- procedure Scan_Exponent is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.4.1 - Decimal Literals
- --| LRM Section 2.4.1 - Notes
- --| LRM Section 2.4.2 - Based Literals
- --|
-
- begin
-
- -- Check for missing 'E' or 'e',
- -- and for existence of the exponent
- case Next_Char is
- when 'E' | 'e' =>
- null; -- normal case
- when others =>
- return; -- no exponent to process
- end case;
- -- add first character to growing literal
- Add_Next_Char_To_Source_Rep;
-
-
- -- scan source file for rest of the exponent
- -- verify that next character is legal for an integer field
- Get_Next_Char;
-
- case Next_Char is
- when '+' =>
- -- add sign character to growing literal
- Add_Next_Char_To_Source_Rep;
-
- Get_Next_Char;
- when '-' => -- Minus_Sign
- if not (Seen_Radix_Point) then
- -- flag negative exponent as illegal in an integer
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Negative_Exponent_Illegal_In_Integer);
- end if;
-
- -- add sign character to growing literal
- Add_Next_Char_To_Source_Rep;
-
- Get_Next_Char;
- when others =>
- null;
- end case;
-
- case Next_Char is
- when Digit =>
- -- scan the integer field of the exponent
- Scan_Integer;
- when ASCII.UNDERLINE => -- '_'
- if (Look_Ahead(1) in Digit) then
- -- flag illegal leading under line
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Leading_Underline);
- -- scan the integer field of the exponent
- Scan_Integer;
- else
- -- issue error message that integer field is missing
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Exponent_Missing_Integer_Field);
- end if;
- when others =>
- -- issue an error message that integer field is missing
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Exponent_Missing_Integer_Field);
- end case;
-
- end Scan_Exponent;
-
- ------------------------------------------------------------------
-
- procedure Scan_Based_Integer(
- In_Base_To_Use : in Valid_Base_Range) is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.4 - Numeric Literals
- --| LRM Section 2.4.2 - Based Literals
- --|
-
- ------------------------------------------------------------------
- -- Declarations for Procedure Scan_Based_Integer
- ------------------------------------------------------------------
-
- BAD : constant GC.ParserInteger := GC.ParserInteger'Last;
- --| an integer value greater than 15 to use as a flag to indicate
- --| illegal values.
-
- Transform : constant array(CHARACTER) of GC.ParserInteger :=
-
- -------- ( nul, soh, stx, etx, eot, enq, ack, bel,
- ( BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- bs, ht, lf, vt, ff, cr, so, si,
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- dle, dc1, dc2, dc3, dc4, nak, syn, etb,
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- can, em, sub, esc, fs, gs, rs, us,
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
-
- -------- ' ', '!', '"', '#', '$', '%', '&', ''',
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- '(', ')', '*', '+', ',', '-', '.', '/',
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- '0', '1', '2', '3', '4', '5', '6', '7',
- 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ,
- -------- '8', '9', ':', ';', '<', '=', '>', '?',
- 8 , 9 , BAD, BAD, BAD, BAD, BAD, BAD,
-
- -------- '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- BAD, 10 , 11 , 12 , 13 , 14 , 15 , BAD,
- -------- 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- 'X', 'Y', 'Z', '[', '\', ']', '^', '_',
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
-
- -------- '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
- BAD, 10 , 11 , 12 , 13 , 14 , 15 , BAD,
- -------- 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,
- -------- 'x', 'y', 'z', '{', '|', '}', '~', del);
- BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD );
- --| used to transform a character value to an integer value for
- --| purpose of checking that a digit is within the legal range
- --| for the base passed in via In_Base_To_Use.
-
- ------------------------------------------------------------------
-
- begin
-
- -- check that first character, if not an under line,
- -- is a valid digit for base being used.
- if (Next_Char /= ASCII.UNDERLINE) and then
- (Transform(Next_Char) >= In_Base_To_Use)
- then
- -- flag digit as invalid for base
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , Next_Char & "" -- convert to string
- , LEM.Digit_Invalid_For_Base);
- end if;
-
- -- scan source file for rest of the field
- -- note that first character of the field is stored first
- Scan_For_Based_Integer: loop
-
- Add_Next_Char_To_Source_Rep;
-
- -- set up for processing next character
- Get_Next_Char;
-
- case Next_Char is
- when 'A' .. 'F' | 'a' .. 'f' | Digit =>
- -- check if Next_Char is in valid base range
- if (Transform(Next_Char) >= In_Base_To_Use) then
- -- flag digit as invalid for base
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , Next_Char & "" -- convert to string
- , LEM.Digit_Invalid_For_Base);
- end if;
- -- rest of action is at start of next loop cycle
- when ASCII.UNDERLINE => -- '_'
- Check_For_Consecutive_Underlines;
- when others =>
- Check_For_Terminal_Underline;
- -- field is terminated by any character except
- -- extended digit (letters a to f and digits),
- -- or underline
- exit Scan_For_Based_Integer; -- this loop
- end case;
-
- end loop Scan_For_Based_Integer;
- -- Next_Char already updated
-
- end Scan_Based_Integer;
-
- ------------------------------------------------------------------
-
- procedure Scan_Integer is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.4 - Numeric Literals
- --| LRM Section 2.4.1 - Decimal Literals
- --| LRM Section 2.4.1 - Notes
- --|
-
- begin
-
- -- scan source file for rest of the field
- -- note that first character of the field is stored first
- Scan_For_Integer: loop
-
- Add_Next_Char_To_Source_Rep;
-
- -- set up for processing next character
- Get_Next_Char;
-
- case Next_Char is
- when Digit =>
- -- rest of action is at start of next loop cycle
- null;
- when ASCII.UNDERLINE => -- '_'
- Check_For_Consecutive_Underlines;
- when others =>
- Check_For_Terminal_Underline;
-
- -- field is terminated by any character except
- -- digit, or underline
- exit Scan_For_Integer; -- this loop
- end case;
-
- end loop Scan_For_Integer; -- Next_Char already updated
-
- end Scan_Integer;
-
- ------------------------------------------------------------------
-
- procedure Scan_Numeric_Literal is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.4 - Numeric Literals
- --| LRM Section 2.4.1 - Decimal Literals
- --| LRM Section 2.4.1 - Notes
- --| LRM Section 2.4.2 - Based Literals
- --| LRM Section 2.10 - Allowed Replacements of Characters
- --|
-
- ------------------------------------------------------------------
- -- Declarations for Scan_Numeric_Literal
- ------------------------------------------------------------------
-
- Based_Literal_Delimiter : character;
- --| holds value of first based_literal delimeter:
- --| ASCII.COLON (':') or ASCII.SHARP ('#');
- --| so the second one can be checked to be identical.
-
- Base_Being_Used : GC.ParserInteger;
- --| base value to be passed to Scan_Based_Literal.
-
- ------------------------------------------------------------------
-
- begin
-
- CST.gram_sym_val := PT.NumericTokenValue;
-
- Work_String_Length := 0;
- -- also used by sub-scanners called from this subprogram.
-
- -- Scan first field
- Scan_Integer;
-
- -- Now, scan rest of literal dependent on what Next_char is
- case Next_Char is
-
- -- have a decimal_literal
- when '.' =>
- if (Look_Ahead(1) = '.') then
- -- next token is a range double delimiter.
- -- finished with numeric_literal.
- Seen_Radix_Point := false; -- have an integer_literal
- -- already set_up for next scanner,
- -- no call to Get_Next_Char.
- else
- Seen_Radix_Point := true;
- Add_Next_Char_To_Source_Rep;
- Get_Next_Char;
- case Next_Char is
- when Digit =>
- Scan_Integer;
- -- check and flag multiple radix points
- while (Next_Char = '.') and then
- (Look_Ahead(1) in digit) loop
- LEM.Output_Message
- ( Current_Line
- , Current_Column
- , LEM.Too_Many_Radix_Points);
- Add_Next_Char_To_Source_Rep;
- Get_Next_Char;
- Scan_Integer;
- end loop;
- when ASCII.UNDERLINE => -- '_'
- -- flag illegal leading under line
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Leading_Underline);
- Scan_Integer;
- -- not flagging an integer consisting of a
- -- single underline as a trailing radix
- -- point case. Check and flag multiple radix
- -- points.
- while (Next_Char = '.') and then
- (Look_Ahead(1) in digit) loop
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Too_Many_Radix_Points);
- Add_Next_Char_To_Source_Rep;
- Get_Next_Char;
- Scan_Integer;
- end loop;
- when others =>
- -- flag trailing radix point as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Digit_Needed_After_Radix_Point);
- end case;
-
- Scan_Exponent; -- check for and process exponent
-
- end if;
-
- -- have a based_literal
- when ASCII.SHARP | -- '#'
- ASCII.COLON => -- ':'
- if (Next_Char = ASCII.COLON) and (Look_Ahead(1) = '=') then
- -- next token is an assignment compound delimiter
- -- finished with numeric literal.
- Seen_Radix_Point := false; -- have an integer literal
- -- already set up for next scanner, no call to
- -- Get_Next_Char.
- else
- Based_Literal_Delimiter := Next_Char;
- Base_Being_Used := GC.ParserInteger'VALUE
- (Work_String(1..Work_String_Length));
- if (Base_Being_Used not in Valid_Base_Range) then
- -- flag illegal bases as errors
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , Work_String(1..Work_String_Length)
- , LEM.Base_Out_Of_Legal_Range_Use_16);
- Base_Being_Used := 16;
- -- we use the maximum base to pass all the
- -- extended_digits as legal.
- end if;
-
- Add_Next_Char_To_Source_Rep; -- save the base delimiter
- Get_Next_Char;
-
- case Next_Char is
- when 'A' .. 'F' | 'a' .. 'f' | Digit =>
- Scan_Based_Integer(Base_Being_Used);
- when ASCII.UNDERLINE => -- '_'
- -- flag illegal leading under line
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Leading_Underline);
- -- not flagging an integer consisting of a single
- -- under line as a trailing radix point case.
- Scan_Based_Integer(Base_Being_Used);
- when '.' =>
- -- flag leading radix point as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Digit_Needed_Before_Radix_Point);
- when ASCII.SHARP | -- '#'
- ASCII.COLON => -- ':'
- -- flag missing field as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.No_Integer_In_Based_Number);
-
- -- based_literal_delimiter_mismatch handled in
- -- next case statement.
- when others =>
- -- flag missing field as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.No_Integer_In_Based_Number);
- end case;
-
- case Next_Char is
- when '.' =>
- Seen_Radix_Point := true; -- have a real_literal
- Add_Next_Char_To_Source_Rep;
-
- Get_Next_Char;
- case Next_Char is
- when 'A' .. 'F' | 'a' .. 'f' | Digit =>
- Scan_Based_Integer(Base_Being_Used);
- -- check and flag multiple radix points
- while (Next_Char = '.') and then
- ((Look_Ahead(1) in digit) or
- (Look_Ahead(1) in 'A' .. 'F') or
- (Look_Ahead(1) in 'a' .. 'f')) loop
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Too_Many_Radix_Points);
- Add_Next_Char_To_Source_Rep;
- Get_Next_Char;
- Scan_Based_Integer(Base_Being_Used);
- end loop;
- when ASCII.UNDERLINE => -- '_'
- -- flag illegal leading under lined
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Leading_Underline);
- -- not flagging an integer consisting of
- -- a single underline as a trailing
- -- radix point case.
- Scan_Based_Integer(Base_Being_Used);
- when others =>
- -- flag trailing radix point as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Digit_Needed_After_Radix_Point);
- end case;
-
- case Next_Char is
- when ASCII.SHARP | -- '#'
- ASCII.COLON => -- ':'
-
- Add_Next_Char_To_Source_Rep;
- -- save the base delimiter
-
- if (Next_Char /= Based_Literal_Delimiter)
- then
- -- flag based_literal delimiter
- -- mismatch as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , "Opener: "
- & Based_Literal_Delimiter
- & " Closer: " & Next_Char
- , LEM.Based_Literal_Delimiter_Mismatch);
- end if;
-
- Get_Next_Char; -- after base delimiter
- -- check for and process exponent
- Scan_Exponent;
-
- when others =>
- -- flag missing second
- -- based_literal delimiter as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Missing_Second_Based_Literal_Delimiter);
- end case;
-
- when ASCII.SHARP | -- '#'
- ASCII.COLON => -- ':'
- -- have an integer_literal
- Seen_Radix_Point := false;
- -- save the base delimiter
- Add_Next_Char_To_Source_Rep;
-
- if (Next_Char /= Based_Literal_Delimiter) then
- -- flag based_literal delimiter mismatch error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , "Opener: " & Based_Literal_Delimiter
- & " Closer: " & Next_Char
- , LEM.Based_Literal_Delimiter_Mismatch);
- end if;
-
- Get_Next_Char; -- get character after base delimiter
- Scan_Exponent; -- check for and process exponent
-
- when others =>
- -- assume an integer_literal
- Seen_Radix_Point := false;
- -- flag missing second
- -- based_literal delimiter as an error
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.Missing_Second_Based_Literal_Delimiter);
- end case;
-
- end if;
-
- --we have an integer_literal
- when others =>
- Seen_Radix_Point := false; -- have an integer_literal
- Scan_Exponent; -- check for and process exponent
- end case;
-
- -- one last error check
- if (Next_Char in Upper_Case_Letter) or
- (Next_Char in Lower_Case_Letter) then
- -- flag missing space between numeric_literal and
- -- identifier (including RW) as an error.
- LEM.Output_Message
- ( Current_Line
- , Current_Column
- , LEM.Space_Must_Separate_Num_And_Ids);
- end if;
-
- -- now store the source representation of the token found.
- Set_CST_Source_Rep(Work_String(1..Work_String_Length));
-
- end Scan_Numeric_Literal;
-
- ------------------------------------------------------------------
-
- procedure Scan_String_Literal is
-
- --| Overview
- --|
- --| Note the following LRM Sections:
- --| LRM Section 2.6 - String Literals
- --| LRM Section 2.6 - Note
- --| LRM Section 2.10 - Allowed Replacements of Characters
- --|
-
- String_Delimiter : character := Next_Char;
-
- begin
-
- Work_String_Length := 0;
-
- CST.gram_sym_val := PT.StringTokenValue;
-
- -- scan until matching string delimiter or end of line is found
- Scan_For_String: loop
- Get_Next_Char;
-
- if (Next_Char = String_Delimiter) then
- Get_Next_Char;
- if (Next_Char = String_Delimiter) then
- -- add one string delimiter to growing string
- Add_Next_Char_To_Source_Rep;
- else -- string is ended
- exit Scan_For_String;
- end if;
- elsif (Next_Char in Graphic_Character) then
- -- add graphic character to growing string
- Add_Next_Char_To_Source_Rep;
- elsif (Next_Char in End_Of_Line_Character) then
- -- string is ended. flag the error.
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , LEM.No_Ending_String_Delimiter);
- exit Scan_For_String;
- else -- flag non-graphic characters as errors
- LEM.Output_Message(
- Current_Line
- , Current_Column
- , Integer'Image(Character'Pos(Next_Char))
- -- convert to string
- , LEM.Only_Graphic_Characters_In_Strings);
- end if;
-
- end loop Scan_For_String; -- Next_Char already updated
-
- -- now store the source representation found without the
- -- string delimiters
- Set_CST_Source_Rep(Work_String(1..Work_String_Length));
-
- return;
-
- end Scan_String_Literal;
-
- ------------------------------------------------------------------
-
- function Show_Current_Line
- return HD.Source_Line is
-
- --| Overview
- --| Return current line number
-
- begin
-
- return Current_Line;
-
- end Show_Current_Line;
-
- ------------------------------------------------------------------
-
- procedure Write_Line is separate;
-
- ------------------------------------------------------------------
- end MCC_Lex;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccwritel.sub
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ----------------------------------------------------------------------
-
- separate (MCC_Lex)
- procedure Write_Line is
- begin
- null;
- end Write_Line;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccptbls.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --+ PTBLS.BDY +--
-
- package body MCC_ParseTables is
- ----------------------------------------------------------------------
- -- The rest of the constants used to define the Parse Tables
- ----------------------------------------------------------------------
-
- DefaultValue : constant := 1 ; -- default for aggregates.
-
- ActionTableOneLength : constant GC.ParserInteger :=
- 8247 ;
- --| Length (number of entries) in map ActionTableOne.
- subtype ActionTableOneRange is GC.ParserInteger
- range 1..ActionTableOneLength;
-
- ActionTableTwoLength : constant GC.ParserInteger :=
- 8247 ;
- --| Length (number of entries) in map ActionTableTwo.
- subtype ActionTableTwoRange is GC.ParserInteger
- range 1..ActionTableTwoLength;
-
- DefaultMapLength : constant GC.ParserInteger :=
- 945 ;
- --| Length (number of entries) in map Defaults.
- subtype DefaultMapRange is GC.ParserInteger range 1..DefaultMapLength;
-
- FollowMapLength : constant GC.ParserInteger :=
- 223 ;
- --| Length (number of entries) in the FollowMap.
-
- GrammarSymbolCountPlusOne : constant GC.ParserInteger :=
- 320 ;
- --| Number of symbols plus one in the parse tables.
- -- NYU Reference Name: NUM_INPUTS
-
- ActionTableSize : constant GC.ParserInteger :=
- 5501 ;
- --| Maximum entry in Action Tables referenced by hash
- --| function. Entries above TableSize are collision chains.
- -- NYU Reference Name: TABLE_SIZE
-
- ------------------------------------------------------------------
- -- Tables generated by Parse Tables Generator
- ------------------------------------------------------------------
-
- subtype GrammarSymbolRepRangePlusZero is
- GrammarSymbolRepRangePlusZeroCommon;
-
- GrammarSymbolTableIndex : constant
- array (GrammarSymbolRange'first .. GrammarSymbolRange'last * 2)
- of GC.ParserInteger :=
- ( 1, 0, 1, 5, 6, 8, 9, 14, 15, 20
- , 21, 23, 24, 26, 27, 31, 32, 33, 34, 38
- , 39, 42, 43, 46, 47, 54, 55, 61, 62, 66
- , 67, 71, 72, 77, 78, 79, 80, 83, 84, 88
- , 89, 91, 92, 96, 97, 105, 106, 109, 110, 112
- , 113, 120, 121, 127, 128, 131, 132, 133, 134, 135
- , 136, 137, 138, 144, 145, 148, 149, 151, 152, 154
- , 155, 157, 158, 161, 162, 163, 164, 165, 166, 171
- , 172, 174, 175, 181, 182, 187, 188, 194, 195, 203
- , 204, 208, 209, 213, 214, 219, 220, 222, 223, 229
- , 230, 235, 236, 242, 243, 248, 249, 256, 257, 263
- , 264, 267, 268, 276, 277, 280, 281, 284, 285, 287
- , 288, 291, 292, 296, 297, 300, 301, 303, 304, 313
- , 314, 328, 329, 342, 343, 359, 360, 360, 361, 361
- , 362, 362, 363, 363, 364, 364, 365, 365, 366, 366
- , 367, 367, 368, 368, 369, 369, 370, 370, 371, 371
- , 372, 372, 373, 373, 374, 374, 375, 377, 378, 379
- , 380, 381, 382, 383, 384, 385, 386, 387, 388, 389
- , 390, 391, 392, 393, 394, 395, 396, 397, 398, 412
- , 413, 416, 417, 420, 421, 431, 432, 461, 462, 467
- , 468, 485, 486, 502, 503, 520, 521, 536, 537, 555
- , 556, 577, 578, 596, 597, 612, 613, 631, 632, 652
- , 653, 673, 674, 693, 694, 708, 709, 726, 727, 740
- , 741, 768, 769, 778, 779, 791, 792, 812, 813, 839
- , 840, 863, 864, 878, 879, 904, 905, 933, 934, 960
- , 961, 983, 984, 1003, 1004, 1024, 1025, 1046, 1047, 1068
- , 1069, 1091, 1092, 1100, 1101, 1110, 1111, 1132, 1133, 1148
- , 1149, 1173, 1174, 1195, 1196, 1212, 1213, 1245, 1246, 1281
- , 1282, 1300, 1301, 1328, 1329, 1346, 1347, 1371, 1372, 1401
- , 1402, 1425, 1426, 1452, 1453, 1468, 1469, 1472, 1473, 1486
- , 1487, 1503, 1504, 1508, 1509, 1522, 1523, 1535, 1536, 1558
- , 1559, 1579, 1580, 1591, 1592, 1607, 1608, 1614, 1615, 1623
- , 1624, 1629, 1630, 1638, 1639, 1662, 1663, 1678, 1679, 1682
- , 1683, 1706, 1707, 1728, 1729, 1749, 1750, 1759, 1760, 1781
- , 1782, 1792, 1793, 1801, 1802, 1816, 1817, 1828, 1829, 1837
- , 1838, 1854, 1855, 1872, 1873, 1881, 1882, 1889, 1890, 1909
- , 1910, 1931, 1932, 1940, 1941, 1974, 1975, 1995, 1996, 2022
- , 2023, 2052, 2053, 2070, 2071, 2099, 2100, 2134, 2135, 2172
- , 2173, 2180, 2181, 2203, 2204, 2225, 2226, 2248, 2249, 2277
- , 2278, 2305, 2306, 2345, 2346, 2352, 2353, 2409, 2410, 2445
- , 2446, 2449, 2450, 2456, 2457, 2490, 2491, 2496, 2497, 2526
- , 2527, 2550, 2551, 2559, 2560, 2579, 2580, 2598, 2599, 2620
- , 2621, 2641, 2642, 2661, 2662, 2684, 2685, 2697, 2698, 2709
- , 2710, 2718, 2719, 2729, 2730, 2751, 2752, 2767, 2768, 2785
- , 2786, 2793, 2794, 2807, 2808, 2827, 2828, 2841, 2842, 2857
- , 2858, 2871, 2872, 2886, 2887, 2901, 2902, 2916, 2917, 2930
- , 2931, 2944, 2945, 2956, 2957, 2970, 2971, 2984, 2985, 2999
- , 3000, 3015, 3016, 3031, 3032, 3036, 3037, 3051, 3052, 3099
- , 3100, 3129, 3130, 3138, 3139, 3150, 3151, 3178, 3179, 3192
- , 3193, 3218, 3219, 3236, 3237, 3248, 3249, 3262, 3263, 3277
- , 3278, 3310, 3311, 3346, 3347, 3365, 3366, 3389, 3390, 3412
- , 3413, 3438, 3439, 3448, 3449, 3452, 3453, 3474, 3475, 3490
- , 3491, 3511, 3512, 3533, 3534, 3555, 3556, 3571, 3572, 3589
- , 3590, 3608, 3609, 3631, 3632, 3650, 3651, 3681, 3682, 3698
- , 3699, 3725, 3726, 3739, 3740, 3761, 3762, 3777, 3778, 3795
- , 3796, 3819, 3820, 3845, 3846, 3863, 3864, 3880, 3881, 3901
- , 3902, 3925, 3926, 3932, 3933, 3950, 3951, 3963, 3964, 3979
- , 3980, 3993, 3994, 4018, 4019, 4025, 4026, 4050, 4051, 4068
- , 4069, 4079, 4080, 4103, 4104, 4120, 4121, 4136, 4137, 4155
- , 4156, 4176, 4177, 4195, 4196, 4226, 4227, 4255, 4256, 4278
- , 4279, 4296, 4297, 4315, 4316, 4337, 4338, 4389, 4390, 4413
- , 4414, 4437, 4438, 4450, 4451, 4483, 4484, 4497, 4498, 4525
- , 4526, 4543, 4544, 4559, 4560, 4575, 4576, 4588, 4589, 4601
- , 4602, 4623, 4624, 4651, 4652, 4673, 4674, 4688) ;
-
- GrammarSymbolTable : constant String :=
- ('A','B','O','R','T','A','B','S','A','C'
- ,'C','E','P','T','A','C','C','E','S','S'
- ,'A','L','L','A','N','D','A','R','R','A'
- ,'Y','A','T','B','E','G','I','N','B','O'
- ,'D','Y','C','A','S','E','C','O','N','S'
- ,'T','A','N','T','D','E','C','L','A','R'
- ,'E','D','E','L','A','Y','D','E','L','T'
- ,'A','D','I','G','I','T','S','D','O','E'
- ,'L','S','E','E','L','S','I','F','E','N'
- ,'D','E','N','T','R','Y','E','X','C','E'
- ,'P','T','I','O','N','E','X','I','T','F'
- ,'O','R','F','U','N','C','T','I','O','N'
- ,'G','E','N','E','R','I','C','G','O','T'
- ,'O','I','F','I','N','I','S','L','I','M'
- ,'I','T','E','D','L','O','O','P','M','O'
- ,'D','N','E','W','N','O','T','N','U','L'
- ,'L','O','F','O','R','O','T','H','E','R'
- ,'S','O','U','T','P','A','C','K','A','G'
- ,'E','P','R','A','G','M','A','P','R','I'
- ,'V','A','T','E','P','R','O','C','E','D'
- ,'U','R','E','R','A','I','S','E','R','A'
- ,'N','G','E','R','E','C','O','R','D','R'
- ,'E','M','R','E','N','A','M','E','S','R'
- ,'E','T','U','R','N','R','E','V','E','R'
- ,'S','E','S','E','L','E','C','T','S','E'
- ,'P','A','R','A','T','E','S','U','B','T'
- ,'Y','P','E','T','A','S','K','T','E','R'
- ,'M','I','N','A','T','E','T','H','E','N'
- ,'T','Y','P','E','U','S','E','W','H','E'
- ,'N','W','H','I','L','E','W','I','T','H'
- ,'X','O','R','i','d','e','n','t','i','f'
- ,'i','e','r','n','u','m','e','r','i','c'
- ,'_','l','i','t','e','r','a','l','s','t'
- ,'r','i','n','g','_','l','i','t','e','r'
- ,'a','l','c','h','a','r','a','c','t','e'
- ,'r','_','l','i','t','e','r','a','l','&'
- ,''','(',')','*','+',',','-','.','/',':'
- ,';','<','=','>',''','|',''','=','>','.'
- ,'.','*','*',':','=','/','=','>','=','<'
- ,'=','<','<','>','>','<','>','c','o','m'
- ,'m','e','n','t','_','l','i','t','e','r'
- ,'a','l','$','E','O','F','$','A','C','C'
- ,'c','o','m','p','i','l','a','t','i','o'
- ,'n','g','e','n','e','r','a','l','_','c'
- ,'o','m','p','o','n','e','n','t','_','a'
- ,'s','s','o','c','i','a','t','i','o','n'
- ,'s','p','r','a','g','m','a','o','b','j'
- ,'e','c','t','_','d','e','c','l','a','r'
- ,'a','t','i','o','n','b','a','s','i','c'
- ,'_','d','e','c','l','a','r','a','t','i'
- ,'o','n','n','u','m','b','e','r','_','d'
- ,'e','c','l','a','r','a','t','i','o','n'
- ,'t','y','p','e','_','d','e','c','l','a'
- ,'r','a','t','i','o','n','s','u','b','t'
- ,'y','p','e','_','d','e','c','l','a','r'
- ,'a','t','i','o','n','s','u','b','p','r'
- ,'o','g','r','a','m','_','d','e','c','l'
- ,'a','r','a','t','i','o','n','p','a','c'
- ,'k','a','g','e','_','d','e','c','l','a'
- ,'r','a','t','i','o','n','t','a','s','k'
- ,'_','d','e','c','l','a','r','a','t','i'
- ,'o','n','g','e','n','e','r','i','c','_'
- ,'d','e','c','l','a','r','a','t','i','o'
- ,'n','e','x','c','e','p','t','i','o','n'
- ,'_','d','e','c','l','a','r','a','t','i'
- ,'o','n','g','e','n','e','r','i','c','_'
- ,'i','n','s','t','a','n','t','i','a','t'
- ,'i','o','n','r','e','n','a','m','i','n'
- ,'g','_','d','e','c','l','a','r','a','t'
- ,'i','o','n','i','d','e','n','t','i','f'
- ,'i','e','r','_','l','i','s','t','s','u'
- ,'b','t','y','p','e','_','i','n','d','i'
- ,'c','a','t','i','o','n','[',':','=','e'
- ,'x','p','r','e','s','s','i','o','n',']'
- ,'c','o','n','s','t','r','a','i','n','e'
- ,'d','_','a','r','r','a','y','_','d','e'
- ,'f','i','n','i','t','i','o','n','e','x'
- ,'p','r','e','s','s','i','o','n','{',','
- ,'i','d','e','n','t','i','f','i','e','r'
- ,'}','f','u','l','l','_','t','y','p','e'
- ,'_','d','e','c','l','a','r','a','t','i'
- ,'o','n','i','n','c','o','m','p','l','e'
- ,'t','e','_','t','y','p','e','_','d','e'
- ,'c','l','a','r','a','t','i','o','n','p'
- ,'r','i','v','a','t','e','_','t','y','p'
- ,'e','_','d','e','c','l','a','r','a','t'
- ,'i','o','n','t','y','p','e','_','d','e'
- ,'f','i','n','i','t','i','o','n','d','i'
- ,'s','c','r','i','m','i','n','a','n','t'
- ,'_','s','p','e','c','i','f','i','c','a'
- ,'t','i','o','n','{',';','d','i','s','c'
- ,'r','i','m','i','n','a','n','t','_','s'
- ,'p','e','c','i','f','i','c','a','t','i'
- ,'o','n','}','e','n','u','m','e','r','a'
- ,'t','i','o','n','_','t','y','p','e','_'
- ,'d','e','f','i','n','i','t','i','o','n'
- ,'i','n','t','e','g','e','r','_','t','y'
- ,'p','e','_','d','e','f','i','n','i','t'
- ,'i','o','n','r','e','a','l','_','t','y'
- ,'p','e','_','d','e','f','i','n','i','t'
- ,'i','o','n','a','r','r','a','y','_','t'
- ,'y','p','e','_','d','e','f','i','n','i'
- ,'t','i','o','n','r','e','c','o','r','d'
- ,'_','t','y','p','e','_','d','e','f','i'
- ,'n','i','t','i','o','n','a','c','c','e'
- ,'s','s','_','t','y','p','e','_','d','e'
- ,'f','i','n','i','t','i','o','n','d','e'
- ,'r','i','v','e','d','_','t','y','p','e'
- ,'_','d','e','f','i','n','i','t','i','o'
- ,'n','t','y','p','e','_','m','a','r','k'
- ,'c','o','n','s','t','r','a','i','n','t'
- ,'t','y','p','e','_','n','a','m','e','|'
- ,'s','u','b','t','y','p','e','_','n','a'
- ,'m','e','r','a','n','g','e','_','c','o'
- ,'n','s','t','r','a','i','n','t','f','l'
- ,'o','a','t','i','n','g','_','p','o','i'
- ,'n','t','_','c','o','n','s','t','r','a'
- ,'i','n','t','f','i','x','e','d','_','p'
- ,'o','i','n','t','_','c','o','n','s','t'
- ,'r','a','i','n','t','s','i','m','p','l'
- ,'e','_','e','x','p','r','e','s','s','i'
- ,'o','n','e','n','u','m','e','r','a','t'
- ,'i','o','n','_','l','i','t','e','r','a'
- ,'l','_','s','p','e','c','i','f','i','c'
- ,'a','t','i','o','n','{',',','e','n','u'
- ,'m','e','r','a','t','i','o','n','_','l'
- ,'i','t','e','r','a','l','_','s','p','e'
- ,'c','i','f','i','c','a','t','i','o','n'
- ,'}','e','n','u','m','e','r','a','t','i'
- ,'o','n','_','l','i','t','e','r','a','l'
- ,'f','l','o','a','t','i','n','g','_','a'
- ,'c','c','u','r','a','c','y','_','d','e'
- ,'f','i','n','i','t','i','o','n','[','r'
- ,'a','n','g','e','_','c','o','n','s','t'
- ,'r','a','i','n','t',']','f','i','x','e'
- ,'d','_','a','c','c','u','r','a','c','y'
- ,'_','d','e','f','i','n','i','t','i','o'
- ,'n','u','n','c','o','n','s','t','r','a'
- ,'i','n','e','d','_','a','r','r','a','y'
- ,'_','d','e','f','i','n','i','t','i','o'
- ,'n','i','n','d','e','x','_','s','u','b'
- ,'t','y','p','e','_','d','e','f','i','n'
- ,'i','t','i','o','n','{',',','i','n','d'
- ,'e','x','_','s','u','b','t','y','p','e'
- ,'_','d','e','f','i','n','i','t','i','o'
- ,'n','}','i','n','d','e','x','_','c','o'
- ,'n','s','t','r','a','i','n','t','n','a'
- ,'m','e','d','i','s','c','r','e','t','e'
- ,'_','r','a','n','g','e','{',',','d','i'
- ,'s','c','r','e','t','e','_','r','a','n'
- ,'g','e','}','r','a','n','g','e','c','o'
- ,'m','p','o','n','e','n','t','_','l','i'
- ,'s','t','{','p','r','a','g','m','a','_'
- ,'d','e','c','l','}','{','c','o','m','p'
- ,'o','n','e','n','t','_','d','e','c','l'
- ,'a','r','a','t','i','o','n','}','c','o'
- ,'m','p','o','n','e','n','t','_','d','e'
- ,'c','l','a','r','a','t','i','o','n','v'
- ,'a','r','i','a','n','t','_','p','a','r'
- ,'t','{','p','r','a','g','m','a','_','v'
- ,'a','r','i','a','n','t','}','v','a','r'
- ,'i','a','n','t','{','v','a','r','i','a'
- ,'n','t','}','c','h','o','i','c','e','{'
- ,'|','c','h','o','i','c','e','}','{','b'
- ,'a','s','i','c','_','d','e','c','l','a'
- ,'r','a','t','i','v','e','_','i','t','e'
- ,'m','}','d','e','c','l','a','r','a','t'
- ,'i','v','e','_','p','a','r','t','b','o'
- ,'d','y','{','l','a','t','e','r','_','d'
- ,'e','c','l','a','r','a','t','i','v','e'
- ,'_','i','t','e','m','}','b','a','s','i'
- ,'c','_','d','e','c','l','a','r','a','t'
- ,'i','v','e','_','i','t','e','m','r','e'
- ,'p','r','e','s','e','n','t','a','t','i'
- ,'o','n','_','c','l','a','u','s','e','u'
- ,'s','e','_','c','l','a','u','s','e','l'
- ,'a','t','e','r','_','d','e','c','l','a'
- ,'r','a','t','i','v','e','_','i','t','e'
- ,'m','p','r','o','p','e','r','_','b','o'
- ,'d','y','b','o','d','y','_','s','t','u'
- ,'b','s','u','b','p','r','o','g','r','a'
- ,'m','_','b','o','d','y','p','a','c','k'
- ,'a','g','e','_','b','o','d','y','t','a'
- ,'s','k','_','b','o','d','y','i','n','d'
- ,'e','x','e','d','_','c','o','m','p','o'
- ,'n','e','n','t','s','e','l','e','c','t'
- ,'e','d','_','c','o','m','p','o','n','e'
- ,'n','t','a','t','t','r','i','b','u','t'
- ,'e','s','e','l','e','c','t','o','r','a'
- ,'t','t','r','i','b','u','t','e','_','d'
- ,'e','s','i','g','n','a','t','o','r','c'
- ,'o','m','p','o','n','e','n','t','_','a'
- ,'s','s','o','c','i','a','t','i','o','n'
- ,'s','a','g','g','r','e','g','a','t','e'
- ,'e','x','p','r','e','s','s','i','o','n'
- ,',','e','x','p','r','e','s','s','i','o'
- ,'n','{',',','e','x','p','r','e','s','s'
- ,'i','o','n','}','[',',','o','t','h','e'
- ,'r','s','=','>','e','x','p','r','e','s'
- ,'s','i','o','n',']','c','h','o','i','c'
- ,'e','{','|','c','h','o','i','c','e','}'
- ,'=','>','e','x','p','r','e','s','s','i'
- ,'o','n','{',',','c','h','o','i','c','e'
- ,'{','|','c','h','o','i','c','e','}','='
- ,'>','e','x','p','r','e','s','s','i','o'
- ,'n','}','o','t','h','e','r','s','=','>'
- ,'e','x','p','r','e','s','s','i','o','n'
- ,'g','a','_','e','x','p','r','e','s','s'
- ,'i','o','n','{',',','g','a','_','e','x'
- ,'p','r','e','s','s','i','o','n','}','i'
- ,'d','e','n','t','i','f','i','e','r','{'
- ,'|','i','d','e','n','t','i','f','i','e'
- ,'r','}','=','>','e','x','p','r','e','s'
- ,'s','i','o','n','{',',','i','d','e','n'
- ,'t','i','f','i','e','r','{','|','i','d'
- ,'e','n','t','i','f','i','e','r','}','='
- ,'>','e','x','p','r','e','s','s','i','o'
- ,'n','}','r','e','l','a','t','i','o','n'
- ,'r','e','l','a','t','i','o','n','{','A'
- ,'N','D','_','_','r','e','l','a','t','i'
- ,'o','n','}','r','e','l','a','t','i','o'
- ,'n','{','O','R','_','_','r','e','l','a'
- ,'t','i','o','n','}','r','e','l','a','t'
- ,'i','o','n','{','X','O','R','_','_','r'
- ,'e','l','a','t','i','o','n','}','r','e'
- ,'l','a','t','i','o','n','{','A','N','D'
- ,'_','_','T','H','E','N','_','_','r','e'
- ,'l','a','t','i','o','n','}','r','e','l'
- ,'a','t','i','o','n','{','O','R','_','_'
- ,'E','L','S','E','_','_','r','e','l','a'
- ,'t','i','o','n','}','[','r','e','l','a'
- ,'t','i','o','n','a','l','_','o','p','e'
- ,'r','a','t','o','r','_','_','s','i','m'
- ,'p','l','e','_','e','x','p','r','e','s'
- ,'s','i','o','n',']','[','N','O','T',']'
- ,'I','N','[','u','n','a','r','y','_','a'
- ,'d','d','i','n','g','_','o','p','e','r'
- ,'a','t','o','r',']','t','e','r','m','{'
- ,'b','i','n','a','r','y','_','a','d','d'
- ,'i','n','g','_','o','p','e','r','a','t'
- ,'o','r','_','_','t','e','r','m','}','f'
- ,'a','c','t','o','r','{','m','u','l','t'
- ,'i','p','l','y','i','n','g','_','o','p'
- ,'e','r','a','t','o','r','_','_','f','a'
- ,'c','t','o','r','}','t','e','r','m','p'
- ,'r','i','m','a','r','y','[','e','x','p'
- ,'o','n','e','n','t','i','a','t','i','n'
- ,'g','_','o','p','e','r','a','t','o','r'
- ,'_','_','p','r','i','m','a','r','y',']'
- ,'f','a','c','t','o','r','h','i','g','h'
- ,'_','p','r','e','c','e','d','e','n','c'
- ,'e','_','u','n','a','r','y','_','o','p'
- ,'e','r','a','t','o','r','p','a','r','e'
- ,'n','t','h','e','s','i','z','e','d','_'
- ,'e','x','p','r','e','s','s','i','o','n'
- ,'a','l','l','o','c','a','t','o','r','q'
- ,'u','a','l','i','f','i','e','d','_','e'
- ,'x','p','r','e','s','s','i','o','n','r'
- ,'e','l','a','t','i','o','n','a','l','_'
- ,'o','p','e','r','a','t','o','r','b','i'
- ,'n','a','r','y','_','a','d','d','i','n'
- ,'g','_','o','p','e','r','a','t','o','r'
- ,'u','n','a','r','y','_','a','d','d','i'
- ,'n','g','_','o','p','e','r','a','t','o'
- ,'r','m','u','l','t','i','p','l','y','i'
- ,'n','g','_','o','p','e','r','a','t','o'
- ,'r','e','x','p','o','n','e','n','t','i'
- ,'a','t','i','n','g','_','o','p','e','r'
- ,'a','t','o','r','e','x','p','a','n','d'
- ,'e','d','_','n','a','m','e','{','p','r'
- ,'a','g','m','a','_','s','t','m','}','s'
- ,'t','a','t','e','m','e','n','t','{','s'
- ,'t','a','t','e','m','e','n','t','}','s'
- ,'e','q','u','e','n','c','e','_','o','f'
- ,'_','s','t','a','t','e','m','e','n','t'
- ,'s','s','i','m','p','l','e','_','s','t'
- ,'a','t','e','m','e','n','t','c','o','m'
- ,'p','o','u','n','d','_','s','t','a','t'
- ,'e','m','e','n','t','{','l','a','b','e'
- ,'l','}','+','n','u','l','l','_','s','t'
- ,'a','t','e','m','e','n','t','a','s','s'
- ,'i','g','n','m','e','n','t','_','s','t'
- ,'a','t','e','m','e','n','t','e','x','i'
- ,'t','_','s','t','a','t','e','m','e','n'
- ,'t','r','e','t','u','r','n','_','s','t'
- ,'a','t','e','m','e','n','t','g','o','t'
- ,'o','_','s','t','a','t','e','m','e','n'
- ,'t','d','e','l','a','y','_','s','t','a'
- ,'t','e','m','e','n','t','a','b','o','r'
- ,'t','_','s','t','a','t','e','m','e','n'
- ,'t','r','a','i','s','e','_','s','t','a'
- ,'t','e','m','e','n','t','c','o','d','e'
- ,'_','s','t','a','t','e','m','e','n','t'
- ,'c','a','l','l','_','s','t','a','t','e'
- ,'m','e','n','t','i','f','_','s','t','a'
- ,'t','e','m','e','n','t','c','a','s','e'
- ,'_','s','t','a','t','e','m','e','n','t'
- ,'l','o','o','p','_','s','t','a','t','e'
- ,'m','e','n','t','b','l','o','c','k','_'
- ,'s','t','a','t','e','m','e','n','t','a'
- ,'c','c','e','p','t','_','s','t','a','t'
- ,'e','m','e','n','t','s','e','l','e','c'
- ,'t','_','s','t','a','t','e','m','e','n'
- ,'t','l','a','b','e','l','c','o','n','d'
- ,'i','t','i','o','n','_','_','T','H','E'
- ,'N','{','E','L','S','I','F','_','_','c'
- ,'o','n','d','i','t','i','o','n','_','_'
- ,'T','H','E','N','_','_','s','e','q','u'
- ,'e','n','c','e','_','o','f','_','s','t'
- ,'a','t','e','m','e','n','t','s','}','['
- ,'E','L','S','E','_','_','s','e','q','u'
- ,'e','n','c','e','_','o','f','_','s','t'
- ,'a','t','e','m','e','n','t','s',']','c'
- ,'o','n','d','i','t','i','o','n','{','p'
- ,'r','a','g','m','a','_','a','l','t','}'
- ,'{','c','a','s','e','_','s','t','a','t'
- ,'e','m','e','n','t','_','a','l','t','e'
- ,'r','n','a','t','i','v','e','}','W','H'
- ,'E','N','_','c','h','o','i','c','e','_'
- ,'=','>','c','a','s','e','_','s','t','a'
- ,'t','e','m','e','n','t','_','a','l','t'
- ,'e','r','n','a','t','i','v','e','[','l'
- ,'o','o','p','_','i','d','e','n','t','i'
- ,'f','i','e','r',':',']','[','i','d','e'
- ,'n','t','i','f','i','e','r',']','i','t'
- ,'e','r','a','t','i','o','n','_','r','u'
- ,'l','e','b','e','g','i','n','_','e','n'
- ,'d','_','b','l','o','c','k','d','e','c'
- ,'l','a','r','a','t','i','v','e','_','p'
- ,'a','r','t','_','_','b','e','g','i','n'
- ,'_','e','n','d','_','b','l','o','c','k'
- ,'{','p','r','a','g','m','a','_','a','l'
- ,'t','}','_','_','e','x','c','e','p','t'
- ,'i','o','n','_','h','a','n','d','l','e'
- ,'r','_','l','i','s','t','[','b','l','o'
- ,'c','k','_','i','d','e','n','t','i','f'
- ,'i','e','r',':',']','s','u','b','p','r'
- ,'o','g','r','a','m','_','s','p','e','c'
- ,'i','f','i','c','a','t','i','o','n','p'
- ,'a','r','a','m','e','t','e','r','_','s'
- ,'p','e','c','i','f','i','c','a','t','i'
- ,'o','n','{',';','p','a','r','a','m','e'
- ,'t','e','r','_','s','p','e','c','i','f'
- ,'i','c','a','t','i','o','n','}','d','e'
- ,'s','i','g','n','a','t','o','r','m','o'
- ,'d','e','g','e','n','e','r','i','c','_'
- ,'p','a','r','a','m','e','t','e','r','_'
- ,'m','o','d','e','[','e','n','d','_','d'
- ,'e','s','i','g','n','a','t','o','r',']'
- ,'p','a','c','k','a','g','e','_','s','p'
- ,'e','c','i','f','i','c','a','t','i','o'
- ,'n','p','a','c','k','a','g','e','_','s'
- ,'p','e','c','_','i','n','d','i','c','a'
- ,'t','o','r','p','a','c','k','a','g','e'
- ,'_','b','o','d','y','_','i','n','d','i'
- ,'c','a','t','o','r','{',',','e','x','p'
- ,'a','n','d','e','d','_','n','a','m','e'
- ,'}','t','a','s','k','_','s','p','e','c'
- ,'i','f','i','c','a','t','i','o','n','{'
- ,'e','n','t','r','y','_','d','e','c','l'
- ,'a','r','a','t','i','o','n','}','{','r'
- ,'e','p','r','e','s','e','n','t','a','t'
- ,'i','o','n','_','c','l','a','u','s','e'
- ,'}','t','a','s','k','_','b','o','d','y'
- ,'_','i','n','d','i','c','a','t','o','r'
- ,'[','(','d','i','s','c','r','e','t','e'
- ,'_','r','a','n','g','e',')',']','[','f'
- ,'o','r','m','a','l','_','p','a','r','t'
- ,']','e','n','t','r','y','_','d','e','c'
- ,'l','a','r','a','t','i','o','n','[','('
- ,'e','x','p','r','e','s','s','i','o','n'
- ,')',']','[','f','o','r','m','a','l','_'
- ,'p','a','r','t',']','s','e','l','e','c'
- ,'t','i','v','e','_','w','a','i','t','c'
- ,'o','n','d','i','t','i','o','n','a','l'
- ,'_','e','n','t','r','y','_','c','a','l'
- ,'l','t','i','m','e','d','_','e','n','t'
- ,'r','y','_','c','a','l','l','s','e','l'
- ,'e','c','t','_','a','l','t','e','r','n'
- ,'a','t','i','v','e','{','O','R','_','_'
- ,'s','e','l','e','c','t','_','a','l','t'
- ,'e','r','n','a','t','i','v','e','}','s'
- ,'e','l','e','c','t','i','v','e','_','w'
- ,'a','i','t','_','a','l','t','e','r','n'
- ,'a','t','i','v','e','a','c','c','e','p'
- ,'t','_','a','l','t','e','r','n','a','t'
- ,'i','v','e','d','e','l','a','y','_','a'
- ,'l','t','e','r','n','a','t','i','v','e'
- ,'t','e','r','m','i','n','a','t','e','_'
- ,'a','l','t','e','r','n','a','t','i','v'
- ,'e','[','s','e','q','u','e','n','c','e'
- ,'_','o','f','_','s','t','a','t','e','m'
- ,'e','n','t','s',']','{',',','n','a','m'
- ,'e','}','{','c','o','m','p','i','l','a'
- ,'t','i','o','n','_','u','n','i','t','}'
- ,'p','r','a','g','m','a','_','h','e','a'
- ,'d','e','r','c','o','m','p','i','l','a'
- ,'t','i','o','n','_','u','n','i','t','c'
- ,'o','n','t','e','x','t','_','c','l','a'
- ,'u','s','e','l','i','b','r','a','r','y'
- ,'_','o','r','_','s','e','c','o','n','d'
- ,'a','r','y','_','u','n','i','t','s','u'
- ,'b','u','n','i','t','{','w','i','t','h'
- ,'_','c','l','a','u','s','e','{','u','s'
- ,'e','_','c','l','a','u','s','e','}','}'
- ,'{',',','u','s','e','d','_','i','d','e'
- ,'n','t','i','f','i','e','r','}','w','i'
- ,'t','h','_','c','l','a','u','s','e','W'
- ,'H','E','N','_','e','x','c','e','p','t'
- ,'i','o','n','_','c','h','o','i','c','e'
- ,'_','=','>','e','x','c','e','p','t','i'
- ,'o','n','_','h','a','n','d','l','e','r'
- ,'e','x','c','e','p','t','i','o','n','_'
- ,'c','h','o','i','c','e','{','|','e','x'
- ,'c','e','p','t','i','o','n','_','c','h'
- ,'o','i','c','e','}','g','e','n','e','r'
- ,'i','c','_','s','p','e','c','i','f','i'
- ,'c','a','t','i','o','n','g','e','n','e'
- ,'r','i','c','_','f','o','r','m','a','l'
- ,'_','p','a','r','t','{','g','e','n','e'
- ,'r','i','c','_','p','a','r','a','m','e'
- ,'t','e','r','_','d','e','c','l','a','r'
- ,'a','t','i','o','n','}','g','e','n','e'
- ,'r','i','c','_','p','a','r','a','m','e'
- ,'t','e','r','_','d','e','c','l','a','r'
- ,'a','t','i','o','n','g','e','n','e','r'
- ,'i','c','_','t','y','p','e','_','d','e'
- ,'f','i','n','i','t','i','o','n','[','I'
- ,'S','_','_','n','a','m','e','_','_','o'
- ,'r','_','_','<','>',']','g','e','n','e'
- ,'r','i','c','_','a','s','s','o','c','i'
- ,'a','t','i','o','n','{',',','g','e','n'
- ,'e','r','i','c','_','a','s','s','o','c'
- ,'i','a','t','i','o','n','}','[','g','e'
- ,'n','e','r','i','c','_','f','o','r','m'
- ,'a','l','_','p','a','r','a','m','e','t'
- ,'e','r','=','>',']','g','e','n','e','r'
- ,'i','c','_','a','c','t','u','a','l','_'
- ,'p','a','r','a','m','e','t','e','r','g'
- ,'e','n','e','r','i','c','_','f','o','r'
- ,'m','a','l','_','p','a','r','a','m','e'
- ,'t','e','r','g','e','n','e','r','i','c'
- ,'_','a','c','t','u','a','l','_','p','a'
- ,'r','a','m','e','t','e','r','l','e','n'
- ,'g','t','h','_','c','l','a','u','s','e'
- ,'e','n','u','m','e','r','a','t','i','o'
- ,'n','_','r','e','p','r','e','s','e','n'
- ,'t','a','t','i','o','n','_','c','l','a'
- ,'u','s','e','a','d','d','r','e','s','s'
- ,'_','c','l','a','u','s','e','r','e','c'
- ,'o','r','d','_','r','e','p','r','e','s'
- ,'e','n','t','a','t','i','o','n','_','c'
- ,'l','a','u','s','e','{','c','o','m','p'
- ,'o','n','e','n','t','_','c','l','a','u'
- ,'s','e','}','a','l','i','g','n','m','e'
- ,'n','t','_','c','l','a','u','s','e','c'
- ,'o','m','p','o','n','e','n','t','_','c'
- ,'l','a','u','s','e','g','a','_','e','x'
- ,'p','r','e','s','s','i','o','n','{','|'
- ,'i','d','e','n','t','i','f','i','e','r'
- ,'}','E','L','S','I','F','_','_','c','o'
- ,'n','d','i','t','i','o','n','_','_','T'
- ,'H','E','N','E','L','S','E','_','_','s'
- ,'e','q','u','e','n','c','e','_','o','f'
- ,'_','s','t','a','t','e','m','e','n','t'
- ,'s','e','x','c','e','p','t','i','o','n'
- ,'_','h','a','n','d','l','e','r','_','l'
- ,'i','s','t','u','s','e','_','c','l','a'
- ,'u','s','e','_','l','i','s','t') ;
- --| Table of symbols used in the grammar.
- -- NYU Reference Name: NO_SYM
-
- LeftHandSide :
- constant array (LeftHandSideRange)
- of GrammarSymbolRange :=
- ( 100, 100, 102, 102, 102, 102, 102, 102, 102, 102
- , 102, 102, 102, 101, 101, 101, 101, 103, 113, 104
- , 104, 104, 119, 119, 122, 122, 122, 122, 122, 122
- , 122, 105, 114, 114, 132, 133, 133, 133, 133, 131
- , 135, 135, 125, 139, 141, 141, 126, 127, 127, 136
- , 142, 137, 144, 128, 128, 145, 116, 146, 148, 150
- , 150, 152, 152, 129, 153, 153, 153, 156, 123, 157
- , 159, 159, 161, 161, 161, 130, 120, 120, 164, 164
- , 167, 167, 167, 170, 170, 170, 170, 170, 170, 170
- , 165, 165, 171, 171, 171, 149, 149, 149, 149, 149
- , 149, 176, 177, 177, 179, 179, 179, 178, 180, 180
- , 180, 180, 182, 181, 181, 181, 181, 181, 99, 99
- , 99, 117, 117, 117, 117, 117, 117, 191, 191, 138
- , 201, 204, 204, 206, 202, 202, 202, 202, 202, 202
- , 202, 209, 209, 209, 209, 209, 209, 210, 210, 210
- , 211, 211, 205, 205, 212, 212, 212, 212, 213, 208
- , 208, 207, 207, 207, 207, 218, 216, 216, 216, 216
- , 219, 219, 219, 219, 219, 219, 219, 219, 219, 219
- , 220, 220, 220, 220, 220, 220, 238, 222, 223, 232
- , 242, 233, 246, 245, 245, 234, 234, 249, 249, 249
- , 251, 250, 250, 235, 235, 224, 224, 224, 224, 225
- , 225, 226, 106, 254, 254, 254, 254, 257, 257, 255
- , 258, 258, 259, 259, 259, 173, 231, 107, 261, 261
- , 262, 174, 174, 263, 121, 121, 121, 121, 169, 112
- , 112, 112, 112, 108, 265, 265, 265, 265, 175, 268
- , 270, 236, 236, 227, 237, 237, 237, 272, 275, 275
- , 277, 277, 277, 278, 279, 280, 273, 274, 228, 98
- , 284, 285, 285, 285, 287, 287, 287, 287, 287, 287
- , 287, 286, 291, 172, 172, 172, 288, 110, 293, 292
- , 292, 294, 229, 229, 109, 296, 296, 297, 299, 299
- , 299, 299, 300, 300, 300, 300, 300, 300, 300, 300
- , 111, 111, 111, 111, 111, 111, 302, 305, 305, 306
- , 168, 168, 168, 168, 307, 308, 310, 310, 313, 312
- , 309, 230, 154, 154, 158, 158, 215, 215, 243, 243
- , 115, 115, 118, 118, 134, 214, 214, 140, 140, 143
- , 143, 147, 147, 151, 151, 155, 155, 124, 124, 160
- , 160, 162, 162, 163, 163, 166, 166, 183, 183, 185
- , 186, 186, 184, 184, 187, 314, 314, 314, 188, 188
- , 189, 190, 190, 315, 315, 192, 192, 193, 193, 194
- , 194, 195, 195, 196, 196, 197, 197, 198, 198, 199
- , 199, 199, 200, 200, 203, 203, 217, 217, 221, 221
- , 240, 240, 241, 241, 317, 239, 316, 244, 244, 247
- , 247, 248, 248, 253, 253, 252, 318, 318, 256, 256
- , 260, 260, 260, 264, 264, 266, 266, 267, 267, 269
- , 269, 269, 269, 271, 271, 271, 271, 276, 276, 281
- , 281, 282, 282, 283, 283, 289, 289, 319, 319, 290
- , 290, 295, 295, 298, 298, 301, 301, 301, 303, 303
- , 304, 304, 311, 311) ;
- --| Map of the grammar rule number (constant array index) to
- --| numeric value of left hand side symbol.
- -- NYU Reference Name: LHS
-
- RightHandSide :
- constant array (RightHandSideRange)
- of GC.ParserInteger :=
- ( 6, 3, 1, 1, 1, 1, 1, 1, 1, 1
- , 1, 1, 1, 5, 6, 5, 6, 6, 2, 1
- , 1, 1, 5, 9, 1, 1, 1, 1, 1, 1
- , 1, 5, 1, 2, 1, 1, 1, 1, 3, 2
- , 2, 4, 4, 1, 1, 1, 1, 1, 1, 2
- , 2, 2, 2, 1, 1, 7, 4, 3, 4, 2
- , 1, 1, 3, 4, 4, 4, 3, 5, 4, 9
- , 5, 4, 1, 3, 2, 2, 3, 7, 1, 3
- , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- , 1, 4, 3, 3, 1, 1, 1, 3, 1, 1
- , 1, 1, 3, 2, 5, 5, 3, 1, 1, 4
- , 2, 1, 1, 1, 1, 1, 1, 2, 3, 1
- , 1, 2, 2, 3, 1, 1, 1, 1, 1, 1
- , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- , 1, 1, 1, 1, 1, 1, 1, 1, 1, 3
- , 3, 2, 5, 4, 4, 3, 1, 1, 2, 2
- , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- , 1, 1, 1, 1, 1, 1, 3, 2, 4, 8
- , 1, 8, 2, 4, 3, 7, 8, 2, 4, 5
- , 2, 3, 5, 5, 4, 2, 4, 3, 5, 2
- , 3, 3, 2, 2, 6, 4, 8, 1, 1, 4
- , 1, 2, 1, 2, 3, 5, 2, 2, 4, 6
- , 3, 5, 4, 4, 6, 10, 5, 9, 4, 6
- , 6, 5, 4, 2, 2, 3, 7, 8, 4, 4
- , 4, 4, 8, 3, 1, 1, 1, 7, 5, 2
- , 1, 1, 1, 2, 2, 3, 9, 10, 4, 1
- , 2, 5, 2, 2, 1, 1, 1, 1, 1, 1
- , 1, 1, 4, 4, 6, 6, 5, 4, 2, 4
- , 3, 1, 2, 3, 2, 2, 2, 2, 5, 5
- , 9, 4, 3, 2, 2, 2, 2, 1, 1, 1
- , 6, 10, 6, 10, 5, 9, 1, 1, 1, 1
- , 1, 1, 1, 1, 5, 5, 8, 9, 5, 4
- , 6, 4, 0, 2, 0, 2, 0, 2, 0, 2
- , 0, 2, 0, 3, 1, 1, 3, 0, 3, 0
- , 1, 0, 3, 0, 3, 0, 3, 0, 3, 0
- , 2, 0, 3, 1, 3, 1, 3, 3, 3, 4
- , 0, 3, 0, 2, 3, 1, 3, 2, 1, 3
- , 4, 0, 3, 0, 3, 3, 3, 3, 3, 3
- , 3, 4, 4, 4, 4, 0, 2, 1, 2, 1
- , 2, 3, 1, 3, 0, 2, 1, 3, 1, 2
- , 0, 3, 0, 1, 2, 2, 3, 1, 2, 0
- , 2, 0, 1, 0, 2, 2, 1, 2, 0, 3
- , 0, 1, 1, 0, 3, 1, 3, 0, 3, 0
- , 4, 3, 7, 0, 4, 3, 7, 0, 3, 1
- , 1, 0, 3, 1, 2, 0, 3, 1, 3, 0
- , 3, 0, 3, 0, 2, 0, 2, 2, 0, 3
- , 1, 3, 1, 3) ;
- --| Map of the grammar rule number (constant array index) to
- --| size of right hand sides (number of symbols).
- -- NYU Reference Name: RHS
-
- ActionTableOne :
- constant array (ActionTableOneRange)
- of GC.ParserInteger :=
- ( 0, 0, 6920, 6923, 202, 203, 0, 0, 0, 0
- , 79, 0, 0, 0, 0, 0, 609, 0, 0, 793
- , 0, 0, 0, 49, 50, 6927, 229, 0, 0, 6930
- , 565, 0, 0, 0, 0, 53, 6933, 0, 55, 56
- , 6936, 6939, 59, 60, 0, 0, 61, 62, 63, 6942
- , 0, 65, 66, 67, 68, 69, 0, 0, 70, 0
- , 0, 0, 312, 6945, 0, 40, 41, 0, 597, 0
- , 0, 0, 0, 0, 313, 0, 124, 34, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 169, 0, 0
- , 0, 823, 0, 0, 0, 295, 0, 40, 41, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 35
- , 36, 37, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 316, 0, 0, 672, 0, 0, 0, 0
- , 0, 0, 0, 0, 633, 260, 0, 0, 0, 6948
- , 39, 40, 41, 0, 170, 42, 0, 720, 43, 0
- , 44, 0, 0, 0, 0, 0, 96, 0, 0, 0
- , 0, 71, 0, 0, 644, 0, 0, 316, 0, 904
- , 873, 6951, 6954, 37, 49, 50, 51, 0, 0, 296
- , 0, 0, 0, 0, 0, 0, 508, 0, 0, 0
- , 0, 0, 341, 0, 0, 0, 0, 0, 351, 0
- , 767, 102, 39, 40, 41, 0, 6957, 6960, 297, 0
- , 43, 0, 6963, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 6966, 0, 98, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 344, 615, 0, 42, 0
- , 0, 0, 0, 0, 0, 0, 0, 393, 0, 0
- , 49, 50, 51, 566, 0, 0, 52, 0, 0, 0
- , 0, 0, 0, 96, 0, 216, 0, 0, 0, 0
- , 0, 0, 0, 61, 6969, 63, 64, 0, 65, 66
- , 67, 6972, 69, 0, 915, 6976, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 112, 277, 0, 0, 0, 0
- , 113, 721, 49, 6980, 6983, 0, 0, 0, 52, 0
- , 0, 0, 738, 6986, 6989, 0, 0, 55, 56, 57
- , 6992, 59, 6996, 0, 0, 61, 62, 63, 6999, 794
- , 65, 66, 67, 7002, 69, 0, 1342, 70, 924, 7005
- , 0, 0, 0, 0, 0, 114, 115, 116, 1019, 1019
- , 231, 0, 0, 7008, 119, 120, 0, 0, 0, 0
- , 0, 0, 509, 326, 0, 567, 0, 0, 568, 0
- , 0, 0, 0, 0, 0, 719, 0, 925, 0, 0
- , 510, 0, 98, 0, 0, 0, 0, 0, 0, 34
- , 217, 0, 0, 0, 0, 0, 0, 487, 0, 0
- , 0, 0, 99, 0, 0, 298, 0, 0, 3, 0
- , 0, 0, 0, 0, 0, 0, 782, 0, 916, 102
- , 0, 7011, 7014, 37, 488, 0, 0, 169, 0, 0
- , 0, 0, 0, 0, 0, 0, 926, 0, 0, 125
- , 126, 0, 0, 0, 0, 0, 127, 0, 0, 0
- , 0, 102, 39, 40, 41, 0, 0, 42, 0, 0
- , 0, 121, 7017, 647, 217, 96, 159, 0, 0, 0
- , 0, 0, 0, 123, 0, 0, 726, 874, 0, 0
- , 0, 0, 0, 0, 170, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 720, 734, 0, 0, 0, 407, 0
- , 7020, 0, 0, 0, 7023, 0, 1370, 0, 409, 0
- , 1370, 410, 129, 0, 0, 7026, 7029, 1396, 0, 0
- , 7032, 7036, 7039, 0, 7042, 7045, 0, 0, 0, 1366
- , 0, 691, 327, 414, 0, 1396, 0, 0, 0, 169
- , 0, 0, 415, 0, 0, 0, 0, 7048, 35, 7051
- , 37, 0, 49, 50, 51, 0, 0, 0, 7054, 0
- , 0, 418, 0, 7057, 41, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 62, 153, 7061, 39
- , 7064, 7067, 7070, 7073, 7077, 6, 7, 43, 419, 7081
- , 0, 0, 0, 0, 0, 0, 420, 0, 0, 0
- , 0, 0, 0, 0, 277, 200, 7086, 202, 203, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 124, 739, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 34, 905, 159, 0
- , 0, 0, 0, 0, 125, 7089, 7092, 0, 0, 0
- , 0, 7095, 0, 0, 0, 0, 0, 721, 0, 0
- , 0, 0, 151, 0, 0, 242, 0, 927, 7098, 36
- , 37, 0, 49, 50, 51, 100, 0, 0, 0, 0
- , 0, 225, 0, 0, 0, 9, 278, 0, 0, 7101
- , 7104, 51, 0, 0, 0, 52, 225, 0, 102, 7107
- , 40, 41, 0, 170, 42, 894, 0, 43, 0, 7110
- , 0, 0, 7113, 62, 7116, 7119, 424, 7122, 7125, 7128
- , 7131, 7134, 430, 431, 7138, 433, 434, 435, 436, 437
- , 7141, 439, 440, 441, 442, 0, 0, 0, 0, 0
- , 0, 0, 847, 443, 0, 0, 0, 0, 0, 444
- , 0, 0, 0, 0, 0, 0, 0, 0, 731, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 445, 446
- , 447, 241, 0, 0, 96, 0, 280, 0, 0, 0
- , 0, 0, 649, 860, 0, 651, 0, 0, 0, 0
- , 635, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 83, 0, 0, 0, 0, 49
- , 50, 51, 0, 299, 0, 52, 0, 0, 619, 0
- , 0, 96, 0, 0, 0, 0, 0, 0, 599, 0
- , 0, 0, 7144, 62, 63, 64, 7147, 65, 66, 67
- , 68, 69, 0, 616, 70, 169, 0, 0, 0, 0
- , 0, 0, 328, 0, 346, 0, 0, 0, 0, 0
- , 0, 0, 0, 648, 0, 0, 0, 0, 35, 36
- , 37, 0, 0, 0, 0, 0, 0, 592, 0, 0
- , 0, 0, 0, 0, 0, 0, 593, 796, 0, 0
- , 0, 0, 0, 0, 0, 0, 408, 0, 102, 39
- , 40, 41, 170, 0, 42, 0, 0, 7150, 0, 44
- , 0, 0, 0, 0, 0, 0, 0, 0, 936, 0
- , 0, 0, 0, 7153, 0, 0, 466, 0, 0, 0
- , 0, 0, 0, 0, 0, 169, 0, 0, 0, 225
- , 0, 0, 740, 0, 0, 0, 0, 130, 0, 676
- , 0, 0, 0, 677, 0, 769, 0, 0, 96, 0
- , 0, 0, 661, 0, 0, 0, 0, 0, 0, 0
- , 571, 243, 0, 0, 0, 722, 0, 0, 0, 0
- , 0, 0, 151, 0, 0, 0, 0, 0, 34, 0
- , 0, 0, 420, 0, 0, 0, 0, 0, 0, 0
- , 0, 316, 0, 7156, 692, 0, 0, 600, 0, 49
- , 50, 7160, 0, 0, 0, 52, 0, 0, 0, 466
- , 7163, 36, 7166, 375, 126, 510, 0, 98, 0, 0
- , 127, 0, 7169, 62, 63, 7172, 946, 65, 66, 67
- , 68, 69, 0, 0, 70, 0, 0, 0, 0, 0
- , 102, 39, 7175, 7178, 0, 0, 7181, 89, 0, 7184
- , 0, 44, 0, 0, 0, 0, 0, 636, 0, 0
- , 0, 0, 0, 0, 0, 0, 16, 0, 0, 7187
- , 0, 0, 0, 0, 131, 0, 0, 487, 0, 0
- , 770, 0, 0, 0, 34, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 277, 0, 34
- , 34, 35, 36, 37, 783, 0, 132, 0, 0, 679
- , 0, 0, 0, 262, 0, 0, 35, 36, 7190, 0
- , 0, 0, 342, 0, 151, 0, 0, 0, 0, 0
- , 0, 7193, 7197, 7201, 7205, 1042, 0, 42, 13, 14
- , 43, 0, 44, 0, 0, 217, 7209, 39, 40, 41
- , 0, 49, 7213, 51, 395, 43, 0, 7216, 1042, 682
- , 683, 7220, 7223, 7228, 7231, 41, 347, 7235, 7238, 0
- , 43, 43, 7241, 7245, 7249, 7252, 7255, 7258, 35, 7261
- , 7264, 67, 68, 7267, 0, 0, 70, 0, 124, 0
- , 0, 0, 1042, 467, 0, 0, 468, 1042, 1042, 1042
- , 1042, 1042, 7270, 1042, 7273, 7277, 1042, 0, 102, 7280
- , 7283, 7286, 1330, 7289, 7292, 7296, 0, 7299, 7302, 7305
- , 7310, 399, 0, 7313, 0, 0, 0, 0, 0, 0
- , 151, 0, 518, 0, 7316, 7319, 519, 674, 0, 0
- , 0, 937, 49, 7322, 7325, 151, 151, 0, 52, 0
- , 127, 0, 848, 0, 0, 0, 0, 7328, 7331, 7334
- , 7338, 59, 60, 52, 0, 61, 62, 63, 64, 0
- , 65, 66, 7341, 7345, 7349, 7354, 7357, 7361, 52, 52
- , 61, 7365, 7369, 7373, 208, 7376, 7379, 7382, 7386, 7390
- , 7395, 7398, 7401, 7407, 0, 7410, 7413, 7416, 7420, 64
- , 65, 7423, 7426, 7429, 7432, 69, 0, 70, 70, 0
- , 521, 0, 0, 7437, 7440, 7443, 7446, 526, 527, 7449
- , 50, 51, 0, 529, 530, 7452, 0, 34, 895, 0
- , 7456, 113, 533, 478, 861, 0, 0, 0, 693, 301
- , 784, 0, 61, 62, 7459, 7462, 7466, 7469, 66, 67
- , 7472, 7475, 0, 43, 70, 44, 0, 0, 918, 35
- , 7478, 37, 0, 0, 0, 0, 404, 0, 0, 0
- , 0, 0, 0, 25, 26, 27, 114, 7481, 116, 0
- , 213, 0, 0, 0, 118, 119, 120, 0, 0, 747
- , 39, 7484, 41, 0, 134, 42, 0, 0, 43, 0
- , 44, 0, 798, 0, 96, 7487, 0, 0, 7490, 31
- , 618, 0, 0, 0, 0, 0, 0, 241, 0, 0
- , 34, 0, 0, 0, 0, 0, 0, 707, 649, 650
- , 0, 651, 0, 0, 0, 0, 0, 7493, 36, 37
- , 0, 0, 0, 100, 0, 0, 0, 0, 0, 694
- , 0, 0, 35, 7496, 37, 49, 50, 51, 0, 282
- , 0, 52, 241, 0, 0, 825, 0, 7499, 39, 40
- , 41, 510, 0, 7502, 849, 0, 651, 0, 61, 7506
- , 7510, 7513, 102, 7516, 7519, 7522, 7527, 69, 42, 0
- , 7530, 43, 121, 7533, 0, 0, 0, 0, 0, 0
- , 49, 50, 51, 0, 123, 0, 52, 0, 0, 0
- , 247, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 61, 62, 63, 64, 0, 7536, 66
- , 67, 68, 69, 0, 7539, 7543, 7, 0, 0, 8
- , 0, 886, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 151, 0, 7546, 0, 7549, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 151, 0, 0, 0
- , 0, 0, 0, 159, 0, 875, 0, 0, 49, 7552
- , 7555, 169, 0, 0, 52, 356, 83, 0, 0, 0
- , 0, 0, 0, 49, 50, 7558, 167, 0, 0, 7561
- , 0, 574, 62, 272, 64, 0, 65, 66, 7564, 7567
- , 7570, 7573, 59, 60, 0, 0, 61, 7576, 63, 64
- , 0, 7579, 66, 67, 68, 7582, 0, 0, 70, 0
- , 0, 534, 0, 0, 0, 0, 0, 652, 7585, 0
- , 0, 11, 0, 249, 0, 250, 0, 0, 0, 0
- , 12, 0, 0, 0, 0, 862, 0, 0, 0, 0
- , 0, 575, 0, 466, 0, 303, 0, 0, 170, 251
- , 0, 0, 0, 0, 0, 0, 0, 154, 0, 0
- , 0, 0, 0, 168, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 732, 159, 0, 0, 155, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 236, 0
- , 0, 0, 620, 621, 0, 0, 0, 156, 0, 0
- , 0, 0, 0, 0, 7588, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 7591, 0, 480, 0, 0, 0, 135, 0, 0, 0
- , 0, 0, 785, 0, 0, 0, 35, 36, 37, 0
- , 0, 101, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 7594, 7597, 39, 40, 41
- , 0, 0, 42, 0, 0, 43, 0, 44, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 7600, 7604, 7607
- , 37, 0, 0, 0, 0, 0, 0, 0, 0, 314
- , 0, 756, 0, 0, 0, 0, 0, 0, 622, 0
- , 0, 0, 0, 0, 163, 34, 0, 102, 7610, 7614
- , 7617, 41, 0, 42, 42, 0, 43, 7620, 44, 7623
- , 0, 0, 0, 377, 0, 0, 0, 0, 0, 0
- , 105, 0, 0, 0, 0, 0, 0, 7626, 7630, 37
- , 0, 0, 7633, 126, 0, 0, 0, 0, 0, 127
- , 83, 0, 7638, 0, 40, 41, 0, 49, 50, 7641
- , 7645, 0, 107, 52, 108, 358, 109, 102, 7648, 40
- , 41, 0, 55, 7651, 57, 58, 7654, 60, 44, 0
- , 7657, 7661, 7664, 64, 863, 65, 66, 67, 68, 69
- , 0, 151, 7667, 0, 0, 0, 0, 603, 34, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 35, 7670, 37, 0, 49, 7673
- , 7676, 51, 0, 0, 52, 52, 0, 0, 0, 0
- , 35, 7679, 7682, 55, 7685, 7688, 7691, 7695, 7698, 7701
- , 241, 61, 7704, 7707, 7710, 7714, 7718, 7721, 7726, 7729
- , 7732, 7736, 876, 7739, 7742, 44, 0, 0, 919, 0
- , 7745, 39, 40, 7748, 50, 51, 42, 0, 0, 43
- , 0, 44, 0, 306, 0, 0, 0, 0, 49, 50
- , 51, 786, 0, 0, 7751, 157, 908, 0, 0, 158
- , 237, 159, 0, 0, 0, 0, 653, 0, 0, 0
- , 0, 61, 62, 63, 64, 0, 65, 66, 67, 7754
- , 7757, 0, 898, 70, 0, 0, 127, 262, 0, 0
- , 7760, 0, 0, 0, 0, 0, 0, 0, 151, 0
- , 0, 0, 0, 262, 7763, 0, 408, 0, 0, 160
- , 0, 0, 1370, 0, 7766, 0, 1370, 410, 594, 0
- , 0, 7769, 35, 36, 37, 49, 7772, 7775, 0, 0
- , 412, 7779, 0, 0, 0, 7782, 35, 36, 37, 7785
- , 55, 7788, 7791, 7794, 59, 7797, 0, 52, 7800, 62
- , 63, 7803, 102, 7808, 7812, 7815, 7819, 7822, 42, 98
- , 70, 43, 410, 44, 7825, 62, 7829, 7832, 40, 7836
- , 7840, 67, 7843, 69, 0, 43, 70, 44, 0, 0
- , 0, 0, 0, 0, 378, 0, 0, 0, 172, 13
- , 7846, 0, 0, 0, 419, 0, 0, 0, 254, 0
- , 255, 256, 420, 887, 7849, 7852, 0, 0, 7855, 0
- , 80, 0, 7858, 0, 40, 41, 0, 0, 7861, 176
- , 0, 0, 177, 178, 0, 104, 0, 0, 159, 0
- , 0, 0, 0, 0, 742, 0, 105, 604, 0, 7864
- , 0, 0, 0, 0, 0, 0, 0, 420, 106, 0
- , 151, 421, 0, 535, 0, 316, 34, 0, 7867, 81
- , 0, 0, 0, 49, 7870, 7873, 7876, 7879, 183, 7882
- , 7885, 186, 7888, 188, 189, 190, 191, 49, 7891, 7895
- , 7899, 58, 7902, 7906, 194, 16, 61, 62, 7910, 7913
- , 37, 65, 7916, 7919, 7923, 7927, 7931, 60, 70, 360
- , 61, 62, 7934, 64, 0, 65, 66, 67, 68, 69
- , 0, 85, 7937, 0, 0, 0, 0, 0, 7941, 39
- , 40, 7944, 424, 7948, 7951, 7955, 428, 7958, 430, 7961
- , 7964, 7967, 7971, 435, 7974, 437, 438, 439, 440, 441
- , 7978, 0, 0, 757, 0, 0, 18, 19, 0, 7981
- , 0, 21, 0, 0, 0, 444, 0, 7984, 0, 0
- , 0, 0, 285, 0, 34, 0, 0, 0, 0, 0
- , 0, 461, 0, 0, 7987, 446, 447, 225, 680, 0
- , 462, 162, 0, 681, 7990, 0, 0, 0, 0, 0
- , 0, 454, 799, 0, 0, 0, 35, 36, 37, 315
- , 0, 0, 105, 0, 0, 0, 0, 0, 0, 0
- , 34, 0, 0, 22, 7993, 0, 0, 7997, 0, 0
- , 0, 0, 0, 0, 8000, 8003, 8008, 8011, 8014, 8017
- , 50, 51, 42, 0, 0, 8020, 0, 44, 0, 0
- , 0, 34, 35, 8023, 37, 449, 0, 839, 0, 169
- , 840, 0, 61, 62, 63, 8026, 0, 65, 66, 8029
- , 8032, 69, 0, 0, 70, 0, 0, 697, 0, 0
- , 200, 8035, 8038, 8041, 8045, 8048, 0, 0, 8051, 0
- , 0, 43, 0, 44, 0, 0, 0, 35, 36, 37
- , 0, 375, 126, 0, 24, 0, 0, 0, 127, 454
- , 0, 8054, 26, 8057, 8060, 40, 8063, 0, 0, 42
- , 105, 0, 43, 0, 8066, 0, 0, 494, 39, 495
- , 41, 0, 455, 42, 0, 0, 43, 8069, 8072, 0
- , 0, 1042, 0, 1042, 0, 0, 8075, 8078, 50, 51
- , 0, 0, 0, 52, 1042, 8081, 1042, 0, 0, 0
- , 0, 0, 0, 0, 0, 103, 151, 0, 0, 0
- , 61, 8084, 8087, 64, 0, 65, 8091, 8094, 8097, 8100
- , 1042, 1042, 8105, 1042, 8108, 1042, 8111, 217, 1042, 8114
- , 1042, 0, 0, 8117, 8120, 51, 1042, 8123, 1042, 52
- , 262, 555, 0, 0, 8126, 36, 37, 0, 375, 8130
- , 0, 151, 0, 0, 0, 127, 8133, 62, 8136, 8139
- , 0, 65, 66, 67, 8142, 8145, 51, 0, 8149, 107
- , 52, 108, 0, 8152, 494, 8155, 8158, 41, 49, 8161
- , 8164, 57, 58, 8168, 8171, 44, 0, 61, 62, 63
- , 64, 0, 65, 8175, 8178, 8181, 8184, 59, 60, 70
- , 361, 8188, 62, 63, 64, 0, 65, 66, 67, 68
- , 69, 463, 0, 70, 0, 0, 0, 163, 0, 0
- , 0, 0, 0, 0, 0, 170, 496, 8191, 0, 0
- , 0, 0, 0, 316, 34, 0, 8194, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 262, 8197, 8200
- , 0, 0, 0, 0, 655, 0, 0, 888, 151, 0
- , 0, 829, 0, 0, 0, 0, 35, 36, 37, 0
- , 0, 0, 0, 0, 701, 0, 0, 0, 0, 909
- , 35, 36, 37, 0, 170, 49, 8203, 51, 0, 0
- , 0, 52, 0, 686, 0, 0, 102, 8206, 40, 41
- , 55, 56, 8209, 58, 8212, 8215, 498, 8218, 8221, 62
- , 8224, 8229, 40, 8232, 66, 67, 8235, 8239, 0, 43
- , 70, 44, 0, 127, 0, 0, 8242, 830, 0, 0
- , 0, 0, 0, 0, 580, 0, 0, 0, 8245, 841
- , 0, 625, 0, 0, 0, 0, 0, 1371, 456, 0
- , 0, 1371, 0, 0, 0, 0, 0, 0, 35, 36
- , 8248, 0, 1367, 0, 0, 0, 0, 0, 817, 8251
- , 1367, 0, 450, 636, 0, 0, 386, 0, 0, 0
- , 151, 0, 0, 244, 0, 0, 0, 81, 38, 39
- , 40, 41, 0, 0, 8254, 0, 0, 43, 0, 8257
- , 0, 33, 0, 217, 0, 0, 0, 49, 50, 51
- , 0, 497, 0, 8260, 499, 8263, 0, 0, 380, 0
- , 0, 8266, 8269, 8272, 8275, 58, 59, 8278, 0, 0
- , 8281, 62, 8284, 8287, 0, 65, 66, 67, 68, 8290
- , 8293, 0, 70, 0, 61, 62, 63, 64, 0, 8296
- , 66, 67, 68, 69, 0, 0, 8299, 0, 0, 0
- , 0, 47, 0, 0, 0, 0, 0, 0, 0, 664
- , 0, 0, 48, 0, 0, 0, 0, 8302, 0, 8305
- , 0, 0, 540, 0, 541, 0, 0, 0, 0, 941
- , 638, 0, 34, 159, 0, 0, 0, 0, 0, 49
- , 8308, 51, 98, 0, 0, 8311, 758, 0, 0, 759
- , 0, 0, 258, 0, 55, 56, 57, 58, 59, 60
- , 0, 0, 61, 8314, 8317, 8321, 37, 65, 66, 67
- , 68, 69, 84, 0, 70, 0, 0, 0, 0, 724
- , 0, 802, 0, 0, 0, 0, 362, 0, 98, 0
- , 0, 0, 0, 0, 494, 8324, 495, 41, 0, 0
- , 42, 0, 0, 43, 0, 44, 0, 0, 0, 0
- , 0, 0, 760, 0, 0, 0, 0, 164, 0, 0
- , 0, 0, 277, 0, 803, 8327, 8330, 0, 0, 0
- , 775, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 496, 0, 0, 0
- , 0, 0, 0, 0, 222, 96, 0, 35, 36, 37
- , 0, 0, 464, 0, 98, 0, 0, 262, 277, 0
- , 0, 0, 0, 0, 278, 0, 139, 259, 8333, 0
- , 0, 140, 0, 141, 0, 0, 0, 102, 39, 40
- , 41, 0, 0, 42, 0, 0, 0, 0, 316, 0
- , 0, 868, 0, 0, 0, 49, 50, 51, 0, 665
- , 0, 52, 889, 656, 0, 0, 0, 0, 0, 0
- , 55, 8336, 8339, 58, 59, 60, 0, 0, 61, 62
- , 63, 64, 0, 65, 66, 67, 68, 69, 0, 0
- , 70, 0, 0, 0, 8342, 0, 0, 556, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 260, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 151, 0, 0, 239, 0, 0, 0, 542, 0
- , 334, 942, 0, 0, 0, 0, 0, 745, 0, 666
- , 687, 0, 746, 0, 0, 0, 0, 0, 49, 50
- , 51, 0, 0, 0, 8345, 0, 0, 0, 543, 0
- , 930, 0, 0, 0, 0, 0, 287, 142, 0, 0
- , 0, 581, 0, 582, 64, 0, 273, 66, 67, 68
- , 69, 788, 0, 498, 499, 500, 0, 606, 0, 309
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 725, 0, 0, 0, 172
- , 805, 0, 0, 806, 0, 0, 758, 0, 0, 759
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 339
- , 0, 0, 0, 83, 777, 0, 0, 0, 0, 0
- , 0, 0, 85, 86, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 852
- , 467, 96, 761, 468, 0, 0, 0, 0, 0, 0
- , 0, 469, 470, 0, 0, 0, 0, 0, 0, 0
- , 910, 0, 0, 288, 0, 0, 0, 471, 225, 0
- , 0, 143, 0, 0, 0, 0, 0, 0, 0, 8348
- , 0, 0, 473, 0, 0, 0, 144, 0, 0, 0
- , 87, 0, 0, 813, 0, 0, 0, 0, 595, 0
- , 0, 0, 0, 0, 0, 0, 474, 0, 0, 0
- , 145, 0, 726, 0, 0, 146, 34, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 626, 0, 0, 0, 0, 0, 0, 943, 0
- , 0, 0, 0, 245, 246, 34, 0, 0, 35, 36
- , 37, 475, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 476, 0, 477, 0, 0, 0, 0
- , 111, 261, 0, 0, 8351, 0, 96, 8354, 8358, 8361
- , 8364, 41, 0, 0, 42, 0, 0, 43, 0, 44
- , 165, 0, 248, 0, 0, 0, 0, 0, 504, 0
- , 0, 0, 0, 0, 0, 0, 0, 8367, 39, 40
- , 41, 0, 0, 42, 383, 0, 43, 0, 44, 0
- , 0, 0, 34, 8370, 0, 890, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 510, 0, 98, 487, 0, 0, 8373
- , 0, 8376, 201, 202, 8379, 8382, 8386, 37, 0, 748
- , 0, 0, 151, 0, 0, 0, 0, 0, 667, 96
- , 0, 0, 0, 544, 0, 733, 0, 0, 0, 0
- , 262, 0, 0, 710, 38, 8389, 8392, 8395, 41, 49
- , 8398, 8401, 0, 43, 43, 8405, 8408, 0, 808, 759
- , 0, 0, 0, 0, 263, 0, 223, 249, 711, 688
- , 0, 0, 61, 62, 63, 64, 0, 65, 8411, 8415
- , 8419, 69, 0, 0, 8422, 277, 0, 0, 922, 657
- , 0, 166, 0, 55, 56, 8425, 8428, 8431, 60, 0
- , 0, 61, 62, 63, 64, 0, 65, 66, 67, 68
- , 69, 0, 465, 70, 0, 0, 712, 47, 47, 0
- , 466, 0, 762, 0, 0, 0, 0, 0, 48, 48
- , 0, 0, 316, 853, 0, 814, 96, 0, 0, 0
- , 0, 911, 0, 0, 0, 0, 0, 514, 515, 466
- , 34, 0, 0, 0, 0, 49, 8434, 8437, 8441, 0
- , 0, 52, 52, 0, 0, 0, 0, 53, 8444, 54
- , 55, 8447, 8450, 8453, 8456, 8459, 60, 0, 8462, 8467
- , 8470, 8473, 8476, 8479, 8482, 8486, 8489, 8492, 69, 0
- , 70, 70, 0, 0, 0, 0, 34, 0, 0, 0
- , 0, 0, 547, 1303, 0, 0, 0, 0, 0, 0
- , 83, 0, 8496, 39, 40, 41, 0, 0, 42, 85
- , 167, 43, 0, 44, 0, 0, 0, 451, 35, 36
- , 37, 0, 0, 0, 169, 0, 0, 0, 0, 0
- , 750, 0, 102, 0, 40, 41, 0, 0, 0, 0
- , 0, 0, 1011, 0, 0, 0, 1303, 0, 102, 39
- , 40, 41, 0, 0, 8500, 0, 549, 8504, 551, 44
- , 0, 34, 0, 532, 0, 533, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 8507, 0, 0, 319, 0
- , 0, 170, 0, 71, 71, 0, 105, 0, 0, 0
- , 225, 0, 751, 35, 36, 37, 0, 168, 106, 0
- , 0, 0, 0, 0, 0, 316, 34, 0, 778, 0
- , 0, 0, 0, 49, 50, 51, 8510, 0, 0, 52
- , 0, 262, 337, 102, 8513, 40, 8516, 880, 55, 8519
- , 57, 58, 8522, 60, 44, 0, 8526, 62, 8529, 8533
- , 37, 65, 66, 8536, 8540, 8543, 167, 0, 70, 0
- , 225, 0, 0, 0, 0, 467, 0, 0, 468, 49
- , 50, 51, 0, 0, 0, 52, 469, 470, 102, 39
- , 8547, 8550, 37, 0, 8553, 566, 0, 43, 0, 44
- , 0, 0, 8556, 62, 63, 64, 0, 65, 66, 67
- , 68, 8559, 0, 0, 8562, 0, 262, 473, 0, 658
- , 102, 39, 40, 41, 0, 0, 42, 151, 0, 43
- , 0, 44, 0, 0, 34, 0, 0, 0, 0, 0
- , 566, 474, 0, 0, 0, 0, 0, 0, 407, 0
- , 408, 0, 0, 168, 49, 50, 8565, 0, 409, 703
- , 8568, 8571, 0, 0, 0, 0, 35, 36, 37, 55
- , 8574, 8577, 8581, 59, 8584, 413, 0, 61, 62, 8587
- , 64, 0, 65, 8590, 67, 68, 8593, 713, 0, 70
- , 714, 0, 415, 262, 0, 0, 102, 8596, 8601, 8604
- , 8609, 51, 42, 0, 151, 8612, 0, 44, 1366, 0
- , 0, 418, 0, 40, 8615, 8618, 57, 58, 59, 60
- , 668, 0, 61, 62, 63, 8621, 34, 8624, 8627, 8630
- , 8634, 8637, 50, 8640, 8644, 0, 0, 52, 8647, 0
- , 34, 0, 0, 0, 113, 0, 349, 0, 0, 169
- , 364, 0, 1042, 0, 61, 62, 8651, 8654, 8657, 8660
- , 8663, 8666, 68, 69, 169, 869, 8670, 0, 0, 454
- , 0, 1042, 8673, 36, 37, 0, 388, 0, 0, 0
- , 105, 0, 0, 0, 514, 515, 1042, 0, 102, 8676
- , 8680, 8683, 8687, 1042, 8690, 8694, 1042, 8697, 8701, 8704
- , 8708, 0, 102, 8711, 8714, 8717, 420, 8720, 8723, 8726
- , 169, 8730, 1042, 8734, 0, 8738, 458, 0, 8741, 0
- , 0, 170, 49, 50, 51, 0, 0, 0, 815, 0
- , 61, 62, 8745, 8748, 37, 65, 66, 8751, 8754, 8758
- , 8762, 0, 70, 0, 52, 0, 0, 0, 0, 88
- , 149, 216, 0, 0, 689, 0, 365, 0, 0, 16
- , 8765, 262, 102, 39, 8768, 8772, 584, 8775, 8778, 8782
- , 8786, 8791, 8794, 8797, 432, 8800, 434, 8803, 8806, 437
- , 438, 439, 440, 8809, 8812, 391, 151, 98, 0, 0
- , 127, 0, 34, 443, 0, 72, 0, 73, 0, 8815
- , 8818, 8822, 0, 8825, 550, 8828, 122, 0, 0, 0
- , 8832, 36, 8835, 49, 8838, 8841, 0, 123, 445, 8844
- , 447, 0, 8847, 62, 8850, 8854, 8857, 8860, 8864, 8867
- , 8870, 8874, 59, 60, 70, 454, 61, 62, 8877, 64
- , 102, 8881, 8884, 8887, 68, 69, 8890, 0, 8893, 43
- , 0, 44, 0, 0, 102, 8896, 40, 41, 933, 0
- , 42, 0, 0, 43, 0, 44, 0, 8899, 0, 0
- , 35, 36, 37, 49, 50, 51, 0, 0, 0, 52
- , 0, 0, 0, 0, 0, 367, 290, 209, 8902, 211
- , 0, 0, 0, 0, 0, 752, 61, 62, 63, 64
- , 102, 8905, 8909, 8912, 68, 69, 42, 487, 8916, 43
- , 0, 8919, 817, 8924, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 8928, 0, 0, 789, 0, 34
- , 34, 0, 0, 0, 913, 49, 50, 51, 151, 0
- , 0, 0, 0, 0, 0, 0, 34, 0, 0, 1044
- , 0, 49, 8931, 8935, 0, 169, 0, 52, 855, 127
- , 0, 8938, 8941, 8944, 37, 49, 8947, 51, 368, 0
- , 0, 52, 8950, 262, 61, 8953, 8956, 8959, 8962, 8966
- , 8969, 8972, 8976, 69, 151, 0, 70, 74, 61, 8979
- , 63, 8982, 8986, 8989, 8994, 8998, 68, 9001, 9004, 126
- , 9007, 43, 44, 44, 0, 127, 1044, 34, 102, 39
- , 40, 9011, 9015, 9019, 9022, 9025, 9028, 9031, 1044, 9035
- , 1044, 0, 0, 1044, 1044, 1044, 55, 9038, 9041, 9044
- , 9047, 9050, 1044, 1044, 9054, 62, 63, 64, 0, 9057
- , 9060, 9064, 68, 69, 560, 0, 70, 0, 0, 0
- , 0, 0, 0, 0, 589, 0, 0, 420, 375, 126
- , 0, 0, 0, 128, 241, 9067, 246, 34, 552, 102
- , 39, 40, 41, 170, 0, 9071, 9074, 0, 9077, 669
- , 44, 9080, 34, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 151, 0, 0, 225, 247, 0, 670, 35
- , 36, 37, 49, 9084, 9087, 9090, 0, 0, 52, 9093
- , 9096, 225, 0, 0, 9099, 36, 37, 0, 55, 9103
- , 9106, 9109, 59, 60, 0, 9112, 9115, 9118, 9121, 9124
- , 9127, 9130, 9134, 9138, 9141, 9145, 0, 70, 9149, 590
- , 44, 715, 9152, 9156, 9159, 9162, 40, 9165, 66, 9168
- , 9171, 69, 0, 9175, 70, 44, 0, 790, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 169
- , 0, 0, 841, 0, 9178, 102, 0, 40, 9181, 0
- , 49, 9184, 51, 0, 735, 0, 52, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 46, 0, 0, 0
- , 0, 0, 262, 61, 9187, 63, 9190, 36, 9194, 66
- , 67, 68, 69, 151, 0, 9197, 0, 47, 0, 914
- , 0, 0, 35, 628, 37, 0, 170, 0, 48, 249
- , 0, 0, 0, 0, 0, 716, 102, 39, 40, 41
- , 49, 50, 9200, 9203, 0, 43, 52, 44, 0, 0
- , 9206, 26, 102, 39, 40, 9209, 9213, 9216, 9219, 9222
- , 60, 52, 0, 61, 62, 63, 9225, 53, 9228, 66
- , 9231, 9234, 9237, 58, 59, 9240, 0, 0, 9243, 9246
- , 63, 9250, 35, 9254, 9257, 67, 9260, 9263, 51, 409
- , 70, 1370, 410, 0, 0, 0, 1112, 1112, 9267, 36
- , 9270, 411, 1366, 0, 452, 9274, 413, 0, 0, 459
- , 1366, 0, 102, 39, 9277, 41, 1112, 0, 42, 0
- , 151, 43, 0, 9280, 0, 0, 0, 0, 9283, 39
- , 9287, 41, 0, 0, 42, 0, 151, 43, 1112, 9290
- , 0, 0, 418, 0, 40, 41, 0, 49, 9294, 51
- , 310, 0, 0, 9297, 0, 0, 945, 0, 322, 0
- , 0, 0, 0, 49, 50, 51, 596, 0, 498, 9300
- , 9304, 62, 9307, 64, 93, 9311, 66, 67, 68, 69
- , 0, 76, 70, 0, 0, 561, 0, 9314, 0, 9317
- , 41, 0, 0, 9320, 68, 69, 151, 0, 0, 0
- , 0, 262, 0, 607, 9323, 36, 37, 0, 0, 0
- , 0, 0, 151, 0, 0, 225, 0, 0, 671, 0
- , 0, 0, 0, 49, 50, 51, 9326, 679, 0, 52
- , 0, 0, 0, 0, 102, 9329, 40, 41, 791, 49
- , 9332, 51, 0, 43, 0, 9335, 61, 62, 63, 64
- , 0, 65, 66, 9338, 9341, 9345, 0, 0, 70, 0
- , 0, 0, 61, 62, 63, 64, 0, 9348, 9351, 67
- , 9355, 9358, 13, 14, 70, 0, 0, 0, 0, 902
- , 0, 0, 0, 420, 0, 0, 0, 0, 173, 0
- , 174, 16, 0, 690, 34, 0, 423, 9363, 9366, 9369
- , 9373, 9377, 9380, 430, 431, 9383, 9386, 9390, 435, 9393
- , 9396, 9399, 9402, 440, 441, 442, 0, 0, 151, 0
- , 0, 0, 0, 0, 9405, 0, 35, 36, 37, 0
- , 444, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 49, 50, 9408, 180, 9411
- , 9414, 9417, 184, 185, 186, 9421, 9424, 9428, 9432, 9436
- , 0, 0, 9439, 0, 0, 9442, 193, 9446, 61, 62
- , 9449, 64, 0, 65, 66, 67, 68, 69, 0, 0
- , 70, 0, 0, 856, 0, 9452, 9455, 9458, 40, 41
- , 764, 0, 42, 0, 0, 43, 0, 44, 0, 0
- , 903, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 195, 196, 9461, 0, 0, 35, 36
- , 37, 0, 0, 0, 0, 0, 0, 0, 562, 460
- , 0, 0, 96, 0, 0, 0, 0, 0, 0, 0
- , 151, 0, 0, 0, 0, 0, 763, 9464, 9468, 9471
- , 40, 41, 0, 0, 42, 0, 0, 43, 0, 9474
- , 0, 892, 0, 0, 0, 0, 0, 49, 50, 51
- , 9478, 0, 0, 52, 0, 0, 0, 102, 9481, 40
- , 9484, 41, 0, 42, 0, 0, 43, 0, 44, 0
- , 61, 62, 63, 64, 0, 65, 66, 9487, 9490, 9493
- , 198, 0, 70, 52, 0, 0, 0, 9496, 26, 0
- , 0, 199, 0, 0, 0, 0, 0, 0, 9499, 0
- , 61, 9502, 9505, 64, 302, 65, 66, 67, 68, 9508
- , 0, 0, 9511, 0, 0, 0, 0, 0, 96, 0
- , 0, 0, 30, 31, 0, 0, 0, 0, 0, 0
- , 262, 0, 323, 200, 9514, 9517, 203, 0, 0, 49
- , 9520, 9523, 392, 0, 0, 52, 0, 0, 0, 467
- , 0, 0, 468, 0, 269, 0, 0, 0, 0, 0
- , 514, 9526, 61, 9529, 63, 64, 0, 9533, 9536, 9539
- , 9543, 9547, 9551, 14, 9554, 0, 857, 0, 0, 517
- , 0, 0, 0, 55, 56, 9557, 58, 9560, 9563, 0
- , 0, 9567, 9571, 63, 64, 485, 65, 66, 67, 68
- , 69, 175, 205, 70, 0, 177, 178, 124, 0, 718
- , 0, 9574, 0, 0, 0, 520, 0, 0, 0, 0
- , 0, 0, 0, 0, 34, 0, 217, 0, 0, 0
- , 0, 0, 0, 0, 754, 0, 0, 0, 0, 34
- , 0, 0, 0, 0, 0, 0, 0, 179, 9577, 181
- , 182, 183, 184, 185, 186, 187, 9581, 9584, 9588, 191
- , 475, 0, 0, 0, 0, 9591, 9594, 9597, 0, 522
- , 523, 9600, 9603, 9606, 527, 528, 0, 0, 0, 529
- , 530, 531, 0, 9609, 0, 845, 9612, 39, 9615, 9618
- , 0, 0, 42, 0, 0, 9621, 0, 44, 0, 0
- , 0, 9624, 39, 9627, 41, 0, 0, 42, 0, 0
- , 9630, 206, 44, 195, 196, 197, 0, 207, 208, 9633
- , 210, 211, 0, 822, 766, 0, 0, 0, 95, 0
- , 0, 0, 96, 35, 36, 37, 0, 0, 0, 310
- , 0, 270, 0, 0, 0, 0, 835, 0, 0, 0
- , 0, 0, 0, 923, 0, 0, 0, 0, 0, 632
- , 872, 9636, 684, 9639, 39, 40, 41, 0, 0, 42
- , 151, 0, 43, 0, 9642, 0, 0, 0, 0, 0
- , 0, 0, 705, 0, 0, 706, 650, 0, 651, 0
- , 0, 0, 0, 77, 0, 0, 0, 9645, 50, 51
- , 212, 0, 0, 52, 0, 0, 0, 25, 26, 9648
- , 0, 199, 49, 50, 9651, 46, 0, 0, 52, 0
- , 61, 62, 9654, 64, 0, 65, 66, 67, 68, 69
- , 0, 0, 70, 0, 0, 61, 9657, 63, 64, 0
- , 65, 66, 9660, 9663, 69, 0, 0, 9666, 737, 200
- , 0, 217, 371, 201, 0, 51, 214, 0, 52, 230
- , 0, 54, 215, 0, 486, 57, 0, 487, 58, 0
- , 96, 64, 0, 102, 729, 0, 102, 34, 0, 35
- , 271, 0, 646, 36, 0, 781, 49, 0, 42, 50
- , 0, 846, 44, 0, 151, 276, 0, 62, 262, 0
- , 68, 824, 1342, 0, 70, 673, 151, 0, 50, 1342
- , 0, 51, 372, 0, 96, 373, 0, 730, 598, 0
- , 169, 58, 97, 0, 60, 98, 0, 64, 1342, 0
- , 172, 68, 0, 325, 1342, 0, 118, 2, 0, 40
- , 35, 0, 41, 36, 0, 277, 122, 0, 408, 768
- , 0, 634, 278, 0, 159, 1396, 0, 569, 34, 0
- , 836, 411, 49, 0, 1366, 50, 0, 51, 510, 0
- , 412, 98, 0, 413, 151, 0, 416, 394, 0, 417
- , 36, 0, 1366, 52, 0, 278, 40, 218, 0, 102
- , 64, 0, 40, 65, 0, 41, 66, 0, 375, 67
- , 0, 126, 68, 4, 0, 42, 69, 5, 0, 127
- , 511, 44, 8, 0, 935, 201, 0, 421, 126, 0
- , 169, 279, 0, 241, 127, 0, 35, 305, 0, 795
- , 49, 0, 489, 50, 0, 39, 490, 0, 44, 232
- , 0, 422, 61, 0, 96, 63, 0, 423, 64, 0
- , 425, 65, 0, 426, 66, 0, 427, 67, 0, 428
- , 68, 0, 429, 755, 69, 0, 432, 70, 0, 438
- , 345, 0, 61, 225, 0, 570, 34, 0, 410, 43
- , 0, 776, 374, 0, 906, 217, 352, 0, 491, 51
- , 0, 35, 72, 0, 37, 73, 0, 512, 61, 0
- , 300, 64, 0, 334, 40, 0, 917, 41, 0, 42
- , 233, 0, 230, 43, 0, 217, 34, 0, 681, 37
- , 0, 35, 102, 133, 0, 36, 39, 35, 0, 37
- , 40, 36, 0, 41, 513, 37, 0, 102, 572, 34
- , 0, 42, 50, 0, 44, 16, 52, 0, 684, 102
- , 0, 685, 39, 102, 1042, 0, 40, 39, 0, 41
- , 40, 1042, 0, 42, 1042, 0, 205, 42, 0, 44
- , 178, 353, 0, 637, 354, 44, 0, 638, 61, 0
- , 62, 1042, 0, 797, 63, 0, 64, 1042, 0, 65
- , 36, 0, 66, 37, 0, 573, 69, 0, 219, 1042
- , 0, 262, 514, 1042, 0, 515, 1042, 0, 39, 1042
- , 0, 40, 1042, 0, 41, 1042, 0, 566, 1330, 0
- , 329, 42, 1042, 0, 151, 1042, 0, 43, 1042, 0
- , 396, 1042, 0, 617, 397, 44, 1042, 0, 516, 398
- , 0, 517, 400, 0, 262, 225, 0, 124, 262, 0
- , 50, 375, 0, 51, 126, 0, 49, 55, 0, 50
- , 56, 0, 51, 57, 520, 0, 58, 76, 0, 49
- , 662, 67, 0, 50, 68, 49, 0, 51, 601, 69
- , 50, 0, 51, 281, 0, 885, 234, 1402, 0, 70
- , 401, 1402, 0, 62, 402, 244, 0, 34, 63, 403
- , 0, 64, 207, 0, 65, 209, 0, 66, 210, 0
- , 55, 67, 211, 0, 56, 68, 55, 0, 928, 57
- , 69, 56, 0, 58, 57, 0, 59, 58, 0, 60
- , 70, 59, 151, 1402, 0, 60, 2, 0, 61, 1402
- , 0, 62, 61, 0, 466, 63, 62, 0, 64, 63
- , 0, 66, 65, 0, 67, 66, 0, 68, 67, 0
- , 69, 475, 68, 1402, 0, 522, 1402, 0, 35, 523
- , 0, 36, 524, 0, 37, 525, 0, 528, 49, 0
- , 531, 112, 52, 0, 532, 220, 0, 102, 63, 0
- , 39, 302, 64, 0, 40, 1216, 0, 41, 65, 0
- , 42, 68, 0, 538, 69, 0, 36, 837, 0, 199
- , 115, 0, 40, 771, 0, 639, 34, 0, 640, 30
- , 0, 278, 35, 0, 907, 36, 0, 166, 102, 0
- , 98, 649, 42, 0, 62, 641, 245, 0, 63, 246
- , 0, 64, 642, 0, 65, 39, 0, 66, 40, 0
- , 896, 826, 67, 41, 0, 68, 405, 0, 70, 355
- , 0, 122, 44, 0, 65, 248, 0, 330, 42, 5
- , 0, 70, 10, 0, 277, 376, 0, 619, 262, 0
- , 850, 50, 0, 492, 51, 0, 85, 51, 0, 52
- , 235, 0, 55, 67, 0, 56, 68, 0, 57, 69
- , 0, 169, 58, 0, 602, 62, 0, 480, 65, 0
- , 357, 69, 0, 938, 170, 0, 851, 34, 0, 643
- , 283, 0, 34, 576, 0, 102, 34, 0, 939, 35
- , 217, 0, 36, 35, 0, 37, 36, 0, 39, 308
- , 38, 0, 40, 39, 0, 41, 40, 0, 924, 43
- , 0, 104, 44, 0, 35, 675, 453, 0, 36, 81
- , 0, 897, 375, 106, 252, 0, 102, 741, 0, 85
- , 51, 610, 0, 167, 46, 0, 39, 110, 0, 42
- , 56, 0, 43, 59, 0, 61, 262, 284, 0, 62
- , 47, 0, 34, 63, 0, 70, 48, 0, 940, 36
- , 0, 50, 49, 0, 51, 50, 0, 36, 53, 0
- , 37, 54, 0, 56, 55, 0, 57, 56, 0, 811
- , 58, 57, 0, 59, 58, 0, 60, 59, 0, 339
- , 60, 0, 62, 61, 0, 63, 62, 0, 102, 64
- , 63, 0, 39, 96, 64, 0, 40, 65, 0, 695
- , 41, 66, 65, 0, 67, 66, 0, 68, 67, 0
- , 42, 69, 68, 0, 649, 69, 0, 43, 70, 0
- , 651, 70, 0, 406, 102, 0, 49, 41, 0, 52
- , 714, 0, 375, 68, 0, 126, 69, 0, 96, 34
- , 0, 34, 407, 0, 409, 151, 0, 577, 136, 0
- , 50, 411, 0, 51, 1366, 71, 0, 52, 413, 0
- , 838, 1366, 0, 414, 253, 0, 56, 49, 0, 57
- , 50, 0, 58, 51, 0, 60, 169, 0, 61, 415
- , 0, 217, 408, 64, 623, 0, 65, 416, 39, 0
- , 66, 40, 0, 67, 417, 41, 0, 68, 348, 0
- , 708, 69, 0, 1366, 61, 304, 0, 102, 63, 0
- , 39, 418, 64, 0, 41, 40, 65, 0, 41, 66
- , 0, 42, 68, 0, 169, 14, 0, 676, 331, 0
- , 173, 359, 0, 677, 16, 0, 102, 611, 0, 566
- , 175, 0, 262, 277, 0, 772, 536, 0, 179, 50
- , 0, 180, 51, 0, 181, 13, 0, 182, 14, 0
- , 184, 52, 0, 493, 185, 0, 187, 332, 0, 50
- , 49, 55, 0, 51, 50, 56, 0, 51, 57, 0
- , 192, 59, 15, 0, 52, 193, 60, 0, 35, 63
- , 0, 36, 64, 0, 55, 66, 0, 864, 56, 67
- , 0, 57, 68, 17, 0, 58, 69, 161, 0, 59
- , 678, 0, 63, 83, 0, 70, 167, 257, 0, 102
- , 422, 0, 920, 41, 423, 0, 49, 425, 0, 42
- , 50, 426, 0, 51, 427, 0, 43, 429, 0, 44
- , 431, 0, 432, 195, 0, 316, 433, 196, 0, 434
- , 197, 0, 827, 696, 436, 0, 231, 442, 0, 443
- , 20, 0, 169, 487, 0, 679, 445, 0, 654, 137
- , 0, 865, 170, 23, 0, 709, 198, 0, 682, 25
- , 0, 217, 710, 683, 26, 0, 684, 102, 0, 685
- , 39, 0, 40, 199, 0, 49, 41, 0, 52, 43
- , 0, 448, 36, 0, 64, 34, 0, 67, 30, 0
- , 68, 31, 0, 624, 201, 0, 202, 102, 0, 203
- , 39, 35, 0, 40, 36, 0, 41, 37, 0, 42
- , 101, 0, 579, 25, 0, 102, 27, 0, 1042, 39
- , 0, 698, 41, 0, 379, 44, 0, 1042, 28, 0
- , 44, 29, 0, 1042, 30, 0, 49, 31, 0, 333
- , 221, 0, 1042, 62, 0, 743, 34, 63, 0, 1042
- , 66, 0, 1042, 67, 0, 1042, 68, 0, 1042, 496
- , 537, 69, 0, 1289, 70, 0, 1042, 361, 0, 1289
- , 104, 0, 1042, 82, 0, 1042, 49, 0, 1042, 50
- , 0, 1042, 105, 0, 866, 35, 238, 0, 126, 106
- , 0, 800, 61, 0, 773, 63, 0, 921, 64, 0
- , 68, 49, 0, 282, 69, 50, 0, 70, 169, 0
- , 109, 32, 0, 39, 110, 0, 628, 495, 0, 50
- , 55, 0, 51, 42, 56, 0, 43, 59, 0, 815
- , 52, 60, 0, 55, 66, 0, 56, 67, 0, 57
- , 68, 0, 58, 538, 69, 0, 828, 61, 0, 169
- , 487, 0, 317, 286, 0, 34, 699, 0, 787, 700
- , 0, 50, 138, 0, 702, 39, 0, 57, 42, 0
- , 612, 59, 0, 60, 43, 0, 499, 44, 0, 500
- , 61, 0, 877, 102, 774, 63, 0, 39, 64, 0
- , 41, 65, 0, 42, 578, 68, 0, 126, 69, 0
- , 579, 34, 0, 225, 314, 0, 663, 37, 0, 867
- , 262, 0, 151, 42, 0, 1367, 44, 0, 498, 52
- , 0, 878, 500, 0, 49, 723, 0, 50, 55, 0
- , 51, 56, 0, 630, 57, 0, 52, 60, 0, 61
- , 307, 0, 744, 63, 0, 96, 64, 0, 812, 69
- , 0, 801, 46, 0, 65, 308, 0, 70, 539, 0
- , 929, 605, 0, 96, 81, 0, 510, 50, 0, 52
- , 178, 0, 62, 83, 0, 35, 96, 63, 0, 36
- , 64, 0, 39, 96, 0, 804, 34, 0, 318, 159
- , 0, 899, 151, 0, 56, 334, 0, 57, 335, 0
- , 277, 381, 0, 776, 52, 0, 900, 472, 0, 247
- , 382, 0, 35, 613, 557, 0, 36, 102, 0, 37
- , 39, 0, 478, 40, 0, 747, 457, 0, 384, 34
- , 0, 807, 147, 0, 200, 262, 0, 203, 35, 0
- , 278, 36, 35, 0, 37, 36, 0, 39, 38, 0
- , 40, 39, 0, 41, 40, 0, 42, 50, 0, 151
- , 51, 42, 0, 44, 52, 0, 758, 44, 0, 49
- , 501, 66, 0, 50, 67, 45, 0, 51, 68, 0
- , 52, 70, 0, 842, 57, 0, 58, 46, 0, 59
- , 46, 0, 50, 49, 0, 749, 51, 50, 0, 343
- , 51, 0, 54, 53, 0, 56, 55, 0, 57, 56
- , 0, 58, 57, 0, 59, 58, 0, 60, 59, 0
- , 727, 124, 61, 363, 0, 62, 61, 0, 63, 62
- , 0, 64, 63, 0, 35, 64, 0, 65, 36, 0
- , 66, 37, 65, 0, 67, 66, 0, 68, 67, 0
- , 69, 101, 68, 0, 1011, 102, 264, 0, 548, 336
- , 42, 0, 550, 43, 0, 104, 289, 0, 558, 487
- , 0, 39, 338, 0, 879, 41, 0, 42, 56, 0
- , 43, 59, 151, 0, 83, 61, 0, 35, 34, 63
- , 0, 36, 64, 0, 49, 545, 67, 0, 50, 68
- , 0, 85, 51, 69, 0, 40, 35, 0, 41, 36
- , 0, 42, 265, 0, 471, 61, 0, 214, 69, 0
- , 472, 70, 0, 51, 1370, 0, 52, 1370, 0, 262
- , 410, 0, 56, 411, 0, 57, 1366, 101, 0, 151
- , 58, 0, 60, 412, 0, 63, 1366, 0, 66, 414
- , 0, 69, 475, 0, 416, 39, 385, 35, 0, 476
- , 40, 0, 49, 417, 41, 37, 0, 50, 477, 0
- , 52, 43, 0, 55, 41, 0, 56, 478, 0, 64
- , 843, 0, 65, 102, 0, 66, 39, 0, 67, 1042
- , 40, 0, 68, 41, 0, 69, 49, 0, 931, 51
- , 42, 0, 70, 148, 0, 854, 419, 112, 0, 1042
- , 63, 0, 912, 64, 0, 1042, 35, 0, 65, 36
- , 0, 66, 37, 0, 1042, 386, 67, 0, 387, 70
- , 0, 35, 559, 0, 155, 39, 114, 0, 40, 115
- , 0, 1042, 41, 116, 0, 1042, 106, 0, 1042, 42
- , 117, 0, 1042, 421, 0, 1042, 43, 118, 0, 1042
- , 119, 0, 1042, 44, 120, 0, 34, 1042, 0, 39
- , 1042, 0, 40, 1042, 0, 41, 1042, 0, 1264, 49
- , 0, 42, 50, 0, 1042, 51, 156, 0, 43, 1042
- , 151, 0, 44, 1042, 52, 0, 512, 124, 0, 546
- , 338, 96, 0, 35, 63, 0, 36, 64, 0, 932
- , 67, 0, 502, 68, 49, 0, 547, 69, 50, 0
- , 89, 51, 0, 124, 150, 0, 40, 870, 274, 0
- , 41, 583, 0, 698, 389, 0, 42, 426, 67, 0
- , 427, 390, 68, 0, 428, 479, 366, 69, 0, 43
- , 429, 0, 430, 151, 0, 44, 431, 0, 262, 433
- , 0, 435, 503, 0, 436, 34, 0, 125, 441, 0
- , 126, 585, 0, 444, 49, 0, 809, 504, 50, 0
- , 548, 51, 0, 810, 549, 0, 551, 52, 121, 0
- , 532, 35, 0, 533, 37, 0, 50, 266, 0, 51
- , 224, 0, 52, 446, 0, 61, 225, 0, 35, 102
- , 63, 0, 36, 64, 0, 37, 40, 0, 41, 627
- , 65, 0, 55, 66, 0, 56, 67, 0, 57, 586
- , 68, 0, 58, 69, 0, 34, 63, 587, 0, 65
- , 39, 0, 66, 40, 0, 67, 41, 0, 105, 42
- , 0, 734, 70, 0, 39, 159, 0, 588, 277, 0
- , 210, 291, 0, 65, 901, 39, 0, 66, 40, 0
- , 67, 41, 480, 0, 70, 659, 0, 816, 697, 44
- , 505, 0, 818, 481, 262, 0, 169, 151, 0, 496
- , 50, 125, 0, 51, 126, 0, 35, 96, 0, 36
- , 35, 0, 37, 36, 0, 50, 350, 0, 1044, 339
- , 0, 62, 124, 0, 1044, 63, 0, 27, 64, 0
- , 831, 1044, 35, 0, 65, 36, 0, 66, 37, 0
- , 170, 1044, 67, 0, 213, 68, 0, 62, 320, 0
- , 102, 64, 1044, 0, 39, 102, 0, 636, 40, 65
- , 39, 0, 41, 66, 40, 0, 67, 41, 0, 42
- , 69, 0, 42, 125, 0, 43, 70, 169, 0, 49
- , 1044, 41, 0, 50, 1044, 170, 0, 51, 1044, 0
- , 1044, 42, 0, 1044, 89, 0, 1044, 169, 0, 52
- , 1044, 43, 0, 1044, 44, 0, 56, 1265, 0, 57
- , 704, 0, 58, 1044, 0, 59, 98, 0, 60, 1044
- , 90, 0, 61, 16, 0, 65, 35, 0, 881, 66
- , 36, 0, 67, 37, 0, 262, 127, 245, 0, 649
- , 42, 0, 832, 151, 0, 651, 43, 0, 340, 292
- , 262, 0, 50, 49, 0, 51, 50, 0, 51, 369
- , 0, 944, 52, 0, 638, 277, 0, 35, 248, 370
- , 0, 56, 49, 0, 57, 50, 0, 58, 51, 0
- , 61, 52, 0, 62, 61, 0, 63, 62, 0, 64
- , 63, 0, 494, 64, 0, 65, 39, 0, 66, 495
- , 65, 0, 67, 41, 66, 0, 68, 67, 0, 69
- , 68, 267, 0, 42, 214, 69, 0, 43, 70, 0
- , 699, 61, 240, 0, 779, 62, 0, 38, 63, 0
- , 39, 64, 0, 41, 65, 0, 67, 226, 0, 42
- , 68, 227, 0, 43, 151, 0, 728, 34, 0, 660
- , 41, 0, 496, 50, 0, 482, 62, 0, 35, 293
- , 64, 0, 37, 65, 0, 410, 70, 0, 51, 42
- , 0, 169, 91, 0, 34, 92, 0, 49, 55, 41
- , 0, 50, 56, 0, 51, 57, 0, 58, 42, 0
- , 59, 483, 0, 64, 34, 0, 54, 65, 0, 55
- , 67, 0, 56, 68, 0, 57, 69, 0, 60, 70
- , 0, 316, 61, 0, 833, 407, 62, 0, 871, 408
- , 64, 0, 65, 36, 0, 66, 37, 0, 68, 49
- , 0, 1370, 69, 50, 0, 1112, 35, 0, 420, 1112
- , 37, 0, 891, 412, 0, 414, 40, 0, 415, 44
- , 0, 416, 166, 102, 0, 417, 40, 0, 1366, 553
- , 44, 0, 50, 75, 0, 52, 321, 0, 419, 499
- , 52, 0, 500, 61, 0, 753, 34, 63, 0, 591
- , 65, 0, 102, 819, 0, 40, 152, 0, 71, 67
- , 0, 35, 298, 0, 169, 421, 0, 39, 77, 0
- , 42, 50, 0, 44, 52, 0, 49, 67, 0, 50
- , 68, 268, 0, 51, 69, 0, 65, 171, 0, 882
- , 629, 66, 0, 68, 228, 0, 883, 630, 69, 172
- , 0, 934, 424, 0, 49, 425, 0, 50, 375, 426
- , 0, 51, 126, 427, 0, 428, 175, 0, 429, 176
- , 0, 432, 177, 0, 127, 433, 178, 0, 434, 506
- , 0, 639, 436, 0, 437, 484, 0, 438, 159, 0
- , 640, 439, 0, 443, 34, 0, 51, 179, 0, 445
- , 181, 0, 446, 182, 0, 447, 52, 183, 0, 717
- , 187, 0, 35, 102, 188, 0, 36, 39, 189, 0
- , 37, 40, 190, 0, 41, 191, 0, 780, 42, 0
- , 714, 43, 192, 0, 44, 194, 0, 763, 63, 0
- , 642, 844, 0, 102, 34, 0, 834, 39, 0, 34
- , 197, 0, 820, 35, 563, 0, 36, 102, 0, 37
- , 39, 0, 631, 554, 44, 0, 151, 311, 0, 39
- , 102, 0, 41, 40, 0, 49, 67, 0, 50, 68
- , 0, 51, 69, 0, 408, 25, 0, 410, 301, 0
- , 62, 262, 0, 63, 608, 0, 566, 69, 0, 70
- , 151, 0, 96, 201, 0, 202, 78, 0, 676, 50
- , 0, 151, 51, 0, 515, 564, 0, 159, 62, 94
- , 0, 736, 65, 0, 49, 66, 0, 50, 49, 67
- , 0, 51, 50, 68, 0, 51, 69, 172, 0, 765
- , 13, 0, 52, 70, 0, 57, 510, 0, 59, 98
- , 0, 858, 60, 204, 0, 124, 61, 16, 0, 519
- , 62, 0, 278, 159, 0, 821, 766, 180, 0, 35
- , 188, 0, 36, 275, 189, 0, 37, 190, 0, 614
- , 192, 0, 859, 193, 0, 277, 194, 0, 524, 35
- , 0, 525, 36, 0, 526, 37, 0, 792, 507, 0
- , 532, 102, 0, 533, 40, 0, 478, 41, 0, 644
- , 43, 0, 102, 34, 0, 40, 645, 0, 679, 43
- , 0, 681, 209, 0, 893, 683, 0, 685, 38, 0
- , 241, 44, 0, 49, 324, 0, 294, 27, 0, 51
- , 213, 0, 884, 63, 0, 62, 47, 0, 67, 30
- , 0, 68, 31, 0, 70, 48, 0) ;
- --| Actions to perform for all combinations of parser
- --| states and input tokens.
- -- NYU Reference Name: ACTION_TABLE1
-
- ActionTableTwo :
- constant array (ActionTableTwoRange)
- of GC.ParserInteger :=
- ( 0, 0, 0, 0,27509,27510, 0, 0, 0, 0
- , 5511, 0, 0, 0, 0, 0,154044, 0, 0,231061
- , 0, 0, 0,71536,71537, 0,33032, 0, 0, 0
- ,132054, 0, 0, 0, 0,71548, 0, 0,71551,71552
- , 0, 0,71555,71556, 0, 0,71559,71560,71561, 0
- , 0,71564,71565,71566,71567,71568, 0, 0,71571, 0
- , 0, 0,66074, 0, 0,231107,231108, 0,148595, 0
- , 0, 0, 0, 0,66086, 0,170607,253123, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,198123, 0, 0
- , 0,242135, 0, 0, 0,55105, 0,55107,55108, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,253155
- ,253156,253157, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,181655, 0, 0,181658, 0, 0, 0, 0
- , 0, 0, 0, 0,165164,110155, 0, 0, 0, 0
- ,253186,253187,253188, 0,198180,253191, 0,231189,253194, 0
- ,253196, 0, 0, 0, 0, 0,49665, 0, 0, 0
- , 0,71674, 0, 0,170695, 0, 0,264215, 0,280720
- ,264218, 0, 0,132197,231216,231217,231218, 0, 0,55189
- , 0, 0, 0, 0, 0, 0,121208, 0, 0, 0
- , 0, 0,77206, 0, 0, 0, 0, 0,88214, 0
- ,220240,132225,132226,132227,132228, 0, 0, 0,55218, 0
- ,132234, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,49734, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,82750,159765, 0,71751, 0
- , 0, 0, 0, 0, 0, 0, 0,99265, 0, 0
- ,253296,253297,253298,132277, 0, 0,253302, 0, 0, 0
- , 0, 0, 0,11265, 0,27770, 0, 0, 0, 0
- , 0, 0, 0,253319, 0,253321,253322, 0,253324,253325
- ,253326, 0,253328, 0,286336, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,33310,49814, 0, 0, 0, 0
- ,33316,231353,132336, 0, 0, 0, 0, 0,132342, 0
- , 0, 0,209360, 0, 0, 0, 0,132351,132352,132353
- , 0,132355, 0, 0, 0,132359,132360,132361, 0,231381
- ,132364,132365,132366, 0,132368, 0,33352,132371,291901, 0
- , 0, 0, 0, 0, 0,33361,33362,33363,33364,33365
- ,33366, 0, 0, 0,33370,33371, 0, 0, 0, 0
- , 0, 0,121394,71886, 0,132399, 0, 0,132402, 0
- , 0, 0, 0, 0, 0,198421, 0,291940, 0, 0
- ,121412, 0,121414, 0, 0, 0, 0, 0, 0,22403
- ,27905, 0, 0, 0, 0, 0, 0,115928, 0, 0
- , 0, 0,11414, 0, 0,55425, 0, 0, 418, 0
- , 0, 0, 0, 0, 0, 0,225967, 0,286480,198465
- , 0, 0, 0,22437,115955, 0, 0,253483, 0, 0
- , 0, 0, 0, 0, 0, 0,291999, 0, 0,225990
- ,225991, 0, 0, 0, 0, 0,225997, 0, 0, 0
- , 0,22465,22466,22467,22468, 0, 0,22471, 0, 0
- , 0,33477, 0,171004,281025,165505,49985, 0, 0, 0
- , 0, 0, 0,33489, 0, 0,231528,264535, 0, 0
- , 0, 0, 0, 0,253540, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,198549,226055, 0, 0, 0,242562, 0
- , 0, 0, 0, 0, 0, 0,242570, 0,242572, 0
- ,242574,242575,17035, 0, 0, 0, 0,242581, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,242593
- , 0,187585,72065,242597, 0,242599, 0, 0, 0,242603
- , 0, 0,242606, 0, 0, 0, 0, 0,39075, 0
- ,39077, 0,22576,22577,22578, 0, 0, 0, 0, 0
- , 0,242625, 0, 0,242628, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,22600,22601, 0,39106
- , 0, 0, 0, 0, 0, 605, 606,39114,242652, 0
- , 0, 0, 0, 0, 0, 0,242660, 0, 0, 0
- , 0, 0, 0, 0,165654,231667, 0,231669,231670, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,33647,209680, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,259203,281208,149185, 0
- , 0, 0, 0, 0,33670, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,198713, 0, 0
- , 0, 0,39189, 0, 0,39192, 0,292240, 0,259236
- ,259237, 0,242736,242737,242738,110715, 0, 0, 0, 0
- , 0,88717, 0, 0, 0, 705,149233, 0, 0, 0
- , 0,39218, 0, 0, 0,39222,116237, 0,259265, 0
- ,259267,259268, 0,204260,259271,275775, 0,259274, 0, 0
- , 0, 0, 0,39240, 0, 0,242780, 0, 0, 0
- , 0, 0,242786,242787, 0,242789,242790,242791,242792,242793
- , 0,242795,242796,242797,242798, 0, 0, 0, 0, 0
- , 0, 0,253808,242807, 0, 0, 0, 0, 0,242813
- , 0, 0, 0, 0, 0, 0, 0, 0,204315, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,242832,242833
- ,242834,259338, 0, 0,281345, 0,50305, 0, 0, 0
- , 0, 0,259349,259350, 0,259352, 0, 0, 0, 0
- ,165840, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,55834, 0, 0, 0, 0,259376
- ,259377,259378, 0,55843, 0,259382, 0, 0,198874, 0
- , 0,132865, 0, 0, 0, 0, 0, 0,149375, 0
- , 0, 0, 0,259400,259401,259402, 0,259404,259405,259406
- ,259407,259408, 0,160392,259411,99883, 0, 0, 0, 0
- , 0, 0,72385, 0,83389, 0, 0, 0, 0, 0
- , 0, 0, 0,171414, 0, 0, 0, 0,39395,39396
- ,39397, 0, 0, 0, 0, 0, 0,143923, 0, 0
- , 0, 0, 0, 0, 0, 0,143932,231949, 0, 0
- , 0, 0, 0, 0, 0, 0,264964, 0,39425,39426
- ,39427,39428,99940, 0,39431, 0, 0, 0, 0,39436
- , 0, 0, 0, 0, 0, 0, 0, 0,297992, 0
- , 0, 0, 0, 0, 0, 0,298000, 0, 0, 0
- , 0, 0, 0, 0, 0,265003, 0, 0, 0,209997
- , 0, 0,210000, 0, 0, 0, 0,17470, 0,265017
- , 0, 0, 0,265021, 0,221015, 0, 0,149505, 0
- , 0, 0,177014, 0, 0, 0, 0, 0, 0, 0
- ,133014,39498, 0, 0, 0,199031, 0, 0, 0, 0
- , 0, 0,39509, 0, 0, 0, 0, 0,83523, 0
- , 0, 0,265060, 0, 0, 0, 0, 0, 0, 0
- , 0,188055, 0, 0,188058, 0, 0,149554, 0,39536
- ,39537, 0, 0, 0, 0,39542, 0, 0, 0,116560
- , 0,83556, 0,259590,259591,149572, 0,149574, 0, 0
- ,259597, 0, 0,39560,39561, 0, 1056,39564,39565,39566
- ,39567,39568, 0, 0,39571, 0, 0, 0, 0, 0
- ,83585,83586, 0, 0, 0, 0, 0,50586, 0, 0
- , 0,83596, 0, 0, 0, 0, 0,166117, 0, 0
- , 0, 0, 0, 0, 0, 0,50605, 0, 0, 0
- , 0, 0, 0, 0,17607, 0, 0,226648, 0, 0
- ,221150, 0, 0, 0,160643, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,149654, 0,188163
- ,72643,133155,133156,133157,226675, 0,17639, 0, 0,265187
- , 0, 0, 0,83658, 0, 0,160675,160676, 0, 0
- , 0, 0,78166, 0,83669, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,12167, 0,133191,100186,100187
- ,133194, 0,133196, 0, 0,276225, 0,160706,160707,160708
- , 0,83696, 0,83698,100202,160714, 0, 0,12190,265237
- ,265238, 0, 0, 0, 0,72708,83711, 0, 0, 0
- ,188234,72714, 0, 0, 0, 0, 0, 0,39715, 0
- , 0,83726,83727, 0, 0, 0,83731, 0,270767, 0
- , 0, 0,12224,122245, 0, 0,122248,12229,12230,12231
- ,12232,12233, 0,12235, 0, 0,12238, 0,39745, 0
- , 0, 0,12244, 0, 0, 0, 0, 0, 0, 0
- , 0,100269, 0, 0, 0, 0, 0, 0, 0, 0
- ,160789, 0,122284, 0, 0, 0,122288,182800, 0, 0
- , 0,298325,133296, 0, 0,188309,72789, 0,133302, 0
- ,94797, 0,254328, 0, 0, 0, 0, 0, 0, 0
- , 0,133315,133316,160822, 0,133319,133320,133321,133322, 0
- ,133324,133325, 0, 0, 0, 0, 0, 0,188342,72822
- ,160839, 0, 0, 0,100332, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,72842
- ,188364, 0, 0, 0, 0,72848, 0,188371,72851, 0
- ,122362, 0, 0, 0, 0, 0, 0,122369,122370, 0
- ,39857,39858, 0,122375,122376, 0, 0,254403,276408, 0
- , 0,83876,122384,122385,259911, 0, 0, 0,188402,56379
- ,226911, 0,39879,39880, 0, 0, 0, 0,39885,39886
- , 0, 0, 0,171914,39891,171916, 0, 0,287440,254435
- , 0,254437, 0, 0, 0, 0,100414, 0, 0, 0
- , 0, 0, 0,100421,100422,100423,83921, 0,83923, 0
- ,100428, 0, 0, 0,83929,83930,83931, 0, 0,254465
- ,254466, 0,254468, 0,17927,254471, 0, 0,254474, 0
- ,254476, 0,232474, 0,281985, 0, 0, 0, 0,100457
- ,160969, 0, 0, 0, 0, 0, 0,171978, 0, 0
- ,72963, 0, 0, 0, 0, 0, 0,193992,171989,171990
- , 0,171992, 0, 0, 0, 0, 0, 0,45476,45477
- , 0, 0, 0,12475, 0, 0, 0, 0, 0,188513
- , 0, 0,72995, 0,72997,172016,172017,172018, 0,50998
- , 0,172022,254538, 0, 0,243539, 0, 0,45506,45507
- ,45508,282052, 0, 0,254550, 0,254552, 0,172039, 0
- , 0, 0,73025, 0, 0, 0, 0,172048,73031, 0
- , 0,73034,84037, 0, 0, 0, 0, 0, 0, 0
- ,254576,254577,254578, 0,84049, 0,254582, 0, 0, 0
- ,40047, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,254599,254600,254601,254602, 0, 0,254605
- ,254606,254607,254608, 0, 0, 0, 1566, 0, 0, 1569
- , 0,271120, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,45589, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,73109, 0, 0, 0
- , 0, 0, 0,122625, 0,265653, 0, 0,45616, 0
- , 0,177643, 0, 0,45622,89631,100634, 0, 0, 0
- , 0, 0, 0,73136,73137, 0,100644, 0, 0, 0
- , 0,133655,45640,45641,45642, 0,45644,45645, 0, 0
- , 0, 0,73155,73156, 0, 0,73159, 0,73161,73162
- , 0, 0,73165,73166,73167, 0, 0, 0,73171, 0
- , 0,122683, 0, 0, 0, 0, 0,172198, 0, 0
- , 0, 1671, 0,40180, 0,40182, 0, 0, 0, 0
- , 1680, 0, 0, 0, 0,260232, 0, 0, 0, 0
- , 0,133715, 0,260240, 0,56705, 0, 0,232740,40206
- , 0, 0, 0, 0, 0, 0, 0,23711, 0, 0
- , 0, 0, 0,100731, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,205260,227265, 0, 0,23731, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,34744, 0
- , 0, 0,161271,161272, 0, 0, 0,23751, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,227313, 0, 0, 0,18279, 0, 0, 0
- , 0, 0,227323, 0, 0, 0,161315,161316,161317, 0
- , 0,161320, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,161346,161347,161348
- , 0, 0,161351, 0, 0,161354, 0,161356, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,40357, 0, 0, 0, 0, 0, 0, 0, 0,67871
- , 0,216400, 0, 0, 0, 0, 0, 0,161397, 0
- , 0, 0, 0, 0,95391,265923, 0,155905, 0, 0
- , 0,40388, 0,155911,40391, 0,155914, 0,155916, 0
- , 0, 0, 0,95410, 0, 0, 0, 0, 0, 0
- ,161429, 0, 0, 0, 0, 0, 0, 0, 0,265957
- , 0, 0, 0,210951, 0, 0, 0, 0, 0,210957
- ,188954, 0, 0, 0,238467,238468, 0,161456,161457, 0
- , 0, 0,161461,161462,161463,89951,161465,265985, 0,265987
- ,265988, 0,161471, 0,161473,161474, 0,161476,265996, 0
- , 0, 0, 0,161482,260501,161484,161485,161486,161487,161488
- , 0,155989, 0, 0, 0, 0, 0,150494,84483, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,172515, 0,172517, 0,156016, 0
- , 0,40498, 0, 0,156022,40502, 0, 0, 0, 0
- ,84515, 0, 0,156031, 0, 0, 0, 0, 0, 0
- ,266058,156039, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,266070, 0, 0,172556, 0, 0,288080, 0
- , 0,84546,84547, 0,238577,238578,84551, 0, 0,84554
- , 0,84556, 0,62554, 0, 0, 0, 0,266096,266097
- ,266098,227592, 0, 0, 0,24059,282607, 0, 0,24063
- ,35066,24065, 0, 0, 0, 0,172597, 0, 0, 0
- , 0,266119,266120,266121,266122, 0,266124,266125,266126, 0
- , 0, 0,277132,266131, 0, 0,282637,172618, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,172629, 0
- , 0, 0, 0,84618, 0, 0,101124, 0, 0,24113
- , 0, 0,101130, 0, 0, 0,101134,101135,145144, 0
- , 0, 0,73635,73636,73637,172656, 0, 0, 0, 0
- ,101148, 0, 0, 0, 0, 0,216675,216676,216677, 0
- ,172671, 0, 0, 0,172675, 0, 0,84662, 0,172680
- ,172681, 0,73665, 0, 0, 0, 0, 0,73671,194694
- ,172691,73674,183695,73676, 0,84680, 0, 0,216707, 0
- , 0,84686, 0,84688, 0,216714,84691,216716, 0, 0
- , 0, 0, 0, 0,95701, 0, 0, 0,95705,95706
- , 0, 0, 0, 0,101212, 0, 0, 0,40705, 0
- ,40707,40708,101220,271752, 0, 0, 0, 0, 0, 0
- , 7711, 0, 0, 0,183747,183748, 0, 0, 0,95736
- , 0, 0,95739,95740, 0,73738, 0, 0,95745, 0
- , 0, 0, 0, 0,211272, 0,73749,150764, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,183780,73761, 0
- ,216789,101269, 0,123275, 0,222295,260803, 0, 0, 7760
- , 0, 0, 0,73776, 0, 0, 0, 0,95785, 0
- , 0,95788, 0,95790,95791,95792,95793,216816, 0, 0
- , 0,73794, 0, 0,95801, 2285,73799,73800, 0, 0
- ,260837,73804, 0, 0, 0, 0, 0,216836,73811,90315
- ,216839,216840, 0,216842, 0,216844,216845,216846,216847,216848
- , 0,68323, 0, 0, 0, 0, 0, 0, 0,260866
- ,260867, 0,101340, 0, 0, 0,101344, 0,101346, 0
- , 0, 0, 0,101351, 0,101353,101354,101355,101356,101357
- , 0, 0, 0,216882, 0, 0, 2346, 2347, 0, 0
- , 0, 2351, 0, 0, 0,101373, 0, 0, 0, 0
- , 0, 0,51871, 0,106883, 0, 0, 0, 0, 0
- , 0,112391, 0, 0, 0,101393,101394,112397,183911, 0
- ,112400,24385, 0,183916, 0, 0, 0, 0, 0, 0
- , 0,260938,233434, 0, 0, 0,106915,106916,106917,68411
- , 0, 0,260949, 0, 0, 0, 0, 0, 0, 0
- ,73923, 0, 0, 2413, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,260977,260978,106951, 0, 0, 0, 0,106956, 0, 0
- , 0,13443,73955, 0,73957,101463, 0,249992, 0,189483
- ,249995, 0,260999,261000,261001, 0, 0,261004,261005, 0
- , 0,261008, 0, 0,261011, 0, 0,189501, 0, 0
- ,95987, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,73994, 0,73996, 0, 0, 0,156515,156516,156517
- , 0,217030,217031, 0, 2494, 0, 0, 0,217037,107018
- , 0, 0, 2502, 0, 0,13507, 0, 0, 0,13511
- ,107029, 0,13514, 0, 0, 0, 0,156545,156546,156547
- ,156548, 0,107041,156551, 0, 0,156554, 0, 0, 0
- , 0,239074, 0,239076, 0, 0, 0, 0,107057,107058
- , 0, 0, 0,107062,239087, 0,239089, 0, 0, 0
- , 0, 0, 0, 0, 0,13557,74069, 0, 0, 0
- ,107079, 0, 0,107082, 0,107084, 0, 0, 0, 0
- ,239113,239114, 0,239116, 0,239118, 0,266625,239121, 0
- ,239123, 0, 0, 0, 0,74098,239129, 0,239131,74102
- ,156618,129114, 0, 0, 0,118116,118117, 0,178630, 0
- , 0,156629, 0, 0, 0,178637, 0,74120, 0, 0
- , 0,74124,74125,74126, 0, 0,13618, 0, 0,13621
- ,13622,13623, 0, 0,118145, 0, 0,118148,156656, 0
- , 0,13633,13634, 0, 0,118156, 0,13639,13640,13641
- ,13642, 0,13644, 0, 0, 0, 0,156675,156676,13651
- ,112670, 0,156680,156681,156682, 0,156684,156685,156686,156687
- ,156688,112681, 0,156691, 0, 0, 0,24671, 0, 0
- , 0, 0, 0, 0, 0,30180,118197, 0, 0, 0
- , 0, 0, 0,68695,107203, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,118218, 0, 0
- , 0, 0, 0, 0,173235, 0, 0,272256,118229, 0
- , 0,244755, 0, 0, 0, 0,107235,107236,107237, 0
- , 0, 0, 0, 0,189758, 0, 0, 0, 0,283280
- ,250275,250276,250277, 0,255780,118256, 0,118258, 0, 0
- , 0,118262, 0,184276, 0, 0,107265, 0,107267,107268
- ,118271,118272, 0,118274, 0, 0,156784, 0, 0,118280
- , 0, 0,250307, 0,118285,118286, 0, 0, 0,250314
- ,118291,250316, 0,134797, 0, 0, 0,244821, 0, 0
- , 0, 0, 0, 0,134808, 0, 0, 0, 0,250334
- , 0,162320, 0, 0, 0, 0, 0,184330,107317, 0
- , 0,184334, 0, 0, 0, 0, 0, 0,41315,41316
- , 0, 0,184345, 0, 0, 0, 0, 0,261365, 0
- ,184353, 0,101840,299877, 0, 0,123848, 0, 0, 0
- ,107349, 0, 0,250378, 0, 0, 0,129360,41345,41346
- ,41347,41348, 0, 0, 0, 0, 0,41354, 0, 0
- , 0, 2851, 0,68865, 0, 0, 0,107376,107377,107378
- , 0,118382, 0, 0,118385, 0, 0, 0,96385, 0
- , 0, 0, 0, 0, 0,107394,107395, 0, 0, 0
- , 0,107400, 0, 0, 0,107404,107405,107406,107407, 0
- , 0, 0,107411, 0,250439,250440,250441,250442, 0, 0
- ,250445,250446,250447,250448, 0, 0, 0, 0, 0, 0
- , 0,41418, 0, 0, 0, 0, 0, 0, 0,178951
- , 0, 0,41429, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,123954, 0,123956, 0, 0, 0, 0,299993
- ,299994, 0,228483,233985, 0, 0, 0, 0, 0,41456
- , 0,41458,123974, 0, 0, 0,217495, 0, 0,217498
- , 0, 0,41469, 0,41471,41472,41473,41474,41475,41476
- , 0, 0,41479, 0, 0, 0,228517,41484,41485,41486
- ,41487,41488, 8483, 0,41491, 0, 0, 0, 0,201025
- , 0,234033, 0, 0, 0, 0,91012, 0,91014, 0
- , 0, 0, 0, 0,228545, 0,228547,228548, 0, 0
- ,228551, 0, 0,228554, 0,228556, 0, 0, 0, 0
- , 0, 0,217561, 0, 0, 0, 0,25031, 0, 0
- , 0, 0,124054, 0,234076, 0, 0, 0, 0, 0
- ,223080, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,228597, 0, 0, 0
- , 0, 0, 0, 0,30569,223105, 0,47075,47076,47077
- , 0, 0,113092, 0,113094, 0, 0,228618,91094, 0
- , 0, 0, 0, 0,52593, 0,19589,41594, 0, 0
- , 0,19594, 0,19596, 0, 0, 0,47105,47106,47107
- ,47108, 0, 0,47111, 0, 0, 0, 0,261655, 0
- , 0,261658, 0, 0, 0,228656,228657,228658, 0,179151
- , 0,228662,272671,173654, 0, 0, 0, 0, 0, 0
- ,228671, 0, 0,228674,228675,228676, 0, 0,228679,228680
- ,228681,228682, 0,228684,228685,228686,228687,228688, 0, 0
- ,228691, 0, 0, 0, 0, 0, 0,129680, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,41675, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,47189, 0, 0,36190, 0, 0, 0,124210, 0
- ,300244,300245, 0, 0, 0, 0, 0,212235, 0,179231
- ,184733, 0,212240, 0, 0, 0, 0, 0,47216,47217
- ,47218, 0, 0, 0, 0, 0, 0, 0,124240, 0
- ,294773, 0, 0, 0, 0, 0,52735,19730, 0, 0
- , 0,135255, 0,135257,47242, 0,47244,47245,47246,47247
- ,47248,228782, 0,228784,228785,228786, 0,151774, 0,63760
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,201301, 0, 0, 0,201305
- ,234312, 0, 0,234315, 0, 0,217815, 0, 0,217818
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,146315
- , 0, 0, 0, 8794,223334, 0, 0, 0, 0, 0
- , 0, 0, 8803, 8804, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,256385
- ,250885,25345,217881,250888, 0, 0, 0, 0, 0, 0
- , 0,250896,250897, 0, 0, 0, 0, 0, 0, 0
- ,283911, 0, 0,52872, 0, 0, 0,250912,52877, 0
- , 0,19874, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,250927, 0, 0, 0,19889, 0, 0, 0
- , 8891, 0, 0,239936, 0, 0, 0, 0,146424, 0
- , 0, 0, 0, 0, 0, 0,250951, 0, 0, 0
- ,19913, 0,201448, 0, 0,19918,41923, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,162960, 0, 0, 0, 0, 0, 0,300492, 0
- , 0, 0, 0,184976,184977,212483, 0, 0,41955,41956
- ,41957,250996, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,251008, 0,251010, 0, 0, 0, 0
- ,14472,41978, 0, 0, 0, 0,273025, 0, 0, 0
- , 0,41988, 0, 0,41991, 0, 0,41994, 0,41996
- ,25494, 0,185025, 0, 0, 0, 0, 0,185031, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,212546,212547
- ,212548, 0, 0,212551,97031, 0,212554, 0,212556, 0
- , 0, 0,119043, 0, 0,273074, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,273092, 0,273094,124568, 0, 0, 0
- , 0, 0,201588,201589, 0, 0, 0, 3557, 0,212597
- , 0, 0,42069, 0, 0, 0, 0, 0,179600,91585
- , 0, 0, 0,124595, 0,207112, 0, 0, 0, 0
- ,212618, 0, 0,207120,119105, 0, 0, 0, 3588,42096
- , 0, 0, 0,119114, 3594, 0, 0, 0,234640,218138
- , 0, 0, 0, 0,42111, 0,31111,185140,196143,185142
- , 0, 0,42119,42120,42121,42122, 0,42124, 0, 0
- , 0,42128, 0, 0, 0,273174, 0, 0,289680,174160
- , 0,25635, 0,212671,212672, 0, 0, 0,212676, 0
- , 0,212679,212680,212681,212682, 0,212684,212685,212686,212687
- ,212688, 0,113672,212691, 0, 0,196191,119178, 3658, 0
- ,113680, 0,218201, 0, 0, 0, 0, 0,119189, 3669
- , 0, 0,240215,256719, 0,240218,53185, 0, 0, 0
- , 0,284232, 0, 0, 0, 0, 0,163216,163217,284240
- ,75203, 0, 0, 0, 0,119216, 0, 0, 0, 0
- , 0,119222, 3702, 0, 0, 0, 0,119228, 0, 3709
- ,119231, 0, 0, 0, 0, 0, 3716, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 3728, 0
- ,119251, 3731, 0, 0, 0, 0,42243, 0, 0, 0
- , 0, 0,163271,273292, 0, 0, 0, 0, 0, 0
- ,25754, 0, 0,75266,75267,75268, 0, 0,75271,25763
- ,25764,75274, 0,75276, 0, 0, 0,102785,42275,42276
- ,42277, 0, 0, 0,273323, 0, 0, 0, 0, 0
- ,212818, 0,130305, 0,130307,130308, 0, 0, 0, 0
- , 0, 0,273341, 0, 0, 0,273345, 0,42305,42306
- ,42307,42308, 0, 0, 0, 0,163335, 0,163337,42316
- , 0,179843, 0,163342, 0,163344, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,69840, 0
- , 0,273380, 0,119354, 3834, 0,75349, 0, 0, 0
- ,97357, 0,212880,179875,179876,179877, 0,25851,75361, 0
- , 0, 0, 0, 0, 0,223895,262403, 0,223898, 0
- , 0, 0, 0,75376,75377,75378, 0, 0, 0,75382
- , 0,42378,75385,179905, 0,179907, 0,267925,75391, 0
- ,75393,75394, 0,75396,179916, 0, 0,75400, 0, 0
- ,262437,75404,75405, 0, 0, 0,157924, 0,75411, 0
- ,207437, 0, 0, 0, 0,113925, 0, 0,113928,42416
- ,42417,42418, 0, 0, 0,42422,113936,113937,262465,262466
- , 0, 0,86437, 0, 0,179957, 0,262474, 0,262476
- , 0, 0, 0,42440,42441,42442, 0,42444,42445,42446
- ,42447, 0, 0, 0, 0, 0,179978,113967, 0,174480
- ,86465,86466,86467,86468, 0, 0,86471,179989, 0,86474
- , 0,86476, 0, 0,108483, 0, 0, 0, 0, 0
- ,262517,113991, 0, 0, 0, 0, 0, 0,136002, 0
- ,136004, 0, 0,158011,180016,180017, 0, 0,136012,191023
- , 0, 0, 0, 0, 0, 0,108515,108516,108517,180031
- , 0, 0, 0,180035, 0,136029, 0,180039,180040, 0
- ,180042, 0,180044, 0,180046,180047, 0,196552, 0,180051
- ,196555, 0,136046,86538, 0, 0,108545, 0, 0, 0
- , 0,262578,108551, 0,86549, 0, 0,108556,136062, 0
- , 0,136065, 0,136067, 0, 0,262593,262594,262595,262596
- ,180082, 0,262599,262600,262601, 0,42563, 0, 0, 0
- , 0, 0,86577, 0, 0, 0, 0,86582, 0, 0
- ,185603, 0, 0, 0,15076, 0,86591, 0, 0,246123
- ,92096, 0,158110, 0,86599,86600, 0, 0, 0, 0
- , 0, 0,86607,86608,273643,262642, 0, 0, 0,108618
- , 0,158129, 0,185636,185637, 0,97623, 0, 0, 0
- ,108629, 0, 0, 0,125136,125137,158144, 0,42625, 0
- , 0, 0, 0,158151, 0, 0,158154, 0, 0, 0
- , 0, 0,185665, 0, 0, 0,246180, 0, 0, 0
- ,240683, 0,158170, 0, 0, 0,108665, 0, 0, 0
- , 0,273700,136176,136177,136178, 0, 0, 0,240701, 0
- ,108679,108680, 0, 0,295717,108684,108685, 0, 0, 0
- , 0, 0,108691, 0,48182, 0, 0, 0, 0, 9680
- ,20683,53690, 0, 0,185717, 0,92202, 0, 0,92205
- , 0,42698,295745,295746, 0, 0,136220, 0, 0, 0
- , 0, 0, 0, 0,136228, 0,136230, 0, 0,136233
- ,136234,136235,136236, 0, 0,97732,185749,97734, 0, 0
- ,207757, 0,229763,136247, 0, 4225, 0, 4227, 0, 0
- , 0, 0, 0, 0,125256, 0,15238, 0, 0, 0
- , 0,86756, 0,185776, 0, 0, 0,15249,136272, 0
- ,136274, 0, 0,42760, 0, 0, 0, 0, 0, 0
- , 0, 0,185795,185796,42771,295818,185799,185800, 0,185802
- ,86785, 0, 0, 0,185807,185808, 0, 0, 0,86794
- , 0,86796, 0, 0,229825, 0,229827,229828,295841, 0
- ,229831, 0, 0,229834, 0,229836, 0, 0, 0, 0
- ,196835,196836,196837,295856,295857,295858, 0, 0, 0,295862
- , 0, 0, 0, 0, 0,92331,53825,92333, 0,92335
- , 0, 0, 0, 0, 0,213363,295879,295880,295881,295882
- ,196865, 0, 0, 0,295887,295888,196871,284888, 0,196874
- , 0, 0,240885, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,229898, 0,246403
- ,130883, 0, 0, 0,284915,174896,174897,174898,229909, 0
- , 0, 0, 0, 0, 0, 0,42883, 0, 0,158407
- , 0,86896, 0, 0, 0,103403, 0,86902,257434,48397
- , 0, 0, 0, 0,130917,229936, 0,229938,92414, 0
- , 0,229942, 0,196938,86919, 0, 0, 0, 0, 0
- , 0, 0, 0,86928,196949, 0,86931, 4417,229959, 0
- ,229961, 0, 0, 0, 0, 0,229967, 0, 0,15431
- , 0,130954,246476,130956, 0,15437,158464,37443,42945,42946
- ,42947, 0, 0, 0, 0, 0, 0, 0,158476, 0
- ,158478, 0, 0,158481,158482,158483,196991, 0, 0, 0
- , 0, 0,158490,158491, 0,197000,197001,197002, 0, 0
- , 0, 0,197007,197008,130997, 0,197011, 0, 0, 0
- , 0, 0, 0, 0,142009, 0, 0,186020,125510,125511
- , 0, 0, 0,15495,246538, 0,120017,147523,125520,37505
- ,37506,37507,37508,98020, 0, 0, 0, 0, 0,180541
- ,37516, 0,175043, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,43029, 0, 0,180557,120047, 0,180560,147555
- ,147556,147557,246576, 0, 0, 0, 0, 0,246582, 0
- , 0,92557, 0, 0, 0,175076,175077, 0,131071, 0
- , 0, 0,131075,131076, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,246611, 0,142094
- ,147596,197106, 0, 0, 0, 0,175107, 0,43085, 0
- , 0,43088, 0, 0,43091,175116, 0,230128, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,26603
- , 0, 0,290654, 0, 0,114625, 0,114627, 0, 0
- ,37616, 0,37618, 0,208151, 0,37622, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,175157, 0, 0, 0
- , 0, 0,147658,37639, 0,37641, 0,109156, 0,37645
- ,37646,37647,37648,147669, 0, 0, 0,175178, 0,285200
- , 0, 0,21155,164182,21157, 0,26660, 0,175189,120180
- , 0, 0, 0, 0, 0,197200,109185,109186,109187,109188
- ,147696,147697, 0, 0, 0,109194,147702,109196, 0, 0
- , 0,10182,21185,21186,21187, 0, 0, 0, 0, 0
- ,147716,175222, 0,147719,147720,147721, 0,175228, 0,147725
- , 0, 0, 0,175234,175235, 0, 0, 0, 0, 0
- ,175241, 0,131235, 0, 0,175246, 0, 0,114738,186252
- ,175251,186254,186255, 0, 0, 0,186259,186260, 0,43236
- , 0,186264,186265, 0,103752, 0,186269, 0, 0,109258
- ,186273, 0,131265,131266, 0,131268,186279, 0,131271, 0
- ,109269,131274, 0, 0, 0, 0, 0, 0, 0,43266
- , 0,43268, 0, 0,43271, 0,21269,43274,186301, 0
- , 0, 0,186305, 0,186307,186308, 0,109296, 0,109298
- ,65291, 0, 0, 0, 0, 0,301840, 0,70800, 0
- , 0, 0, 0,21296,21297,21298,147822, 0,147824, 0
- , 0,109320, 0,109322,10305, 0,109325,109326,109327,109328
- , 0, 4811,109331, 0, 0,131338, 0, 0, 0, 0
- ,268868, 0, 0, 0,21327,21328,131349, 0, 0, 0
- , 0,43338, 0,153360, 0,120356,120357, 0, 0, 0
- , 0, 0,43349, 0, 0,180877, 0, 0,180880, 0
- , 0, 0, 0,131376,131377,131378, 0,279907, 0,131382
- , 0, 0, 0, 0,120385, 0,120387,120388,230409,43376
- , 0,43378, 0,120394, 0, 0,131399,131400,131401,131402
- , 0,131404,131405, 0, 0, 0, 0, 0,131411, 0
- , 0, 0,43399,43400,43401,43402, 0, 0, 0,43406
- , 0, 0,26906,26907,43411, 0, 0, 0, 0,279959
- , 0, 0, 0,263460, 0, 0, 0, 0,26922, 0
- ,26924,26925, 0,186456,109443, 0,186459, 0, 0, 0
- , 0, 0, 0,186466,186467, 0, 0, 0,186471, 0
- , 0, 0, 0,186476,186477,186478, 0, 0,120469, 0
- , 0, 0, 0, 0, 0, 0,109475,109476,109477, 0
- ,186493, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,120496,120497, 0,26982, 0
- , 0, 0,26986,26987,26988, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,27000, 0,120519,120520
- , 0,120522, 0,120524,120525,120526,120527,120528, 0, 0
- ,120531, 0, 0,258059, 0, 0, 0, 0,164547,164548
- ,219559, 0,164551, 0, 0,164554, 0,164556, 0, 0
- ,280080, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,27047,27048, 0, 0, 0,43555,43556
- ,43557, 0, 0, 0, 0, 0, 0, 0,131581,109578
- , 0, 0,131585, 0, 0, 0, 0, 0, 0, 0
- ,109589, 0, 0, 0, 0, 0,241619, 0, 0, 0
- ,43587,43588, 0, 0,43591, 0, 0,43594, 0, 0
- , 0,274640, 0, 0, 0, 0, 0,109616,109617,109618
- , 0, 0, 0,109622, 0, 0, 0,214145, 0,214147
- , 0,98628, 0,214151, 0, 0,214154, 0,214156, 0
- ,109639,109640,109641,109642, 0,109644,109645, 0, 0, 0
- ,27134, 0,109651,164662, 0, 0, 0, 0,27142, 0
- , 0,27145, 0, 0, 0, 0, 0, 0, 0, 0
- ,164679, 0, 0,164682,65665,164684,164685,164686,164687, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,208705, 0
- , 0, 0,27176,27177, 0, 0, 0, 0, 0, 0
- ,214218, 0,71194,27187, 0, 0,27190, 0, 0,43696
- , 0, 0,98709, 0, 0,43702, 0, 0, 0,258245
- , 0, 0,258248, 0,43711, 0, 0, 0, 0, 0
- ,258256, 0,43719, 0,43721,43722, 0, 0, 0, 0
- , 0, 0, 0,27227, 0, 0,258272, 0, 0,258275
- , 0, 0, 0,214271,214272, 0,214274, 0, 0, 0
- , 0, 0, 0,214281,214282,115265,214284,214285,214286,214287
- ,214288,27255,27256,214291, 0,27259,27260,170287, 0,197794
- , 0, 0, 0, 0, 0,258311, 0, 0, 0, 0
- , 0, 0, 0, 0,164803, 0,54785, 0, 0, 0
- , 0, 0, 0, 0,214322, 0, 0, 0, 0,192323
- , 0, 0, 0, 0, 0, 0, 0,27301, 0,27303
- ,27304,27305,27306,27307,27308,27309, 0, 0, 0,27313
- ,258356, 0, 0, 0, 0, 0, 0, 0, 0,258365
- ,258366, 0, 0, 0,258370,258371, 0, 0, 0,258375
- ,258376,258377, 0, 0, 0,252880, 0,164866, 0, 0
- , 0, 0,164871, 0, 0, 0, 0,164876, 0, 0
- , 0, 0,192386, 0,192388, 0, 0,192391, 0, 0
- , 0,27365,192396,27367,27368,27369, 0,27371,27372, 0
- ,27374,27375, 0,241916,241917, 0, 0, 0,10879, 0
- , 0, 0,131905,71395,71396,71397, 0, 0, 0,126411
- , 0,43898, 0, 0, 0, 0,247440, 0, 0, 0
- , 0, 0, 0,291455, 0, 0, 0, 0, 0,164938
- ,263957, 0,263959, 0,71426,71427,71428, 0, 0,71431
- ,164949, 0,71434, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,192466, 0, 0,192469,192470, 0,192472, 0
- , 0, 0, 0,126465, 0, 0, 0, 0,164977,164978
- ,27454, 0, 0,164982, 0, 0, 0,27461,27462, 0
- , 0,27465,192496,192497, 0,71477, 0, 0,192502, 0
- ,164999,165000, 0,165002, 0,165004,165005,165006,165007,165008
- , 0, 0,165011, 0, 0,192519, 0,192521,192522, 0
- ,192524,192525, 0, 0,192528, 0, 0, 0,209040,27507
- , 0,121025,93520,27508, 0,71538,27530, 0,71542,33035
- , 0,71549,27541, 0,115561,71553, 0,148568,71554, 0
- ,88065,71562, 0,231105,203600, 0,253185,132163, 0,132195
- ,44179, 0,170703,132196, 0,225747,55216, 0,132231,55217
- , 0,253258,132236, 0,253269,49732, 0,253320,132298, 0
- ,253327,242325,33287, 0,253331,181818,132309, 0,132337,33319
- , 0,132338,93831, 0,121345,93840, 0,203861,148851, 0
- ,291883,132354,11332, 0,132356,11334, 0,132362,33344, 0
- ,231385,132367, 0,71862,33355, 0,33369, 363, 0,198467
- ,22435, 0,198468,22436, 0,121494,33478, 0,242564,220560
- , 0,165554,50033, 0,275585,242579, 0,132560,39043, 0
- ,248085,242584,198576, 0,242585,198577, 0,198578,165572, 0
- ,242588,165574, 0,242589,22549, 0,242611,99585, 0,242613
- ,39076, 0,242622,22582, 0,275633,242627,28088, 0,39105
- ,22602, 0,39107,22604, 0,39108,22605, 0,154630,22606
- , 0,154631,22607, 603, 0,39111,22608, 604, 0,154637
- ,121631,39116, 609, 0,297680,231668, 0,242709,33671, 0
- ,204203,50175, 0,39178,33677, 0,259235,61199, 0,231751
- ,39216, 0,116231,39217, 0,259266,116240, 0,259276,33735
- , 0,242776,39239, 0,171265,39241, 0,242779,39242, 0
- ,242781,39244, 0,242782,39245, 0,242783,39246, 0,242784
- ,39247, 0,242785,215280,39248, 0,242788,39251, 0,242794
- ,83265, 0,259399,248397, 0,132880,39363, 0,264975,39434
- , 0,281494,94460, 0,281574,232065,89039, 0,116552,39538
- , 0,83555,28545, 0,83557,28547, 0,122074,39559, 0
- ,56065,39562, 0,287124,83587, 0,287125,83588, 0,83591
- ,34082, 0,199115,83594, 0,254145,133123, 0,265196,160677
- , 0,188195,133185,17664, 0,188196,133186,72675, 0,188197
- ,133187,72676, 0,133188,122186,72677, 0,160705,133200,39683
- , 0,160711,83697, 0,160716,100205,83702, 0,265239,188225
- , 0,265240,188226,72705,12194, 0,188227,72706, 0,188228
- ,72707,12196, 0,188231,12199, 0,100216,72711, 0,188236
- ,100220,89218, 0,166233,89219,72716, 0,166234,83719, 0
- ,83720,12207, 0,232248,83721, 0,83722,12209, 0,83724
- ,39716, 0,83725,39717, 0,133237,83728, 0,28737,12234
- , 0,133258,122256,12236, 0,122257,12237, 0,39746,12241
- , 0,39747,12242, 0,39748,12243, 0,188277,12245, 0
- ,72757,39751,12246, 0,133269,12247, 0,39754,12249, 0
- ,100266,12250, 0,160778,100267,39756,12251, 0,122272,100268
- , 0,122275,100271, 0,188298,182797, 0,122287,72778, 0
- ,133297,94790, 0,133298,94791, 0,160816,133311, 0,160817
- ,133312, 0,160818,133313,122311, 0,133314,116811, 0,188336
- ,177334,133326, 0,188337,133327,72816, 0,188338,149831,133328
- ,72817, 0,72818,50814, 0,270855,34312, 1306, 0,133331
- ,100325, 1307, 0,160840,100329,39818, 0,171843,160841,100330
- , 0,160842,100331, 0,160844,100333, 0,160845,100334, 0
- ,188351,160846,100335, 0,188352,160847,72831, 0,292872,188353
- ,160848,72832, 0,188354,72833, 0,188355,72834, 0,188356
- ,160851,72835,39829, 1322, 0,72836, 1323, 0,188359, 1325
- , 0,188360,72839, 0,292880,188361,72840, 0,188362,72841
- , 0,188365,72844, 0,188366,72845, 0,188367,72846, 0
- ,188368,122356,72847, 1334, 0,122365, 1343, 0,171875,122366
- , 0,171876,122367, 0,171877,122368, 0,122371,39856, 0
- ,122377,83870,39862, 0,122382,28865, 0,171905,39881, 0
- ,171906,56385,39882, 0,171907, 1376, 0,171908,39884, 0
- ,171911,39887, 0,149908,39888, 0,254436,248935, 0,100425
- ,83922, 0,254467,221461, 0,166465,45443, 0,166468,100456
- , 0,254513,45475, 0,282034,72996, 0,100515,45505, 0
- ,282054,254549,45511, 0,172040,166539,40016, 0,172041,40017
- , 0,172042,166541, 0,172044,73026, 0,172045,73027, 0
- ,276565,243559,172046,73028, 0,172047,100534, 0,172051,89536
- , 0,84038,73036, 0,254604,40065, 0,73077,40071, 1564
- , 0,254611, 1565, 0,282134,95100, 0,161114,73098, 0
- ,254655,45617, 0,117131,45618, 0,100643,73138, 0,73142
- ,34635, 0,73151,45646, 0,73152,45647, 0,73153,45648
- , 0,232683,73154, 0,150174,73160, 0,122673,73164, 0
- ,89671,73168, 0,298722,177700, 0,254800,161283, 0,166800
- ,51279, 0,155843,133839, 0,161345,40323, 0,298901,155875
- ,100865, 0,155876,40355, 0,155877,40356, 0,155906,67890
- ,40385, 0,155907,40386, 0,155908,40387, 0,298941,40394
- , 0,161418,40396, 0,265955,183440,106426, 0,265956,67920
- , 0,276962,210950,161441,40419, 0,238465,210960, 0,188963
- ,161458,155957, 0,188964,40437, 0,265986,161467, 0,265991
- ,161472, 0,265994,161475, 0,161479,155978,51459, 0,161480
- ,40458, 0,172483,161481, 0,161491,40469, 0,299039,172516
- , 0,156017,40496, 0,156018,40497, 0,84516,40508, 0
- ,84517,40509, 0,156032,40511, 0,156033,40512, 0,238549
- ,156034,40513, 0,156035,40514, 0,156036,40515, 0,145035
- ,40516, 0,156040,40519, 0,156041,40520, 0,172545,156042
- ,40521, 0,172546,57025,40522, 0,172547,156044, 0,189051
- ,172548,156045,40524, 0,156046,40525, 0,156047,40526, 0
- ,172551,156048,40527, 0,266069,40528, 0,172554,156051, 0
- ,266072,40531, 0,101048,84545, 0,238576,84548, 0,266102
- ,227595, 0,282630,266127, 0,282631,266128, 0,194625,73603
- , 0,216643,101122, 0,101132,84629, 0,134145,18624, 0
- ,172657,101144, 0,172658,101145,40634, 0,172662,101149, 0
- ,249680,101153, 0,101157,40646, 0,172672,84656, 0,172673
- ,84657, 0,172674,84658, 0,172676,101163, 0,172679,101166
- , 0,189185,183684,172682,161680, 0,172684,101171,73666, 0
- ,172685,73667, 0,172686,101173,73668, 0,172687,84671, 0
- ,194692,172688, 0,101182,84679,57174, 0,216705,84681, 0
- ,216706,101185,84682, 0,216708,101187,84684, 0,101188,84685
- , 0,216711,84687, 0,183723,95707, 0,183737,73717, 0
- ,95722,90221, 0,183741,95725, 0,183745,156240, 0,216757
- ,95735, 0,216778,194774, 0,222298,123280, 0,95781,73777
- , 0,95782,73778, 0,95783, 2266, 0,95784, 2267, 0
- ,95786,73782, 0,117791,95787, 0,95789,73785, 0,216817
- ,101296,73791, 0,216818,101297,73792, 0,101298,73793, 0
- ,95799,73795, 2282, 0,216822,95800,73796, 0,260835,73801
- , 0,260836,73802, 0,216831,73805, 0,260840,216832,73806
- , 0,216833,73807, 2294, 0,216834,73808,24299, 0,216835
- ,183829, 0,216841,68314, 0,216851,68324,40819, 0,260865
- ,101336, 0,288373,260868,101339, 0,183856,101341, 0,260871
- ,183857,101342, 0,183858,101343, 0,260874,101345, 0,260876
- ,101347, 0,101348,95847, 0,244375,101349,95848, 0,101350
- ,95849, 0,244378,189368,101352, 0,145366,101358, 0,101367
- , 2349, 0,255403,172888, 0,183907,101392, 0,172915,18887
- , 0,260961,255460, 2414, 0,194952,95934, 0,183957,95941
- , 0,222465,194960,183958,95942, 0,183959,106945, 0,183960
- ,106946, 0,106947,95945, 0,260976,106948, 0,260982,106954
- , 0,101461,73956, 0,261002,156483, 0,261006,95976, 0
- ,261007,95977, 0,162000,95988, 0,95989,73985, 0,95990
- ,73986,13475, 0,73987,13476, 0,73988,13477, 0,73991
- ,13480, 0,217040, 2501, 0,13505, 2503, 0,239047,13506
- , 0,189540,13508, 0,96031,13516, 0,239070, 2527, 0
- ,156556, 2528, 0,239079, 2536, 0,107056, 2537, 0,74058
- ,30050, 0,239104,107080, 0,211600,118083,107081, 0,239109
- ,107085, 0,239110,107086, 0,239111,107087, 0,239112,156597
- ,123591,107088, 0,239115,107091, 0,239117,90590, 0,239119
- ,13578, 0,239122, 8080, 0,239126,74096, 0,239127,74097
- , 0,239130,13589, 0,261141,118115,35600, 0,178631,13601
- , 0,233648,74119, 0,222648,74121, 0,288661,74122, 0
- ,74127,13616, 0,239158,74128,13617, 0,74131,30123, 0
- ,13625, 2623, 0,118146,13627, 0,200662,118147, 0,156657
- ,13631, 0,156658,118151,13632, 0,118154,13635, 0,261181
- ,156662,13636, 0,156671,13645, 0,156672,13646, 0,156673
- ,13647, 0,156674,123668,13648, 0,244695,156679, 0,255723
- ,173208, 0,68698,52195, 0,250243,189732, 0,228240,189733
- , 0,118257,19239, 0,189781,107266, 0,118273,107271, 0
- ,156782,118275, 0,118276,107274, 0,156785,107276, 0,156786
- ,118279, 0,266808,250305,222800,118281, 0,250306,118282, 0
- ,250308,118284, 0,250311,134790,118287, 0,134791,118288, 0
- ,134800,41283, 0,162317,129311, 0,178842,41317, 0,261366
- ,107338, 0,250389,41351, 0,184382,41356, 0,118384,107382
- , 0,266913,118386, 0,250416,200907, 0,250417,107391, 0
- ,250418,107392, 0,200910,107393, 0,250422,107396, 0,107399
- ,63391, 0,211920,107401, 0,123905,107402, 0,239432,107408
- , 0,233932,41397, 0,250444,63410, 0,250451,123928, 0
- ,294480,151454, 0,90945,63440, 0,123972,41457, 0,41462
- ,30460, 0,41480, 8474, 0,228515,173505,41481, 0,228516
- ,41482, 0,228546,113025, 0,234077,47043, 0,69048,52545
- , 0,278138,228629, 0,228672,74644, 0,228673,74645, 0
- ,113174,96671, 0,223254,47222, 0,278429,250924, 0,185007
- ,96991, 0,212515,157505,130000, 0,212516,41985, 0,212517
- ,41986, 0,251025,41987, 0,212545,108026, 0,97040, 3523
- , 0,234591,20052, 0,201587,42058, 0,201590,119075, 0
- ,212593,119076, 3555, 0,119077, 3556, 0,119106, 3585, 0
- ,119107, 3586, 0,119108, 3587, 0,119111,42097, 0,212629
- ,42098, 3591, 0,119116,42102, 0,218135, 3596, 0,212656
- ,119139,42125, 0,212657,42126, 3619, 0,212658,42127, 0
- ,212662,42131, 0,251180,212673, 0,212674,119157, 0,212675
- , 3637, 0,119217, 3696, 0,212735,119218, 3697, 0,80712
- , 3698, 0,119229, 3708, 0,119232, 3711, 0,119233, 3712
- , 0,119234, 3713, 0,119235, 3714, 0,119236, 3715, 0
- ,201754,163247,119239,91734, 0,119240, 3719, 0,119241, 3720
- , 0,119242, 3721, 0,75235, 3722, 0,119244,75236, 0
- ,119245,75237, 3724, 0,119246, 3725, 0,119247, 3726, 0
- ,119248,75240, 3727, 0,273301,75265,42259, 0,163333,75317
- ,42311, 0,163336,42314, 0,75338,53334, 0,130389,124888
- , 0,179906,75387, 0,267924,179908, 0,179911,75392, 0
- ,179914,75395,42389, 0,157914,75399, 0,262435,86403,75401
- , 0,262436,75402, 0,130416,124915,75406, 0,130417,75407
- , 0,157923,130418,75408, 0,262467,86435, 0,262468,86436
- , 0,262471,42431, 0,113952,42439, 0,53450,42448, 0
- ,113964,42451, 0,180018,136010, 0,180022,136014, 0,262538
- ,136015, 0,180032,136024, 0,180033,136025,108520, 0,262549
- ,180034, 0,180036,136028, 0,180041,136033, 0,180045,136037
- , 0,180048,114036, 0,136051,108546,97544,48035, 0,114048
- ,108547, 0,262576,136053,108548,48037, 0,262577,114050, 0
- ,262582,108554, 0,262591,136068, 0,262592,114065, 0,262602
- ,251600, 0,262604,48065, 0,262605,48066, 0,262606,158087
- ,48067, 0,262607,48068, 0,262608,86576, 0,295616,86578
- ,48071, 0,262611,20567, 0,257114,136092,15070, 0,158114
- ,86601, 0,284638,86602, 0,158116,42595, 0,86604,42596
- , 0,86605,42597, 0,158119,97608,86606, 0,97613,86611
- , 0,185635,130625, 0,70131,42626,15121, 0,42627,15122
- , 0,158149,42628,15123, 0,158150,108641, 0,158152,42631
- ,15126, 0,158153,136149, 0,158155,42634,15129, 0,158156
- ,15130, 0,158157,42636,15131, 0,295683,158158, 0,185666
- ,158161, 0,185667,158162, 0,185668,158163, 0,158165,108656
- , 0,185671,108657, 0,158167,108658,70151, 0,185674,158169
- ,48149, 0,185676,158171,108662, 0,163674,125167, 0,125170
- ,108667,97665, 0,295715,108681, 0,295716,108682, 0,295720
- ,108686, 0,119689,108687,48176, 0,125191,108688,48177, 0
- ,92186,48178, 0,207727,20693, 0,295747,262741,48202, 0
- ,295748,136219, 0,240740,97714, 0,295751,136222,48206, 0
- ,136223,97716,48207, 0,136224,114220,92216,48208, 0,295754
- ,136225, 0,136226,42709, 0,295756,136227, 0,185738,136229
- , 0,136231,119728, 0,136232,86723, 0,207750,136237, 0
- ,207751,136238, 0,136253,42736, 0,235272,119751,42737, 0
- ,125253,42738, 0,235275,125255, 0,125257,42742,15237, 0
- ,125262,86755, 0,125264,86757, 0,185777,42751, 0,185778
- ,31750, 0,185782,136273, 0,42759,31757, 0,229795,174785
- ,42761, 0,229796,42762, 0,229797,174787, 0,174788,163786
- ,42764, 0,185791,42765, 0,185792,42766, 0,185793,141785
- ,42767, 0,185794,42768, 0,196803,185801,141793, 0,185804
- ,86786, 0,185805,86787, 0,185806,86788, 0,295829,86791
- , 0,207815,185811, 0,229826,114305, 0,141822,97814, 0
- ,92334,53827, 0,295884,279381,196866, 0,295885,196867, 0
- ,295886,196868,114353, 0,295891,174869, 0,240884,224381,196876
- ,119862, 0,240886,114363,86858, 0,163883,86869, 0,196917
- ,86897,48390, 0,86898,48391, 0,246435,191425, 0,246436
- ,130915, 0,246437,130916, 0,229937,86911, 0,158430,75915
- , 0,86920,15407, 0,158434,86921, 0,92423,86922, 0
- ,246452,158436,42915, 0,86924,42916, 0,86925,42917, 0
- ,163940,158439,86926, 0,92428,86927, 0,229960,70431, 0
- ,246465,229962,158449, 0,246466,130945, 0,301477,246467,229964
- ,130946, 0,246468,229965,130947, 0,229966,130948, 0,246471
- ,229968, 0,130951,15430, 0,246474,229971,185963, 0,196976
- ,158469,42948, 0,196977,158470,103460, 0,196978,158471, 0
- ,158472,42951, 0,158473, 9946, 0,158474,97963, 0,196982
- ,158475,42954, 0,158477,42956, 0,196992,158485, 0,196993
- ,191492, 0,196994,158487, 0,196995,191494, 0,196996,158489
- , 9962, 0,196999, 9965, 0,197004,37475, 0,268518,197005
- ,37476, 0,197006,37477, 0,131018,125517,120016, 0,246549
- ,37511, 0,246550,131029, 0,246552,37514, 0,76024,54020
- ,43018, 0,246577,131056, 0,246578,131057, 0,131058,92551
- , 0,301593,131062, 0,301594,191574, 0,175075,120065,92560
- , 0,131072,43056, 0,131073,43057, 0,131074,43058, 0
- ,246599,43062, 0,246600,131079, 0,246601,131080, 0,246602
- ,131081, 0,147585,131082, 0,246604,147586, 0,246605,147587
- ,131084, 0,246606,147588,131085, 0,246607,131086, 0,246608
- ,131087,43071, 0,147591,142090,131088, 0,147594,131091, 0
- ,224612,43079,37578, 0,224613,43080, 0,175105,43081, 0
- ,175106,43082, 0,175108,43084, 0,43086,32084, 0,175111
- ,43087,32085, 0,175114,37589, 0,202640,109123, 0,175139
- ,114628, 0,147637,37617, 0,114654,37640, 0,109155,54145
- ,37642, 0,109157,37644, 0,279695,37651, 0,147698,109191
- , 0,279723,10174, 0,131203,10181, 0,175216,147711,21188
- , 0,175217,147712, 0,175218,147713, 0,147714,21191, 0
- ,147715,114709, 0,147722,43203, 0,175229,147724, 0,175231
- ,147726, 0,175232,147727, 0,175233,147728, 0,175236,147731
- , 0,263255,175239, 0,246753,186242,175240, 0,263258,186244
- ,175242, 0,175244,131236, 0,175245,131237, 0,175247,114736
- , 0,186250,175248,114737, 0,186261,43235, 0,279780,186263
- ,43237, 0,274284,186268, 0,186277,131267, 0,186286,131276
- , 0,186291,98275,43265, 0,186293,43267, 0,186302,125791
- ,43276, 0,109297, 4778, 0,109302,70795, 0,186332,147825
- ,21302, 0,147826,109319, 0,213840,120323,109321, 0,142330
- ,109324, 0,268865,241360, 0,268867,21322, 0,175354,21326
- , 0,120355,65345, 0,263403,186389, 0,120386, 4865, 0
- ,120391,43377, 0,120396,43382, 0,186416,131406, 0,186417
- ,131407,43391, 0,186418,131408, 0,43404,26901, 0,268946
- ,164427,43405, 0,43407,32405, 0,268949,164430,43408,26905
- , 0,296480,186460, 0,268976,186461, 0,268977,230470,186462
- , 0,268978,230471,186463, 0,186464,26935, 0,186465,26936
- , 0,186468,26939, 0,230477,186469,26940, 0,186470,120458
- , 0,257985,186472, 0,186473,114960, 0,186474,26945, 0
- ,257988,186475, 0,186487,164483, 0,120498,26981, 0,186512
- ,26983, 0,186513,26984, 0,186514,120502,26985, 0,197520
- ,26989, 0,164515,109505,26990, 0,164516,109506,26991, 0
- ,164517,109507,26992, 0,109508,26993, 0,225032,109511, 0
- ,225035,109514,26999, 0,109516,27001, 0,219539,120521, 0
- ,258061,252560, 0,164545,43523, 0,247061,164546, 0,214083
- ,27049, 0,241620,214115,131600, 0,214116,43585, 0,214117
- ,43586, 0,164618,126111,43596, 0,164629,65611, 0,214146
- ,98625, 0,214148,98627, 0,164656,109646, 0,164657,109647
- , 0,164658,109648, 0,263684,27141, 0,263695,65659, 0
- ,164680,43658, 0,164681,153679, 0,214197,164688, 0,164691
- ,43669, 0,120705,27188, 0,27189, 5185, 0,263737,43697
- , 0,214229,43698, 0,258257,131734, 0,291265,43720,10714
- , 0,208754,43724, 0,214256,43725, 0,214257,98736,43726
- , 0,214258,98737,43727, 0,98738,43728,27225, 0,219761
- ,27226, 0,214262,43731, 0,214273,208772, 0,214275,208774
- , 0,258284,214276,27242, 0,258287,214279,27245, 0,258288
- ,214280, 0,291313,27265, 0,241841,219837,27302, 0,164835
- ,27310, 0,164836,49315,27311, 0,164837,27312, 0,159343
- ,27319, 0,258362,27320, 0,208854,27321, 0,258367,192355
- , 0,258368,192356, 0,258369,192357, 0,230874,120854, 0
- ,258382,164865, 0,258384,164867, 0,258385,164868, 0,170375
- ,164874, 0,192385,71363, 0,192387,170383, 0,263907,192394
- , 0,263916,27373, 0,274960,263958, 0,263960,71425, 0
- ,192458,71436, 0,164976,71459, 0,54968,27463, 0,192498
- ,27468, 0,269520,165001, 0,192520,71498, 0,192526,27496
- , 0,192527,27497, 0,192531,71509, 0) ;
- --| Hash values to check against to verify that
- --| correct action has been found for this
- --| parser state and input token.
- -- NYU Reference Name: ACTION_TABLE2
-
- DefaultMap :
- constant array (DefaultMapRange) of GC.ParserInteger :=
- ( 1402, 0, 0, 0, 0, 1400, 0, 1228, 1217, 1401
- , 0, 1219, 0, 1410, 0, 0, 0, 1221, 1222, 1223
- , 1224, 1225, 1226, 0, 0, 1279, 1279, 1220, 1227, 0
- , 0, 0, 1279, 1099, 0, 1100, 1082, 0, 1081, 1044
- , 1043, 0, 1097, 1098, 0, 1322, 1342, 1083, 1045, 1046
- , 1047, 1086, 1065, 1328, 1068, 1069, 1070, 1071, 1072, 1073
- , 1076, 1077, 1346, 1351, 1349, 0, 1087, 1084, 1085, 0
- , 1325, 1164, 1165, 0, 1244, 0, 0, 1160, 0, 1279
- , 1159, 1174, 1310, 0, 1025, 0, 1368, 1241, 0, 0
- , 1242, 1243, 1406, 1404, 1403, 1292, 1108, 981, 1291, 0
- , 0, 1042, 0, 0, 1083, 1308, 0, 1319, 1317, 1064
- , 0, 1344, 0, 1090, 1088, 1092, 0, 1089, 1093, 1091
- , 1074, 0, 0, 0, 0, 0, 0, 1324, 0, 1067
- , 0, 0, 0, 0, 0, 0, 0, 0, 1096, 1094
- , 1095, 0, 1103, 1104, 1101, 1102, 0, 1105, 1078, 0
- , 1083, 1079, 1347, 0, 0, 0, 0, 0, 1289, 0
- , 1411, 0, 1177, 0, 0, 0, 0, 1377, 0, 1280
- , 1368, 0, 0, 1279, 0, 0, 0, 0, 949, 1027
- , 950, 951, 952, 953, 954, 955, 956, 957, 958, 959
- , 0, 966, 967, 968, 1279, 1028, 1029, 0, 0, 1267
- , 1268, 1269, 1270, 0, 0, 1279, 1037, 1038, 1039, 1040
- , 1041, 0, 1279, 1283, 1368, 1147, 1369, 0, 0, 0
- , 0, 1279, 0, 0, 0, 0, 0, 0, 1080, 0
- , 0, 1021, 0, 1059, 0, 1060, 1319, 1218, 1345, 1323
- , 1008, 1075, 1343, 987, 1057, 1056, 1058, 1055, 1054, 1106
- , 1107, 0, 1050, 1051, 1053, 1052, 1049, 1328, 1326, 0
- , 0, 1342, 1332, 0, 1334, 1336, 1333, 1335, 1337, 0
- , 0, 1348, 1350, 1352, 0, 1162, 1291, 0, 1375, 0
- , 1412, 965, 1169, 0, 1180, 0, 1375, 0, 0, 1378
- , 1379, 0, 0, 1175, 1042, 0, 1047, 0, 0, 0
- , 0, 1191, 0, 1380, 0, 1311, 0, 0, 1190, 0
- , 0, 1312, 1026, 1279, 1368, 0, 0, 0, 1179, 1177
- , 0, 1229, 1405, 0, 1111, 1110, 1293, 1331, 1327, 1321
- , 1314, 1317, 1020, 0, 0, 1315, 1317, 1320, 0, 1063
- , 0, 0, 1048, 1066, 1330, 1329, 1338, 1340, 1339, 1341
- , 0, 1169, 0, 1167, 0, 0, 0, 0, 0, 0
- , 1170, 1287, 0, 0, 0, 0, 1233, 0, 0, 1261
- , 1172, 0, 948, 0, 0, 0, 0, 1368, 0, 1192
- , 1279, 0, 0, 1023, 0, 0, 0, 0, 1287, 1287
- , 979, 0, 0, 0, 0, 1031, 1032, 1033, 1034, 1036
- , 1030, 1035, 1279, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 1283, 1042, 0, 1284
- , 0, 1283, 1113, 1114, 0, 1117, 1118, 1119, 1120, 1121
- , 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131
- , 1132, 1355, 0, 0, 1201, 1202, 1203, 1148, 1285, 1178
- , 1407, 1109, 1319, 1019, 1309, 1316, 1319, 1318, 1009, 988
- , 0, 1259, 1168, 1287, 0, 0, 0, 0, 0, 0
- , 0, 1254, 0, 0, 1001, 1255, 1256, 1000, 0, 0
- , 1304, 1414, 1413, 1248, 1290, 1171, 0, 0, 0, 1257
- , 1161, 0, 1279, 0, 0, 1266, 1415, 1263, 0, 1417
- , 0, 0, 1279, 0, 0, 0, 0, 1176, 0, 979
- , 1279, 1382, 1384, 0, 0, 0, 0, 0, 1279, 0
- , 0, 971, 972, 973, 974, 975, 976, 977, 993, 994
- , 995, 1296, 1296, 1304, 0, 1185, 0, 0, 0, 1287
- , 1287, 0, 1234, 0, 0, 0, 0, 980, 982, 983
- , 984, 1189, 1180, 1196, 1313, 1230, 1195, 1398, 1390, 0
- , 0, 0, 1152, 0, 0, 1137, 1283, 0, 1134, 1239
- , 0, 1156, 0, 0, 1394, 0, 0, 0, 1173, 0
- , 1353, 0, 1115, 1116, 1356, 0, 1283, 0, 0, 1279
- , 1368, 0, 0, 1062, 1061, 1415, 1166, 0, 1376, 1022
- , 0, 1252, 1251, 1253, 1250, 0, 1246, 0, 0, 1288
- , 1245, 1415, 0, 0, 0, 0, 0, 0, 1419, 0
- , 1279, 0, 1272, 1271, 1188, 978, 1384, 0, 0, 1279
- , 999, 997, 0, 986, 1183, 0, 0, 1302, 991, 992
- , 1294, 990, 969, 1297, 996, 998, 0, 1381, 1083, 1300
- , 1007, 0, 0, 0, 0, 0, 960, 962, 0, 0
- , 0, 0, 0, 0, 0, 1285, 1200, 0, 0, 1154
- , 1158, 1357, 1362, 1240, 1157, 0, 0, 0, 1283, 1283
- , 1283, 1206, 1207, 1208, 1209, 1359, 1133, 0, 0, 1283
- , 0, 0, 1144, 1283, 1368, 0, 0, 1286, 1283, 1373
- , 1372, 1149, 0, 1163, 1298, 1083, 1249, 1287, 0, 0
- , 0, 1196, 0, 0, 1418, 947, 1277, 0, 0, 0
- , 1279, 0, 0, 1386, 1368, 1279, 1383, 1181, 1279, 0
- , 0, 0, 0, 1006, 0, 1003, 964, 961, 963, 1187
- , 1186, 985, 1231, 1232, 0, 1215, 0, 0, 1375, 1283
- , 1198, 0, 1153, 0, 1359, 1283, 0, 0, 1397, 1211
- , 0, 1210, 1283, 1283, 0, 1360, 1278, 1135, 1354, 0
- , 0, 0, 0, 1151, 0, 1238, 1408, 1235, 1374, 0
- , 0, 0, 1015, 0, 1305, 0, 1262, 1416, 0, 0
- , 0, 1420, 0, 1368, 0, 0, 1193, 1385, 1013, 1010
- , 0, 0, 1279, 1279, 989, 0, 0, 1024, 1005, 0
- , 1399, 1392, 0, 0, 0, 0, 1283, 1364, 1155, 0
- , 0, 1283, 1212, 0, 1283, 1283, 1361, 0, 1395, 0
- , 0, 1145, 1368, 0, 1150, 1237, 0, 1260, 0, 0
- , 1004, 0, 1258, 1276, 1273, 0, 0, 1194, 0, 1375
- , 1197, 0, 0, 0, 1012, 1295, 0, 0, 0, 1301
- , 0, 1391, 1368, 0, 1308, 0, 1365, 1139, 0, 0
- , 1358, 1205, 0, 0, 0, 1146, 0, 1368, 0, 1236
- , 0, 1299, 0, 1247, 0, 1274, 1388, 0, 1281, 1287
- , 0, 1184, 970, 1375, 0, 1141, 0, 0, 1363, 0
- , 0, 0, 1204, 1142, 0, 1409, 1002, 0, 1275, 0
- , 1387, 0, 0, 1182, 0, 1199, 1140, 1138, 1136, 0
- , 0, 1143, 1375, 0, 1282, 1306, 1014, 1393, 1213, 0
- , 0, 0, 1308, 0, 1214, 1389, 1279, 0, 0, 1307
- , 1018, 1279, 0, 1017, 1016) ;
- --| Map of states (constant array index) to default reductions.
- -- NYU Reference Name: DEFAULT
-
- type FollowSymbolIndexArray is array ( PositiveParserInteger range <>)
- of GC.ParserInteger ;
-
- FollowSymbolMapIndex : constant FollowSymbolIndexArray :=
- ( 1, 1, 2, 2, 3, 3, 4, 43, 44, 57
- , 58, 71, 72, 85, 86, 99, 100, 113, 114, 130
- , 131, 147, 148, 161, 162, 178, 179, 192, 193, 209
- , 210, 223, 224, 224, 225, 226, 227, 228, 229, 230
- , 231, 237, 238, 239, 240, 253, 254, 267, 268, 281
- , 282, 282, 283, 284, 285, 286, 287, 287, 288, 288
- , 289, 289, 290, 290, 291, 291, 292, 292, 293, 293
- , 294, 327, 328, 329, 330, 363, 364, 370, 371, 372
- , 373, 374, 375, 396, 397, 398, 399, 400, 401, 402
- , 403, 405, 406, 407, 408, 410, 411, 411, 412, 413
- , 414, 415, 416, 416, 417, 450, 451, 453, 454, 455
- , 456, 465, 466, 467, 468, 488, 489, 490, 491, 495
- , 496, 498, 499, 500, 501, 502, 503, 504, 505, 506
- , 507, 508, 509, 521, 522, 523, 524, 532, 533, 540
- , 541, 554, 555, 568, 569, 584, 585, 593, 594, 605
- , 606, 614, 615, 626, 627, 638, 639, 650, 651, 684
- , 685, 718, 719, 753, 754, 787, 788, 822, 823, 823
- , 824, 853, 854, 855, 856, 856, 857, 858, 859, 860
- , 861, 861, 862, 863, 864, 865, 866, 867, 868, 877
- , 878, 885, 886, 893, 894, 901, 902, 909, 910, 917
- , 918, 927, 928, 938, 939, 963, 964, 992, 993, 1017
- , 1018, 1047, 1048, 1076, 1077, 1105, 1106, 1112, 1113, 1142
- , 1143, 1172, 1173, 1202, 1203, 1213, 1214, 1222, 1223, 1231
- , 1232, 1240, 1241, 1247, 1248, 1284, 1285, 1312, 1313, 1339
- , 1340, 1365, 1366, 1371, 1372, 1398, 1399, 1425, 1426, 1445
- , 1446, 1472, 1473, 1499, 1500, 1526, 1527, 1553, 1554, 1580
- , 1581, 1607, 1608, 1634, 1635, 1661, 1662, 1688, 1689, 1715
- , 1716, 1742, 1743, 1769, 1770, 1796, 1797, 1823, 1824, 1850
- , 1851, 1877, 1878, 1897, 1898, 1918, 1919, 1921, 1922, 1922
- , 1923, 1926, 1927, 1928, 1929, 1930, 1931, 1951, 1952, 1953
- , 1954, 1956, 1957, 1957, 1958, 1958, 1959, 1961, 1962, 1964
- , 1965, 1965, 1966, 1967, 1968, 1970, 1971, 1972, 1973, 1974
- , 1975, 1977, 1978, 1978, 1979, 1979, 1980, 1980, 1981, 1981
- , 1982, 1994, 1995, 2007, 2008, 2009, 2010, 2010, 2011, 2013
- , 2014, 2015, 2016, 2027, 2028, 2028, 2029, 2032, 2033, 2034
- , 2035, 2061, 2062, 2088, 2089, 2115, 2116, 2118, 2119, 2121
- , 2122, 2124, 2125, 2127, 2128, 2130, 2131, 2133, 2134, 2136
- , 2137, 2138, 2139, 2146, 2147, 2148, 2149, 2156, 2157, 2161
- , 2162, 2169, 2170, 2177, 2178, 2183, 2184, 2185, 2186, 2193
- , 2194, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2221
- , 2222, 2224, 2225, 2230, 2231, 2236, 2237, 2237, 2238, 2238
- , 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2245, 2246, 2247
- , 2248, 2261, 2262, 2275, 2276, 2289, 2290, 2303, 2304, 2307
- , 2308, 2312, 2313, 2317, 2318, 2319, 2320, 2321, 2322, 2342
- , 2343, 2343, 2344, 2345, 2346, 2352) ;
-
- FollowSymbolMap : constant FollowSymbolArray :=
- ( 96, 96, 72, 2, 4, 10, 12, 14, 15, 19
- , 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
- , 33, 37, 39, 42, 43, 44, 45, 46, 51, 53
- , 54, 55, 56, 57, 59, 60, 61, 62, 63, 65
- , 67, 68, 92, 10, 21, 25, 26, 27, 42, 43
- , 44, 45, 55, 56, 59, 60, 65, 10, 21, 25
- , 26, 27, 42, 43, 44, 45, 55, 56, 59, 60
- , 65, 10, 21, 25, 26, 27, 42, 43, 44, 45
- , 55, 56, 59, 60, 65, 10, 21, 25, 26, 27
- , 42, 43, 44, 45, 55, 56, 59, 60, 65, 10
- , 21, 25, 26, 27, 42, 43, 44, 45, 55, 56
- , 59, 60, 65, 10, 21, 25, 26, 27, 42, 43
- , 44, 45, 54, 55, 56, 59, 60, 63, 65, 96
- , 10, 21, 25, 26, 27, 42, 43, 44, 45, 54
- , 55, 56, 59, 60, 63, 65, 96, 10, 21, 25
- , 26, 27, 42, 43, 44, 45, 55, 56, 59, 60
- , 65, 10, 21, 25, 26, 27, 42, 43, 44, 45
- , 54, 55, 56, 59, 60, 63, 65, 96, 10, 21
- , 25, 26, 27, 42, 43, 44, 45, 55, 56, 59
- , 60, 65, 10, 21, 25, 26, 27, 42, 43, 44
- , 45, 54, 55, 56, 59, 60, 63, 65, 96, 10
- , 21, 25, 26, 27, 42, 43, 44, 45, 55, 56
- , 59, 60, 65, 79, 80, 88, 72, 80, 80, 88
- , 31, 33, 58, 72, 75, 80, 85, 75, 79, 10
- , 21, 25, 26, 27, 42, 43, 44, 45, 55, 56
- , 59, 60, 65, 10, 21, 25, 26, 27, 42, 43
- , 44, 45, 55, 56, 59, 60, 65, 10, 21, 25
- , 26, 27, 42, 43, 44, 45, 55, 56, 59, 60
- , 65, 80, 72, 80, 72, 80, 80, 80, 80, 80
- , 80, 80, 80, 7, 16, 17, 30, 31, 33, 34
- , 36, 39, 47, 49, 50, 58, 64, 69, 71, 72
- , 73, 74, 75, 76, 78, 80, 81, 82, 83, 84
- , 85, 86, 87, 88, 89, 90, 91, 80, 88, 7
- , 16, 17, 30, 31, 33, 34, 36, 39, 47, 49
- , 50, 58, 64, 69, 71, 72, 73, 74, 75, 76
- , 78, 80, 81, 82, 83, 84, 85, 86, 87, 88
- , 89, 90, 91, 33, 72, 75, 80, 84, 85, 88
- , 80, 88, 80, 88, 7, 30, 31, 33, 36, 39
- , 47, 58, 64, 72, 75, 80, 81, 82, 83, 84
- , 85, 86, 88, 89, 90, 91, 72, 75, 72, 75
- , 72, 75, 47, 80, 88, 80, 88, 47, 80, 88
- , 80, 72, 75, 72, 75, 38, 7, 9, 30, 31
- , 33, 34, 36, 39, 47, 49, 58, 64, 69, 70
- , 71, 72, 73, 74, 75, 76, 77, 78, 80, 81
- , 82, 83, 84, 85, 86, 87, 88, 89, 90, 91
- , 33, 72, 75, 72, 75, 7, 31, 33, 39, 58
- , 64, 72, 75, 80, 85, 21, 61, 10, 12, 21
- , 22, 25, 26, 27, 42, 43, 44, 45, 54, 55
- , 56, 59, 60, 61, 63, 65, 67, 68, 12, 65
- , 12, 21, 43, 61, 65, 21, 43, 61, 43, 61
- , 21, 61, 21, 61, 84, 85, 84, 85, 10, 21
- , 25, 26, 27, 42, 44, 45, 55, 56, 59, 60
- , 65, 10, 21, 10, 21, 26, 27, 42, 43, 45
- , 56, 60, 10, 21, 26, 27, 42, 45, 56, 60
- , 10, 21, 25, 26, 27, 42, 43, 44, 45, 55
- , 56, 59, 60, 65, 10, 21, 25, 26, 27, 42
- , 43, 44, 45, 55, 56, 59, 60, 65, 10, 21
- , 25, 26, 27, 42, 43, 44, 45, 54, 55, 56
- , 59, 60, 63, 65, 10, 21, 26, 27, 42, 43
- , 45, 56, 60, 10, 21, 26, 27, 42, 43, 45
- , 54, 56, 60, 63, 96, 10, 21, 26, 27, 42
- , 43, 45, 56, 60, 10, 21, 26, 27, 42, 43
- , 45, 54, 56, 60, 63, 96, 10, 21, 26, 27
- , 42, 43, 45, 54, 56, 60, 63, 96, 10, 21
- , 26, 27, 42, 43, 45, 54, 56, 60, 63, 96
- , 7, 9, 30, 31, 33, 34, 36, 39, 47, 49
- , 58, 64, 69, 70, 71, 72, 73, 74, 75, 76
- , 77, 78, 80, 81, 82, 83, 84, 85, 86, 87
- , 88, 89, 90, 91, 7, 9, 30, 31, 33, 34
- , 36, 39, 47, 49, 58, 64, 69, 70, 71, 72
- , 73, 74, 75, 76, 77, 78, 80, 81, 82, 83
- , 84, 85, 86, 87, 88, 89, 90, 91, 7, 9
- , 30, 31, 33, 34, 36, 39, 47, 49, 58, 60
- , 64, 69, 70, 71, 72, 73, 74, 75, 76, 77
- , 78, 80, 81, 82, 83, 84, 85, 86, 87, 88
- , 89, 90, 91, 7, 9, 30, 31, 33, 34, 36
- , 39, 47, 49, 58, 64, 69, 70, 71, 72, 73
- , 74, 75, 76, 77, 78, 80, 81, 82, 83, 84
- , 85, 86, 87, 88, 89, 90, 91, 7, 9, 30
- , 31, 33, 34, 36, 39, 47, 49, 58, 60, 64
- , 69, 70, 71, 72, 73, 74, 75, 76, 77, 78
- , 80, 81, 82, 83, 84, 85, 86, 87, 88, 89
- , 90, 91, 72, 7, 30, 31, 33, 34, 36, 39
- , 47, 49, 58, 64, 69, 72, 73, 74, 75, 76
- , 78, 80, 81, 82, 83, 84, 85, 86, 87, 88
- , 89, 90, 91, 72, 75, 72, 72, 75, 72, 75
- , 72, 72, 75, 72, 75, 72, 75, 7, 31, 33
- , 39, 58, 64, 72, 75, 80, 85, 7, 31, 33
- , 58, 72, 75, 80, 85, 31, 33, 39, 58, 72
- , 75, 80, 85, 31, 33, 58, 64, 72, 75, 80
- , 85, 7, 31, 33, 58, 72, 75, 80, 85, 31
- , 33, 39, 58, 72, 75, 80, 85, 7, 31, 33
- , 39, 58, 64, 72, 75, 80, 85, 3, 35, 36
- , 37, 65, 66, 67, 68, 71, 74, 76, 7, 30
- , 31, 33, 36, 39, 47, 58, 64, 69, 72, 74
- , 75, 76, 80, 81, 82, 83, 84, 85, 86, 88
- , 89, 90, 91, 7, 30, 31, 33, 34, 36, 39
- , 47, 49, 58, 64, 69, 72, 73, 74, 75, 76
- , 78, 80, 81, 82, 83, 84, 85, 86, 88, 89
- , 90, 91, 7, 30, 31, 33, 36, 39, 47, 58
- , 64, 69, 72, 74, 75, 76, 80, 81, 82, 83
- , 84, 85, 86, 88, 89, 90, 91, 7, 30, 31
- , 33, 34, 36, 39, 47, 49, 58, 64, 69, 72
- , 73, 74, 75, 76, 78, 80, 81, 82, 83, 84
- , 85, 86, 87, 88, 89, 90, 91, 7, 30, 31
- , 33, 34, 36, 39, 47, 49, 58, 64, 69, 72
- , 73, 74, 75, 76, 78, 80, 81, 82, 83, 84
- , 85, 86, 88, 89, 90, 91, 7, 30, 31, 33
- , 34, 36, 39, 47, 49, 58, 64, 69, 72, 73
- , 74, 75, 76, 78, 80, 81, 82, 83, 84, 85
- , 86, 88, 89, 90, 91, 35, 37, 65, 66, 67
- , 68, 71, 7, 30, 31, 33, 34, 36, 39, 47
- , 49, 58, 64, 69, 72, 73, 74, 75, 76, 78
- , 80, 81, 82, 83, 84, 85, 86, 87, 88, 89
- , 90, 91, 7, 30, 31, 33, 34, 36, 39, 47
- , 49, 58, 64, 69, 72, 73, 74, 75, 76, 78
- , 80, 81, 82, 83, 84, 85, 86, 87, 88, 89
- , 90, 91, 7, 30, 31, 33, 34, 36, 39, 47
- , 49, 58, 64, 69, 72, 73, 74, 75, 76, 78
- , 80, 81, 82, 83, 84, 85, 86, 87, 88, 89
- , 90, 91, 3, 35, 36, 37, 65, 66, 67, 68
- , 71, 74, 76, 3, 35, 36, 37, 65, 66, 67
- , 68, 71, 3, 35, 36, 37, 65, 66, 67, 68
- , 71, 3, 35, 36, 37, 65, 66, 67, 68, 71
- , 35, 37, 65, 66, 67, 68, 71, 7, 16, 17
- , 30, 31, 33, 34, 36, 39, 47, 49, 50, 58
- , 61, 64, 69, 70, 71, 72, 73, 74, 75, 76
- , 77, 78, 80, 81, 82, 83, 84, 85, 86, 87
- , 88, 89, 90, 91, 2, 4, 10, 12, 14, 15
- , 19, 20, 21, 23, 24, 25, 28, 29, 33, 37
- , 39, 43, 46, 51, 53, 57, 61, 62, 65, 67
- , 68, 92, 2, 4, 10, 12, 14, 15, 19, 20
- , 21, 23, 24, 25, 28, 29, 33, 37, 39, 43
- , 46, 51, 53, 61, 62, 65, 67, 68, 92, 2
- , 4, 10, 12, 14, 15, 19, 20, 21, 23, 24
- , 25, 28, 29, 33, 37, 39, 46, 51, 53, 61
- , 62, 65, 67, 68, 92, 19, 20, 21, 23, 39
- , 61, 2, 4, 10, 12, 14, 15, 19, 20, 21
- , 23, 24, 25, 28, 29, 33, 37, 39, 43, 46
- , 51, 53, 61, 62, 65, 67, 68, 92, 2, 4
- , 10, 12, 14, 15, 19, 20, 21, 23, 24, 25
- , 28, 29, 33, 37, 39, 43, 46, 51, 53, 61
- , 62, 65, 67, 68, 92, 2, 4, 10, 12, 14
- , 15, 24, 25, 28, 29, 33, 37, 46, 51, 53
- , 62, 65, 67, 68, 92, 2, 4, 10, 12, 14
- , 15, 19, 20, 21, 23, 24, 25, 28, 29, 33
- , 37, 39, 43, 46, 51, 53, 61, 62, 65, 67
- , 68, 92, 2, 4, 10, 12, 14, 15, 19, 20
- , 21, 23, 24, 25, 28, 29, 33, 37, 39, 43
- , 46, 51, 53, 61, 62, 65, 67, 68, 92, 2
- , 4, 10, 12, 14, 15, 19, 20, 21, 23, 24
- , 25, 28, 29, 33, 37, 39, 43, 46, 51, 53
- , 61, 62, 65, 67, 68, 92, 2, 4, 10, 12
- , 14, 15, 19, 20, 21, 23, 24, 25, 28, 29
- , 33, 37, 39, 43, 46, 51, 53, 61, 62, 65
- , 67, 68, 92, 2, 4, 10, 12, 14, 15, 19
- , 20, 21, 23, 24, 25, 28, 29, 33, 37, 39
- , 43, 46, 51, 53, 61, 62, 65, 67, 68, 92
- , 2, 4, 10, 12, 14, 15, 19, 20, 21, 23
- , 24, 25, 28, 29, 33, 37, 39, 43, 46, 51
- , 53, 61, 62, 65, 67, 68, 92, 2, 4, 10
- , 12, 14, 15, 19, 20, 21, 23, 24, 25, 28
- , 29, 33, 37, 39, 43, 46, 51, 53, 61, 62
- , 65, 67, 68, 92, 2, 4, 10, 12, 14, 15
- , 19, 20, 21, 23, 24, 25, 28, 29, 33, 37
- , 39, 43, 46, 51, 53, 61, 62, 65, 67, 68
- , 92, 2, 4, 10, 12, 14, 15, 19, 20, 21
- , 23, 24, 25, 28, 29, 33, 37, 39, 43, 46
- , 51, 53, 61, 62, 65, 67, 68, 92, 2, 4
- , 10, 12, 14, 15, 19, 20, 21, 23, 24, 25
- , 28, 29, 33, 37, 39, 43, 46, 51, 53, 61
- , 62, 65, 67, 68, 92, 2, 4, 10, 12, 14
- , 15, 19, 20, 21, 23, 24, 25, 28, 29, 33
- , 37, 39, 43, 46, 51, 53, 61, 62, 65, 67
- , 68, 92, 2, 4, 10, 12, 14, 15, 19, 20
- , 21, 23, 24, 25, 28, 29, 33, 37, 39, 43
- , 46, 51, 53, 61, 62, 65, 67, 68, 92, 2
- , 4, 10, 12, 14, 15, 19, 20, 21, 23, 24
- , 25, 28, 29, 33, 37, 39, 43, 46, 51, 53
- , 61, 62, 65, 67, 68, 92, 2, 4, 10, 12
- , 14, 15, 19, 20, 21, 23, 24, 25, 28, 29
- , 33, 37, 39, 43, 46, 51, 53, 61, 62, 65
- , 67, 68, 92, 2, 4, 10, 12, 14, 15, 19
- , 20, 21, 23, 24, 25, 28, 29, 33, 37, 39
- , 43, 46, 51, 53, 61, 62, 65, 67, 68, 92
- , 2, 4, 10, 12, 14, 15, 19, 20, 21, 23
- , 24, 25, 28, 29, 33, 37, 39, 43, 46, 51
- , 53, 61, 62, 65, 67, 68, 92, 2, 4, 10
- , 12, 14, 15, 24, 25, 28, 29, 33, 37, 46
- , 51, 53, 62, 65, 67, 68, 92, 2, 4, 10
- , 12, 14, 15, 24, 25, 28, 29, 33, 37, 43
- , 46, 51, 53, 62, 65, 67, 68, 92, 19, 20
- , 21, 21, 33, 58, 80, 85, 43, 61, 21, 61
- , 2, 4, 10, 12, 14, 15, 24, 25, 28, 29
- , 33, 37, 43, 46, 51, 53, 62, 65, 67, 68
- , 92, 21, 61, 25, 33, 62, 80, 33, 65, 67
- , 80, 65, 67, 80, 21, 10, 14, 31, 50, 80
- , 72, 80, 72, 80, 31, 51, 71, 65, 65, 80
- , 80, 21, 25, 26, 27, 42, 43, 44, 45, 55
- , 56, 59, 60, 65, 10, 21, 25, 26, 27, 42
- , 43, 45, 55, 56, 59, 60, 65, 75, 80, 80
- , 21, 22, 25, 21, 25, 10, 25, 26, 27, 42
- , 43, 45, 55, 56, 59, 60, 65, 80, 21, 22
- , 25, 43, 18, 80, 2, 4, 10, 12, 14, 15
- , 19, 20, 21, 23, 24, 25, 28, 29, 33, 37
- , 39, 43, 46, 51, 53, 61, 62, 65, 67, 68
- , 92, 2, 4, 10, 12, 14, 15, 19, 20, 21
- , 23, 24, 25, 28, 29, 33, 37, 39, 43, 46
- , 51, 53, 61, 62, 65, 67, 68, 92, 2, 4
- , 10, 12, 14, 15, 19, 20, 21, 23, 24, 25
- , 28, 29, 33, 37, 39, 43, 46, 51, 53, 61
- , 62, 65, 67, 68, 92, 19, 21, 39, 19, 21
- , 39, 19, 21, 39, 19, 21, 39, 19, 21, 39
- , 19, 21, 39, 19, 21, 39, 75, 80, 26, 27
- , 42, 43, 45, 54, 63, 96, 71, 80, 26, 27
- , 42, 43, 45, 54, 63, 96, 26, 27, 42, 45
- , 54, 26, 27, 42, 43, 45, 54, 63, 96, 26
- , 27, 42, 43, 45, 54, 63, 96, 26, 27, 42
- , 45, 54, 63, 75, 80, 26, 27, 42, 43, 45
- , 54, 60, 63, 2, 4, 10, 12, 14, 15, 24
- , 25, 28, 29, 33, 37, 43, 46, 51, 53, 62
- , 65, 67, 68, 92, 21, 61, 84, 85, 84, 85
- , 80, 26, 42, 45, 26, 42, 45, 59, 63, 65
- , 26, 42, 45, 59, 63, 65, 80, 80, 72, 75
- , 72, 75, 72, 75, 85, 72, 75, 10, 21, 25
- , 26, 27, 42, 43, 44, 45, 55, 56, 59, 60
- , 65, 10, 21, 25, 26, 27, 42, 43, 44, 45
- , 55, 56, 59, 60, 65, 10, 21, 25, 26, 27
- , 42, 43, 44, 45, 55, 56, 59, 60, 65, 10
- , 21, 25, 26, 27, 42, 43, 44, 45, 55, 56
- , 59, 60, 65, 21, 65, 67, 68, 21, 43, 65
- , 67, 68, 21, 43, 65, 67, 68, 72, 75, 84
- , 85, 2, 4, 10, 12, 14, 15, 24, 25, 28
- , 29, 33, 37, 43, 46, 51, 53, 62, 65, 67
- , 68, 92, 21, 21, 61, 26, 27, 42, 45, 54
- , 60, 63) ;
- --| Map of states to sets of follow symbols
- -- NYU Reference Name: FOLLOW
-
- ------------------------------------------------------------------
- -- Action_Token_Map
- ------------------------------------------------------------------
-
-
- type Action_Token_Array_Index is array(
- PositiveParserInteger range <>) of GC.ParserInteger ;
- --| For indexing the All Action Token Array.
- --| Maps a given state into the lower and upper bounds of a slice
- --| of the All Action Index Array.
-
- Action_Token_MapIndex : constant Action_Token_Array_Index :=
- ( 1, 1, 2, 2, 3, 2, 3, 9, 10, 11
- , 12, 11, 12, 16, 17, 17, 18, 17, 18, 17
- , 18, 28, 29, 28, 29, 30, 31, 30, 31, 32
- , 33, 33, 34, 34, 35, 34, 35, 34, 35, 34
- , 35, 34, 35, 34, 35, 34, 35, 36, 37, 37
- , 38, 37, 38, 37, 38, 37, 38, 37, 38, 38
- , 39, 41, 42, 42, 43, 42, 43, 42, 43, 43
- , 44, 43, 44, 43, 44, 71, 72, 71, 72, 71
- , 72, 71, 72, 83, 84, 83, 84, 83, 84, 84
- , 85, 84, 85, 93, 94, 97, 98, 97, 98, 97
- , 98, 97, 98, 97, 98, 98, 99, 98, 99, 101
- , 102, 102, 103, 103, 104, 104, 105, 105, 106, 106
- , 107, 109, 110, 113, 114, 113, 114, 114, 115, 114
- , 115, 121, 122, 121, 122, 121, 122, 121, 122, 130
- , 131, 130, 131, 130, 131, 130, 131, 133, 134, 136
- , 137, 137, 138, 138, 139, 139, 140, 140, 141, 141
- , 142, 141, 142, 141, 142, 142, 143, 154, 155, 164
- , 165, 166, 167, 167, 168, 167, 168, 169, 170, 170
- , 171, 170, 171, 170, 171, 170, 171, 171, 172, 172
- , 173, 172, 173, 173, 174, 173, 174, 175, 176, 177
- , 178, 178, 179, 178, 179, 180, 181, 196, 197, 200
- , 201, 200, 201, 201, 202, 202, 203, 202, 203, 202
- , 203, 203, 204, 203, 204, 204, 205, 204, 205, 204
- , 205, 204, 205, 215, 216, 215, 216, 215, 216, 215
- , 216, 215, 216, 226, 227, 237, 238, 248, 249, 253
- , 254, 264, 265, 268, 269, 268, 269, 279, 280, 280
- , 281, 292, 293, 304, 305, 315, 316, 326, 327, 337
- , 338, 348, 349, 349, 350, 350, 351, 350, 351, 350
- , 351, 350, 351, 359, 360, 359, 360, 359, 360, 359
- , 360, 359, 360, 368, 369, 368, 369, 368, 369, 375
- , 376, 378, 379, 378, 379, 378, 379, 379, 380, 380
- , 381, 381, 382, 382, 383, 384, 385, 384, 385, 385
- , 386, 385, 386, 386, 387, 387, 388, 388, 389, 390
- , 391, 391, 392, 392, 393, 394, 395, 395, 396, 395
- , 396, 396, 397, 399, 400, 400, 401, 400, 401, 401
- , 402, 403, 404, 404, 405, 405, 406, 405, 406, 405
- , 406, 405, 406, 405, 406, 405, 406, 405, 406, 405
- , 406, 405, 406, 405, 406, 405, 406, 405, 406, 405
- , 406, 406, 407, 406, 407, 406, 407, 406, 407, 406
- , 407, 406, 407, 406, 407, 409, 410, 410, 411, 410
- , 411, 410, 411, 410, 411, 410, 411, 412, 413, 415
- , 416, 415, 416, 415, 416, 415, 416, 415, 416, 415
- , 416, 415, 416, 418, 419, 418, 419, 418, 419, 419
- , 420, 419, 420, 419, 420, 420, 421, 422, 423, 423
- , 424, 425, 426, 425, 426, 436, 437, 437, 438, 438
- , 439, 439, 440, 450, 451, 461, 462, 461, 462, 472
- , 473, 483, 484, 483, 484, 485, 486, 485, 486, 497
- , 498, 497, 498, 498, 499, 498, 499, 498, 499, 498
- , 499, 499, 500, 499, 500, 499, 500, 500, 501, 500
- , 501, 500, 501, 500, 501, 500, 501, 500, 501, 500
- , 501, 500, 501, 501, 502, 501, 502, 501, 502, 501
- , 502, 501, 502, 501, 502, 501, 502, 501, 502, 502
- , 503, 513, 514, 521, 522, 521, 522, 532, 533, 532
- , 533, 532, 533, 532, 533, 532, 533, 532, 533, 543
- , 544, 554, 555, 554, 555, 554, 555, 554, 555, 555
- , 556, 555, 556, 556, 557, 557, 558, 557, 558, 559
- , 560, 560, 561, 561, 562, 562, 563, 563, 564, 563
- , 564, 564, 565, 564, 565, 568, 569, 571, 572, 571
- , 572, 571, 572, 572, 573, 574, 575, 574, 575, 575
- , 576, 578, 579, 579, 580, 581, 582, 592, 593, 593
- , 594, 594, 595, 595, 596, 598, 599, 599, 600, 603
- , 604, 604, 605, 605, 606, 608, 609, 608, 609, 609
- , 610, 610, 611, 611, 612, 617, 618, 619, 620, 620
- , 621, 641, 642, 643, 644, 644, 645, 644, 645, 644
- , 645, 645, 646, 645, 646, 646, 647, 647, 648, 647
- , 648, 647, 648, 647, 648, 647, 648, 647, 648, 647
- , 648, 647, 648, 647, 648, 647, 648, 658, 659, 669
- , 670, 669, 670, 669, 670, 669, 670, 681, 682, 681
- , 682, 692, 693, 703, 704, 703, 704, 704, 705, 704
- , 705, 704, 705, 704, 705, 704, 705, 704, 705, 704
- , 705, 707, 708, 709, 710, 710, 711, 710, 711, 712
- , 713, 720, 721, 721, 722, 725, 726, 726, 727, 727
- , 728, 728, 729, 729, 730, 732, 733, 734, 735, 735
- , 736, 736, 737, 736, 737, 737, 738, 748, 749, 748
- , 749, 748, 749, 759, 760, 759, 760, 762, 763, 766
- , 767, 777, 778, 778, 779, 779, 780, 780, 781, 781
- , 782, 781, 782, 791, 792, 792, 793, 792, 793, 794
- , 795, 795, 796, 798, 799, 800, 801, 801, 802, 802
- , 803, 807, 808, 811, 812, 812, 813, 813, 814, 815
- , 816, 815, 816, 815, 816, 815, 816, 815, 816, 815
- , 816, 815, 816, 815, 816, 815, 816, 817, 818, 818
- , 819, 819, 820, 822, 823, 823, 824, 834, 835, 845
- , 846, 848, 849, 849, 850, 860, 861, 861, 862, 863
- , 864, 875, 876, 875, 876, 876, 877, 877, 878, 877
- , 878, 882, 883, 882, 883, 882, 883, 882, 883, 902
- , 903, 902, 903, 902, 903, 902, 903, 902, 903, 902
- , 903, 902, 903, 902, 903, 902, 903, 902, 903, 902
- , 903, 902, 903, 902, 903, 902, 903, 902, 903, 902
- , 903, 902, 903, 902, 903, 905, 906, 907, 908, 907
- , 908, 907, 908, 907, 908, 907, 908, 907, 908, 907
- , 908, 907, 908, 907, 908, 908, 909, 909, 910, 909
- , 910, 909, 910, 910, 911, 910, 911, 910, 911, 910
- , 911, 921, 922, 921, 922, 921, 922, 922, 923, 923
- , 924, 924, 925, 925, 926, 926, 927, 927, 928, 928
- , 929, 929, 930, 929, 930, 930, 931, 931, 932, 931
- , 932, 931, 932, 931, 932, 931, 932, 932, 933, 933
- , 934, 933, 934, 933, 934, 936, 937, 936, 937, 936
- , 937, 936, 937, 947, 948, 948, 949, 959, 960, 959
- , 960, 959, 960, 960, 961, 960, 961, 985, 986, 1010
- , 1011, 1010, 1011, 1010, 1011, 1010, 1011, 1011, 1012, 1011
- , 1012, 1012, 1013, 1023, 1024, 1024, 1025, 1036, 1037, 1037
- , 1038, 1038, 1039, 1040, 1041, 1040, 1041, 1041, 1042, 1045
- , 1046, 1045, 1046, 1046, 1047, 1047, 1048, 1058, 1059, 1069
- , 1070, 1070, 1071, 1071, 1072, 1072, 1073, 1073, 1074, 1075
- , 1076, 1076, 1077, 1076, 1077, 1076, 1077, 1076, 1077, 1076
- , 1077, 1076, 1077, 1076, 1077, 1076, 1077, 1076, 1077, 1076
- , 1077, 1076, 1077, 1077, 1078, 1078, 1079, 1078, 1079, 1079
- , 1080, 1079, 1080, 1090, 1091, 1091, 1092, 1102, 1103, 1103
- , 1104, 1104, 1105, 1105, 1106, 1105, 1106, 1106, 1107, 1107
- , 1108, 1110, 1111, 1121, 1122, 1121, 1122, 1121, 1122, 1121
- , 1122, 1121, 1122, 1121, 1122, 1122, 1123, 1123, 1124, 1124
- , 1125, 1124, 1125, 1124, 1125, 1127, 1128, 1128, 1129, 1129
- , 1130, 1130, 1131, 1141, 1142, 1141, 1142, 1144, 1145, 1146
- , 1147, 1146, 1147, 1146, 1147, 1147, 1148, 1147, 1148, 1147
- , 1148, 1149, 1150, 1149, 1150, 1150, 1151, 1158, 1159, 1158
- , 1159, 1163, 1164, 1164, 1165, 1169, 1170, 1169, 1170, 1180
- , 1181, 1181, 1182, 1207, 1208, 1207, 1208, 1207, 1208, 1207
- , 1208, 1208, 1209, 1208, 1209, 1219, 1220, 1220, 1221, 1220
- , 1221, 1221, 1222, 1223, 1224, 1224, 1225, 1224, 1225, 1224
- , 1225, 1224, 1225, 1224, 1225, 1225, 1226, 1225, 1226, 1225
- , 1226, 1236, 1237, 1236, 1237, 1236, 1237, 1236, 1237, 1236
- , 1237, 1237, 1238, 1237, 1238, 1238, 1239, 1240, 1241, 1240
- , 1241, 1240, 1241, 1240, 1241, 1241, 1242, 1243, 1244, 1254
- , 1255, 1255, 1256, 1256, 1257, 1257, 1258, 1258, 1259, 1262
- , 1263, 1262, 1263, 1263, 1264, 1263, 1264, 1263, 1264, 1263
- , 1264, 1263, 1264, 1264, 1265, 1265, 1266, 1267, 1268, 1267
- , 1268, 1267, 1268, 1267, 1268, 1268, 1269, 1268, 1269, 1268
- , 1269, 1269, 1270, 1270, 1271, 1271, 1272, 1271, 1272, 1271
- , 1272, 1271, 1272, 1271, 1272, 1271, 1272, 1271, 1272, 1271
- , 1272, 1271, 1272, 1273, 1274, 1274, 1275, 1278, 1279, 1278
- , 1279, 1278, 1279, 1279, 1280, 1280, 1281, 1281, 1282, 1282
- , 1283, 1284, 1285, 1284, 1285, 1284, 1285, 1288, 1289, 1289
- , 1290, 1290, 1291, 1291, 1292, 1293, 1294, 1304, 1305, 1306
- , 1307, 1306, 1307, 1306, 1307, 1307, 1308, 1318, 1319, 1318
- , 1319, 1318, 1319, 1318, 1319, 1318, 1319, 1318, 1319, 1318
- , 1319, 1319, 1320, 1330, 1331, 1334, 1335, 1334, 1335, 1334
- , 1335, 1334, 1335, 1334, 1335, 1334, 1335, 1334, 1335, 1334
- , 1335, 1336, 1337, 1336, 1337, 1337, 1338, 1338, 1339, 1338
- , 1339, 1339, 1340, 1340, 1341, 1340, 1341, 1340, 1341, 1341
- , 1342, 1342, 1343, 1344, 1345, 1344, 1345, 1344, 1345, 1344
- , 1345, 1345, 1346, 1345, 1346, 1347, 1348, 1347, 1348, 1347
- , 1348, 1351, 1352, 1351, 1352, 1352, 1353, 1353, 1354, 1354
- , 1355, 1356, 1357, 1356, 1357, 1357, 1358, 1368, 1369, 1368
- , 1369, 1368, 1369, 1368, 1369, 1379, 1380, 1380, 1381, 1384
- , 1385, 1384, 1385, 1388, 1389, 1390, 1391, 1391, 1392, 1392
- , 1393, 1392, 1393, 1393, 1394, 1393, 1394, 1393, 1394, 1394
- , 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1400, 1401, 1402
- , 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1402
- , 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1405
- , 1406, 1405, 1406, 1432, 1433, 1433, 1434, 1433, 1434, 1433
- , 1434, 1433, 1434, 1435, 1436, 1435, 1436, 1436, 1437, 1438
- , 1439, 1438, 1439, 1439, 1440, 1463, 1464, 1463, 1464, 1463
- , 1464, 1465, 1466, 1465, 1466, 1465, 1466, 1465, 1466, 1466
- , 1467, 1466, 1467, 1466, 1467, 1466, 1467, 1467, 1468, 1479
- , 1480, 1480, 1481, 1481, 1482, 1482, 1483, 1482, 1483, 1483
- , 1484, 1484, 1485, 1484, 1485, 1484, 1485, 1484, 1485, 1485
- , 1486, 1487, 1488, 1499, 1500, 1499, 1500, 1507, 1508, 1507
- , 1508, 1508, 1509, 1508, 1509, 1508, 1509, 1509, 1510, 1510
- , 1511, 1521, 1522, 1522, 1523, 1523, 1524, 1524, 1525, 1535
- , 1536, 1536, 1537, 1536, 1537, 1537, 1538, 1538, 1539, 1538
- , 1539, 1539, 1540, 1540, 1541, 1540, 1541, 1540, 1541, 1540
- , 1541, 1542, 1543, 1552, 1553, 1552, 1553, 1552, 1553, 1563
- , 1564, 1566, 1567, 1567, 1568, 1569, 1570, 1570, 1571, 1582
- , 1583, 1584, 1585, 1584, 1585, 1584, 1585, 1584, 1585, 1595
- , 1596, 1596, 1597, 1596, 1597, 1597, 1598, 1600, 1601, 1600
- , 1601, 1600, 1601, 1600, 1601, 1605, 1606, 1605, 1606, 1606
- , 1607, 1617, 1618, 1617, 1618, 1618, 1619, 1619, 1620, 1619
- , 1620, 1619, 1620, 1621, 1622, 1621, 1622, 1622, 1623, 1625
- , 1626, 1625, 1626, 1626, 1627, 1626, 1627, 1626, 1627, 1626
- , 1627, 1627, 1628, 1628, 1629, 1628, 1629, 1629, 1630, 1629
- , 1630, 1629, 1630, 1630, 1631, 1631, 1632, 1636, 1637, 1637
- , 1638, 1637, 1638, 1638, 1639, 1639, 1640, 1640, 1641, 1640
- , 1641, 1641, 1642, 1641, 1642, 1642, 1643, 1643, 1644, 1643
- , 1644, 1644, 1645, 1644, 1645, 1644, 1645, 1645, 1646, 1646
- , 1647, 1646, 1647, 1646, 1647, 1647, 1648, 1649, 1650, 1650
- , 1651, 1650, 1651, 1651, 1652, 1652, 1653, 1653, 1654, 1653
- , 1654, 1654, 1655, 1654, 1655, 1658, 1659, 1658, 1659, 1659
- , 1660, 1659, 1660, 1660, 1661, 1662, 1663, 1662, 1663, 1663
- , 1664, 1664, 1665, 1664, 1665, 1664, 1665, 1664, 1665, 1665
- , 1666, 1665, 1666, 1667, 1668, 1668, 1669, 1668, 1669, 1669
- , 1670, 1670, 1671, 1671, 1672, 1671, 1672, 1671, 1672, 1672
- , 1673, 1672, 1673, 1672, 1673, 1673, 1674, 1673, 1674, 1674
- , 1675, 1674, 1675, 1676, 1677, 1677, 1678, 1677, 1678, 1679
- , 1680, 1679, 1680, 1679, 1680, 1679, 1680, 1679, 1680, 1680
- , 1681, 1681, 1682, 1681, 1682, 1681, 1682, 1693, 1694, 1693
- , 1694, 1693, 1694, 1693, 1694, 1693, 1694, 1693, 1694, 1694
- , 1695, 1696, 1697, 1697, 1698, 1697, 1698, 1699, 1700, 1699
- , 1700, 1699, 1700, 1700, 1701, 1702, 1703, 1703, 1704, 1703
- , 1704, 1703, 1704, 1704, 1705, 1705, 1706, 1705, 1706, 1705
- ) ;
-
- Action_Token_Map : constant Action_Token_Array :=
- ( 43, 65, 26, 27, 42, 43, 45, 54, 63, 71
- , 80, 45, 26, 27, 42, 54, 63, 37, 68, 74
- , 3, 35, 36, 65, 66, 67, 71, 76, 65, 67
- , 11, 65, 65, 71, 31, 80, 80, 80, 26, 42
- , 45, 65, 65, 7, 30, 64, 69, 70, 71, 72
- , 73, 75, 78, 84, 34, 36, 39, 47, 49, 74
- , 76, 77, 81, 82, 83, 85, 86, 87, 89, 90
- , 91, 3, 67, 71, 74, 35, 36, 37, 40, 65
- , 66, 68, 76, 72, 36, 30, 81, 82, 83, 86
- , 89, 90, 91, 71, 77, 47, 70, 75, 7, 39
- , 64, 7, 39, 64, 7, 39, 69, 74, 76, 34
- , 49, 73, 78, 87, 35, 37, 65, 66, 67, 68
- , 71, 3, 37, 65, 66, 67, 68, 71, 35, 36
- , 31, 51, 71, 59, 63, 65, 65, 31, 71, 65
- , 35, 43, 26, 27, 42, 44, 45, 21, 25, 55
- , 56, 59, 60, 65, 27, 55, 56, 59, 60, 25
- , 26, 42, 45, 65, 10, 21, 65, 65, 67, 65
- , 43, 60, 71, 70, 77, 84, 85, 85, 72, 75
- , 30, 36, 72, 81, 82, 83, 84, 85, 86, 90
- , 91, 7, 39, 64, 75, 89, 47, 70, 71, 77
- , 72, 75, 80, 30, 3, 65, 66, 67, 68, 76
- , 35, 36, 37, 71, 74, 35, 37, 66, 74, 3
- , 36, 65, 67, 68, 71, 76, 35, 36, 37, 65
- , 66, 67, 68, 71, 76, 3, 74, 35, 65, 3
- , 36, 37, 66, 67, 68, 71, 74, 76, 47, 16
- , 17, 65, 71, 37, 68, 71, 3, 35, 36, 65
- , 66, 67, 74, 76, 65, 67, 68, 6, 35, 36
- , 65, 66, 67, 68, 74, 3, 37, 71, 76, 75
- , 3, 35, 36, 37, 58, 68, 71, 74, 76, 65
- , 66, 67, 3, 35, 36, 37, 65, 66, 67, 68
- , 76, 19, 71, 74, 3, 65, 35, 36, 37, 66
- , 67, 68, 71, 74, 76, 3, 65, 66, 67, 35
- , 36, 37, 68, 71, 74, 76, 36, 66, 68, 71
- , 74, 3, 35, 37, 65, 67, 76, 35, 36, 37
- , 67, 68, 71, 74, 3, 65, 66, 76, 58, 19
- , 36, 37, 66, 67, 68, 3, 35, 65, 71, 35
- , 36, 37, 65, 66, 67, 68, 71, 3, 35, 37
- , 65, 66, 67, 68, 71, 77, 70, 71, 35, 65
- , 65, 65, 26, 45, 79, 31, 35, 65, 72, 77
- , 65, 10, 65, 67, 65, 65, 65, 67, 68, 65
- , 65, 59, 65, 65, 65, 79, 31, 50, 80, 80
- , 11, 65, 65, 11, 59, 31, 50, 80, 65, 80
- , 51, 71, 31, 80, 75, 35, 36, 37, 66, 67
- , 68, 71, 74, 3, 65, 76, 71, 65, 65, 3
- , 68, 74, 35, 36, 37, 65, 66, 67, 71, 76
- , 3, 35, 37, 65, 71, 74, 36, 66, 67, 68
- , 76, 35, 36, 37, 65, 71, 74, 76, 3, 66
- , 67, 68, 3, 35, 37, 74, 76, 36, 65, 66
- , 67, 68, 71, 84, 85, 3, 66, 67, 68, 71
- , 74, 76, 35, 36, 37, 40, 65, 75, 86, 86
- , 72, 65, 3, 36, 65, 66, 76, 35, 37, 67
- , 68, 71, 74, 36, 81, 83, 89, 90, 91, 30
- , 82, 3, 35, 66, 67, 71, 74, 76, 36, 37
- , 65, 68, 37, 65, 66, 67, 68, 71, 74, 76
- , 3, 35, 36, 36, 65, 74, 76, 3, 35, 37
- , 66, 67, 68, 71, 65, 77, 79, 31, 71, 31
- , 75, 30, 65, 65, 42, 45, 26, 56, 77, 71
- , 80, 80, 71, 80, 60, 77, 70, 71, 60, 31
- , 50, 21, 25, 26, 56, 59, 60, 65, 27, 42
- , 45, 55, 31, 65, 31, 71, 31, 80, 77, 23
- , 8, 13, 65, 43, 35, 68, 65, 67, 65, 65
- , 43, 26, 27, 42, 45, 56, 60, 35, 54, 65
- , 4, 10, 14, 15, 28, 92, 2, 12, 24, 25
- , 29, 33, 37, 43, 46, 51, 53, 62, 65, 67
- , 68, 23, 21, 80, 65, 43, 72, 3, 35, 36
- , 37, 71, 76, 65, 66, 67, 68, 74, 3, 35
- , 36, 37, 65, 67, 68, 66, 71, 74, 76, 3
- , 35, 36, 37, 65, 71, 76, 40, 66, 67, 68
- , 74, 36, 65, 66, 67, 68, 74, 76, 3, 35
- , 37, 71, 3, 35, 36, 37, 65, 66, 67, 68
- , 71, 74, 76, 75, 71, 77, 80, 30, 41, 65
- , 72, 80, 5, 8, 16, 17, 47, 71, 32, 44
- , 65, 65, 67, 68, 94, 80, 65, 41, 88, 77
- , 71, 80, 80, 72, 11, 11, 31, 36, 37, 65
- , 68, 76, 3, 35, 66, 67, 71, 74, 3, 65
- , 74, 35, 36, 37, 66, 67, 68, 71, 76, 9
- , 48, 71, 17, 47, 16, 65, 36, 37, 65, 67
- , 68, 74, 3, 35, 66, 71, 76, 65, 65, 65
- , 31, 5, 8, 44, 48, 16, 17, 32, 35, 47
- , 71, 65, 75, 80, 71, 8, 65, 88, 50, 80
- , 88, 88, 16, 17, 47, 50, 71, 70, 71, 80
- , 77, 31, 31, 11, 65, 80, 31, 80, 80, 65
- , 67, 68, 65, 3, 37, 74, 76, 35, 36, 65
- , 66, 67, 68, 71, 35, 65, 66, 68, 71, 74
- , 3, 36, 37, 67, 76, 61, 65, 80, 65, 37
- , 65, 66, 67, 68, 74, 3, 35, 36, 71, 76
- , 80, 65, 80, 35, 36, 37, 71, 74, 76, 3
- , 65, 66, 67, 68, 80, 79, 65, 77, 88, 70
- , 71, 80, 2, 4, 12, 29, 46, 62, 65, 67
- , 10, 14, 15, 24, 25, 28, 33, 37, 51, 53
- , 68, 92, 25, 33, 62, 14, 10, 75, 86, 75
- , 3, 35, 36, 37, 76, 65, 66, 67, 68, 71
- , 74, 88, 51, 65, 65, 71, 94, 94, 44, 94
- , 94, 80, 79, 70, 71, 77, 65, 71, 74, 76
- , 3, 35, 36, 37, 66, 67, 68, 80, 35, 36
- , 37, 65, 66, 67, 68, 71, 74, 3, 76, 65
- , 30, 49, 64, 71, 74, 90, 7, 34, 36, 39
- , 69, 70, 72, 73, 75, 76, 77, 78, 81, 82
- , 83, 85, 87, 89, 91, 7, 64, 76, 78, 81
- , 82, 83, 90, 91, 30, 34, 36, 39, 49, 69
- , 70, 71, 72, 73, 74, 75, 77, 85, 87, 89
- , 85, 72, 3, 35, 36, 66, 67, 68, 74, 37
- , 65, 71, 76, 9, 35, 36, 37, 40, 66, 67
- , 68, 71, 74, 76, 3, 65, 80, 80, 80, 77
- , 80, 16, 17, 71, 47, 43, 22, 67, 68, 71
- , 74, 76, 3, 35, 36, 37, 65, 66, 3, 66
- , 71, 76, 35, 36, 37, 65, 67, 68, 74, 44
- , 65, 80, 37, 65, 68, 80, 47, 47, 65, 74
- , 76, 3, 35, 36, 37, 65, 66, 67, 68, 71
- , 38, 35, 37, 76, 3, 36, 65, 66, 67, 68
- , 71, 74, 88, 88, 65, 80, 80, 65, 67, 68
- , 3, 36, 37, 67, 76, 35, 65, 66, 68, 71
- , 74, 54, 54, 43, 70, 77, 71, 71, 31, 80
- , 3, 35, 36, 37, 65, 67, 76, 66, 68, 71
- , 74, 61, 77, 80, 77, 80, 58, 80, 77, 80
- , 15, 67, 68, 4, 43, 57, 61, 65, 10, 14
- , 25, 33, 62, 93, 16, 17, 65, 71, 47, 3
- , 36, 37, 65, 35, 66, 67, 68, 71, 74, 76
- , 43, 12, 14, 15, 19, 20, 24, 25, 29, 33
- , 39, 61, 65, 67, 68, 2, 4, 10, 21, 23
- , 28, 37, 46, 51, 53, 62, 92, 65, 3, 74
- , 35, 36, 37, 65, 66, 67, 68, 71, 76, 33
- , 65, 43, 61, 21, 65, 3, 66, 68, 71, 76
- , 35, 36, 37, 65, 67, 74, 72, 65, 72, 80
- , 31, 72, 75, 35, 36, 37, 65, 71, 74, 3
- , 66, 67, 68, 76, 80, 80, 34, 43, 21, 65
- , 67, 68, 75, 22, 65, 21, 25, 80, 80, 21
- , 43, 72, 80, 77, 77, 47, 70, 71, 65, 80
- , 80, 80, 77, 80, 71, 77, 70, 80, 72, 80
- , 80, 75, 80, 3, 66, 67, 68, 71, 74, 76
- , 35, 36, 37, 65, 18, 80, 80, 65, 67, 71
- , 74, 76, 3, 35, 36, 37, 66, 68, 80, 35
- , 36, 37, 67, 74, 76, 3, 65, 66, 68, 71
- , 70, 71, 77, 80, 39, 19, 80, 80, 30, 21
- , 65, 80, 40, 65, 61, 72, 75, 47, 70, 71
- , 77, 88, 31, 65, 72, 75, 80, 3, 37, 65
- , 67, 68, 71, 74, 76, 35, 36, 66, 3, 65
- , 67, 68, 71, 74, 76, 35, 36, 37, 66, 48
- , 9, 70, 71, 77, 21, 67, 68, 65, 21, 25
- , 71, 65, 43, 48, 65, 12, 72, 75, 80, 31
- , 72, 75, 67, 68, 65, 34, 36, 47, 49, 73
- , 74, 76, 78, 81, 83, 89, 91, 7, 30, 39
- , 64, 69, 70, 71, 72, 75, 77, 79, 82, 86
- , 87, 90, 72, 43, 61, 80, 19, 20, 85, 2
- , 10, 12, 14, 15, 21, 33, 37, 39, 43, 46
- , 65, 68, 92, 4, 19, 24, 25, 28, 29, 51
- , 53, 62, 67, 19, 39, 21, 43, 3, 76, 35
- , 36, 37, 52, 65, 66, 67, 68, 71, 74, 33
- , 21, 80, 85, 77, 80, 72, 75, 35, 36, 37
- , 67, 74, 76, 94, 3, 65, 66, 68, 71, 5
- , 8, 16, 17, 32, 47, 71, 44, 80, 80, 80
- , 3, 35, 36, 37, 66, 67, 68, 71, 74, 76
- , 65, 43, 48, 65, 3, 35, 37, 65, 66, 68
- , 71, 74, 76, 36, 67, 80, 43, 43, 65, 79
- , 65, 68, 5, 8, 16, 32, 35, 71, 17, 44
- , 47, 48, 3, 36, 37, 65, 67, 68, 71, 74
- , 35, 66, 76, 70, 71, 77, 71, 72, 80, 21
- , 3, 37, 66, 67, 35, 36, 40, 65, 68, 71
- , 74, 76, 21, 61, 3, 37, 65, 66, 74, 76
- , 35, 36, 67, 68, 71, 21, 43, 4, 15, 57
- , 4, 43, 57, 61, 15, 53, 3, 37, 65, 67
- , 68, 76, 35, 36, 66, 71, 74, 65, 33, 85
- , 84, 38, 68, 65, 67, 80, 47, 80, 72, 31
- , 65, 12, 43, 61, 65, 21, 43, 44, 80, 80
- , 65, 65, 85, 12, 58, 29, 21, 15, 43, 80
- , 80, 65, 65, 65, 47, 77, 70, 71, 80, 71
- , 72, 80, 88, 80, 80, 84, 85, 80, 80, 53
- , 21, 80, 94, 65, 61, 43, 80, 72, 80, 80
- , 53, 37, 65, 66, 3, 35, 36, 40, 67, 68
- , 71, 74, 76, 80, 72, 80, 85, 21, 61, 37
- , 84, 85, 12, 37, 80) ;
- --| Action_Token_Map is an array that
- --| maps from each state (using action index map) to a set of
- --| action tokens. An action token is a terminal symbol
- --| (except EOF_Token) for which in the given state an
- --| explicit (non-default) shift or reduce action
- --| is defined.
- --| Used to cut reduce the
- --| number of primary recovery candidates.
-
- ------------------------------------------------------------------
- -- Shift_State_Map
- ------------------------------------------------------------------
-
- type Shift_State_Index_Array is array(
- PositiveParserInteger range <>) of GC.ParserInteger;
- --| For indexing the All Action Token Array.
- --| Maps a given state into the lower and upper bounds of a slice
- --| of the All Action Index Array.
-
- Shift_State_MapIndex : constant Shift_State_Index_Array :=
- ( 1, 1, 2, 2, 3, 3, 4, 4, 5, 5
- , 6, 6, 7, 9, 10, 11, 12, 14, 15, 15
- , 16, 19, 20, 23, 24, 24, 25, 25, 26, 26
- , 27, 29, 30, 32, 33, 33, 34, 37, 38, 38
- , 39, 57, 58, 58, 59, 60, 61, 61, 62, 63
- , 64, 65, 66, 66, 67, 67, 68, 69, 70, 73
- , 74, 94, 95, 97, 98, 101, 102, 103, 104, 108
- , 109, 110, 111, 113, 114, 115, 116, 120, 121, 124
- , 125, 126, 127, 132, 133, 134, 135, 141, 142, 142
- , 143, 143, 144, 148, 149, 153, 154, 154, 155, 158
- , 159, 161, 162, 162, 163, 166, 167, 170, 171, 171
- , 172, 174, 175, 175, 176, 179, 180, 182, 183, 185
- , 186, 191, 192, 192, 193, 194, 195, 196, 197, 236
- , 237, 237, 238, 242, 243, 245, 246, 246, 247, 250
- , 251, 273, 274, 298, 299, 299, 300, 301, 302, 314
- , 315, 316, 317, 318, 319, 319, 320, 325, 326, 411
- , 412, 412, 413, 413, 414, 414, 415, 417, 418, 428
- , 429, 432, 433, 433, 434, 436, 437, 437, 438, 438
- , 439, 439, 440, 440, 441, 441, 442, 447, 448, 447
- , 448, 447, 448, 447, 448, 448, 449, 453, 454, 457
- , 458, 458, 459, 459, 460, 460, 461, 461, 462, 462
- , 463, 465, 466, 468, 469, 470, 471, 473, 474, 474
- , 475, 477, 478, 478, 479, 483, 484, 491, 492, 499
- , 500, 502, 503, 518, 519, 519, 520, 520, 521, 521
- , 522, 522, 523, 524, 525, 527, 528, 529, 530, 530
- , 531, 531, 532, 532, 533, 534, 535, 535, 536, 537
- , 538, 538, 539, 546, 547, 547, 548, 548, 549, 555
- , 556, 557, 558, 559, 560, 577, 578, 579, 580, 580
- , 581, 581, 582, 582, 583, 584, 585, 585, 586, 586
- , 587, 588, 589, 589, 590, 590, 591, 605, 606, 610
- , 611, 611, 612, 613, 614, 616, 617, 631, 632, 632
- , 633, 633, 634, 634, 635, 635, 636, 637, 638, 638
- , 639, 642, 643, 645, 646, 648, 649, 650, 651, 652
- , 653, 653, 654, 654, 655, 656, 657, 659, 660, 660
- , 661, 662, 663, 663, 664, 665, 666, 667, 668, 668
- , 669, 669, 670, 670, 671, 672, 673, 673, 674, 674
- , 675, 675, 676, 680, 681, 681, 682, 685, 686, 689
- , 690, 692, 693, 694, 695, 695, 696, 698, 699, 700
- , 701, 711, 712, 712, 713, 713, 714, 714, 715, 715
- , 716, 716, 717, 717, 718, 718, 719, 719, 720, 720
- , 721, 723, 724, 726, 727, 727, 728, 729, 730, 730
- , 731, 733, 734, 734, 735, 735, 736, 736, 737, 737
- , 738, 738, 739, 739, 740, 740, 741, 754, 755, 762
- , 763, 764, 765, 765, 766, 776, 777, 778, 779, 780
- , 781, 781, 782, 782, 783, 783, 784, 784, 785, 785
- , 786, 786, 787, 788, 789, 789, 790, 790, 791, 791
- , 792, 793, 794, 794, 795, 795, 796, 796, 797, 797
- , 798, 799, 800, 800, 801, 802, 803, 803, 804, 804
- , 805, 806, 807, 812, 813, 814, 815, 815, 816, 816
- , 817, 818, 819, 819, 820, 831, 832, 832, 833, 834
- , 835, 838, 839, 839, 840, 840, 841, 847, 848, 854
- , 855, 860, 861, 862, 863, 863, 864, 865, 866, 866
- , 867, 868, 869, 869, 870, 870, 871, 871, 872, 872
- , 873, 874, 875, 876, 877, 877, 878, 878, 879, 879
- , 880, 880, 881, 881, 882, 882, 883, 883, 884, 885
- , 886, 886, 887, 888, 889, 889, 890, 891, 892, 892
- , 893, 895, 896, 896, 897, 897, 898, 898, 899, 900
- , 901, 901, 902, 902, 903, 903, 904, 904, 905, 905
- , 906, 906, 907, 907, 908, 909, 910, 911, 912, 912
- , 913, 913, 914, 914, 915, 915, 916, 916, 917, 918
- , 919, 919, 920, 923, 924, 926, 927, 927, 928, 928
- , 929, 930, 931, 931, 932, 932, 933, 933, 934, 934
- , 935, 936, 937, 937, 938, 938, 939, 940, 941, 941
- , 942, 942, 943, 943, 944, 944, 945, 945) ;
-
- Shift_State_Map : constant Shift_State_Array :=
- ( 1, 407, 34, 408, 467, 253, 131, 134, 137, 386
- , 468, 502, 618, 791, 214, 76, 310, 311, 492, 409
- , 801, 898, 943, 387, 590, 410, 245, 469, 514, 246
- , 470, 515, 750, 264, 271, 763, 825, 820, 171, 215
- , 378, 448, 702, 719, 725, 730, 771, 793, 794, 830
- , 834, 863, 866, 870, 901, 921, 939, 628, 388, 449
- , 411, 172, 586, 13, 89, 14, 412, 413, 900, 112
- , 239, 361, 770, 80, 154, 163, 285, 307, 314, 320
- , 356, 358, 379, 381, 382, 493, 511, 553, 554, 666
- , 712, 784, 807, 889, 471, 516, 857, 587, 694, 833
- , 878, 143, 718, 35, 166, 275, 286, 517, 36, 113
- , 37, 414, 636, 652, 881, 132, 135, 138, 764, 826
- , 101, 775, 864, 932, 463, 486, 15, 90, 173, 204
- , 365, 395, 2, 169, 174, 472, 518, 604, 633, 858
- , 891, 16, 415, 124, 247, 473, 782, 908, 503, 519
- , 790, 800, 847, 144, 308, 377, 542, 546, 155, 416
- , 598, 831, 417, 875, 920, 930, 17, 405, 661, 662
- , 175, 176, 205, 366, 676, 261, 270, 673, 899, 157
- , 177, 301, 178, 374, 376, 562, 669, 677, 697, 815
- , 924, 588, 32, 158, 133, 136, 9, 38, 72, 77
- , 78, 93, 96, 102, 159, 162, 217, 220, 248, 254
- , 280, 290, 293, 295, 298, 300, 302, 303, 327, 328
- , 345, 380, 393, 394, 418, 451, 485, 494, 559, 577
- , 613, 639, 691, 724, 747, 852, 39, 40, 73, 255
- , 291, 495, 41, 256, 640, 139, 125, 224, 375, 578
- , 11, 42, 79, 126, 156, 164, 223, 357, 369, 372
- , 383, 461, 474, 489, 504, 520, 537, 547, 601, 664
- , 795, 861, 910, 111, 229, 234, 288, 343, 452, 465
- , 491, 616, 707, 709, 713, 733, 742, 780, 786, 805
- , 809, 812, 839, 862, 887, 911, 928, 936, 145, 43
- , 140, 129, 230, 235, 260, 321, 339, 360, 535, 714
- , 745, 806, 810, 840, 44, 141, 127, 225, 146, 283
- , 305, 352, 576, 608, 853, 12, 81, 82, 88, 238
- , 309, 319, 322, 370, 371, 373, 384, 450, 462, 466
- , 484, 490, 536, 543, 552, 556, 557, 563, 569, 570
- , 572, 579, 607, 611, 623, 624, 625, 626, 635, 643
- , 657, 658, 667, 670, 671, 674, 675, 710, 716, 717
- , 728, 729, 737, 738, 739, 740, 741, 743, 744, 746
- , 751, 753, 756, 767, 768, 774, 787, 808, 819, 835
- , 838, 843, 844, 845, 851, 884, 886, 892, 893, 903
- , 904, 909, 914, 916, 918, 919, 922, 927, 929, 935
- , 945, 114, 115, 116, 226, 334, 879, 227, 228, 335
- , 615, 824, 836, 880, 896, 917, 937, 942, 117, 231
- , 341, 342, 148, 487, 539, 580, 118, 119, 120, 419
- , 687, 482, 602, 603, 605, 606, 841, 3, 45, 252
- , 324, 501, 660, 170, 420, 698, 925, 179, 180, 181
- , 182, 183, 18, 184, 396, 19, 185, 397, 186, 398
- , 20, 187, 399, 188, 21, 189, 400, 190, 160, 191
- , 278, 480, 802, 389, 509, 540, 600, 634, 736, 890
- , 907, 488, 544, 545, 597, 654, 655, 783, 913, 390
- , 475, 541, 46, 103, 329, 330, 331, 336, 456, 496
- , 560, 566, 573, 610, 622, 653, 689, 748, 282, 192
- , 193, 194, 521, 859, 481, 534, 785, 609, 647, 522
- , 523, 524, 476, 525, 526, 477, 527, 528, 97, 276
- , 362, 391, 464, 510, 704, 708, 548, 98, 128, 232
- , 529, 549, 644, 734, 885, 530, 550, 531, 551, 47
- , 104, 240, 241, 243, 244, 262, 333, 454, 459, 460
- , 506, 561, 617, 631, 632, 789, 846, 641, 856, 732
- , 642, 532, 645, 646, 533, 478, 705, 882, 781, 538
- , 48, 105, 151, 296, 392, 421, 483, 558, 649, 659
- , 678, 706, 720, 811, 883, 650, 832, 849, 860, 876
- , 735, 242, 651, 637, 941, 944, 83, 94, 306, 312
- , 323, 512, 555, 619, 638, 727, 792, 798, 799, 854
- , 855, 731, 803, 804, 912, 926, 940, 934, 106, 455
- , 865, 933, 233, 897, 938, 84, 85, 299, 86, 167
- , 206, 401, 313, 195, 196, 726, 197, 222, 402, 403
- , 207, 367, 208, 22, 209, 23, 210, 211, 49, 50
- , 51, 297, 257, 249, 107, 52, 250, 325, 505, 688
- , 108, 236, 340, 594, 595, 109, 332, 337, 458, 237
- , 453, 457, 110, 338, 53, 54, 258, 346, 130, 344
- , 55, 263, 265, 266, 267, 268, 269, 347, 348, 349
- , 350, 56, 57, 58, 59, 60, 121, 122, 61, 62
- , 63, 153, 272, 64, 152, 274, 149, 65, 273, 66
- , 67, 251, 326, 68, 69, 123, 142, 70, 147, 150
- , 99, 165, 277, 289, 304, 351, 363, 507, 564, 565
- , 571, 648, 656, 776, 316, 574, 581, 758, 769, 823
- , 828, 874, 422, 690, 582, 317, 672, 692, 759, 772
- , 778, 814, 827, 868, 871, 873, 423, 583, 424, 584
- , 425, 426, 427, 428, 429, 430, 431, 679, 432, 433
- , 434, 435, 680, 436, 437, 438, 439, 440, 681, 441
- , 442, 585, 567, 755, 765, 821, 568, 668, 693, 754
- , 757, 869, 592, 752, 816, 817, 818, 867, 443, 218
- , 294, 318, 406, 508, 696, 773, 797, 848, 877, 895
- , 905, 589, 216, 591, 87, 168, 315, 695, 593, 444
- , 24, 91, 198, 212, 281, 368, 404, 279, 287, 599
- , 749, 850, 894, 923, 355, 364, 813, 888, 915, 931
- , 74, 219, 353, 284, 354, 292, 25, 92, 26, 27
- , 385, 199, 513, 627, 629, 723, 213, 796, 630, 665
- , 445, 446, 447, 575, 829, 686, 682, 872, 683, 684
- , 902, 685, 760, 761, 762, 663, 4, 5, 6, 10
- , 7, 28, 29, 8, 221, 33, 699, 700, 779, 777
- , 906, 837, 30, 31, 75, 161, 479, 842, 359, 497
- , 596, 612, 788, 614, 703, 711, 498, 499, 500, 715
- , 200, 201, 202, 203, 620, 722, 621, 721, 71, 259
- , 100, 822, 766, 701, 95) ;
- --| Shift_State_ is an array that
- --| maps from non-terminals (using shift index map) to sets
- --| of states in which
- --| a shift to the non-terminal is defined.
- --| Used to determine the number of trials in primary
- --| error recovery.
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package ErrorParseTables
- ------------------------------------------------------------------
-
- function Get_Action_Token_Map ( --| return the array of action tokens
- --| for the state passed in.
- In_Index : in StateRange
- --| the state to return action tokens
- --| for.
- )
- return Action_Token_Record
- is
- --| Returns
- --| This subprogram returns the action token record for the
- --| state passed in.
- Result : Action_Token_Record ;
- LowerBound, UpperBound : GC.ParserInteger ;
- --| Lower and upper bounds of the slice of Action Token Map
- begin
- LowerBound := Action_Token_MapIndex ( In_Index*2 - 1 ) ;
- UpperBound := Action_Token_MapIndex ( In_Index*2 ) ;
-
- Result.set_size := UpperBound - LowerBound + 1;
- Result.set := (others => DefaultValue) ;
- Result.set(Result.set'first .. Result.set_size) :=
- Action_Token_Map(LowerBound..UpperBound) ;
-
- return Result ;
- end Get_Action_Token_Map ;
-
- ------------------------------------------------------------------
-
- function Get_Shift_State_Map ( --| return the array of shift states
- --| for the grammar symbol passed in.
- In_Index : in GrammarSymbolRange
- --| the grammar symbol to return shifts
- --| for.
- )
- --| Raises: This subprogram raises no exceptions.
- return Shift_State_Record
- --| Returns
- --| This subprogram returns the array of shift states for the
- --| grammar symbol passed in.
- is
-
- Result : Shift_State_Record ;
- LowerBound, UpperBound : GC.ParserInteger ;
- --| Lower and upper bounds of the slice of Shift State Map
- begin
- LowerBound := Shift_State_MapIndex ( In_Index*2 - 1 ) ;
- UpperBound := Shift_State_MapIndex ( In_Index*2 ) ;
-
- Result.set_size := UpperBound - LowerBound + 1;
- Result.set := (others => DefaultValue) ;
- Result.set(Result.set'first .. Result.set_size) :=
- Shift_State_Map(LowerBound..UpperBound) ;
-
- return Result ;
- end Get_Shift_State_Map ;
-
- function Get_Grammar_Symbol ( --| return the string representation
- --| of the grammar symbol
- In_Index : in GrammarSymbolRange
- )
- return string
- is
- LowerBound, UpperBound : GC.ParserInteger ;
- --| Lower and upper bounds of the slice of Shift State Map
- begin
- LowerBound := GrammarSymbolTableIndex ( In_Index*2 - 1 ) ;
- UpperBound := GrammarSymbolTableIndex ( In_Index*2 ) ;
-
- return GrammarSymbolTable(
- Integer(LowerBound) .. Integer(UpperBound)) ;
- end Get_Grammar_Symbol ;
-
- ------------------------------------------------------------------
-
- function Get_Follow_Map ( --| return the array of follow symbols
- --| of the grammar symbol passed in
- In_Index : in FollowMapRange
- )
- -- |
- -- |Raises: This subprogram raises no exceptions.
- -- |
-
- return FollowSymbolRecord
- is
- Result : FollowSymbolRecord ;
- LowerBound, UpperBound : GC.ParserInteger ;
- Adjusted_Index : GC.ParserInteger :=
- (In_Index - FollowMapRange'first) + 1;
- begin
- LowerBound := FollowSymbolMapIndex ( Adjusted_Index*2 - 1 ) ;
- UpperBound := FollowSymbolMapIndex ( Adjusted_Index*2 ) ;
-
- Result.follow_symbol_count := UpperBound - LowerBound + 1;
- Result.follow_symbol := (others => DefaultValue) ;
- Result.follow_symbol(
- Result.follow_symbol'first ..
- Result.follow_symbol_count) :=
- FollowSymbolMap(LowerBound..UpperBound) ;
-
- return Result ;
- end Get_Follow_Map ;
-
- ------------------------------------------------------------------
-
- function GetAction ( -- see subprogram declaration
- InStateValue : in StateRange;
- InSymbolValue : in GrammarSymbolRange
- )
- return ActionRange
- is
-
- Unique : GC.ParserInteger;
- --| unique value to hash for Index.
- Index : GC.ParserInteger;
- --| index into Action Tables.
- Action : GC.ParserInteger;
- --| value from Action Tables.
- CollisionCount : Natural := 0 ; --| Number of collisions.
- begin -- GetAction function
- --| Algorithm
- --|-
- --| Definitions of key objects from package ParseTables:
- --|
- --| ActionCount: the number of actions in the action tables.
- --|
- --| ActionTableOne: table of action values for all combinations of
- --| states and input actions.
- --|
- --| ActionTableTwo: hash values to check against to verify that action
- --| value at same index in ActionTableOne is correct one.
- --|
- --| ActionTableSize: last index in ActionTableOne and ActionTableTwo
- --| before the hash collision chains.
- --|
- --| DefaultMap: default action for each state.
- --|+
- --| The action to be returned is computed from parameters InStateValue
- --| and InSymbolValue. First, determine the unique single value:
- --|
- --| Unique := (InStateValue * GrammarSymbolCountPlusOne) +
- --| InSymbolValue;
- --|
- --| Unique is hashed by reducing modulo ActionTableSize and adding 1:
- --|
- --| Index := (Unique mod ActionTableSize) + 1;
- --|
- --| This hash value, Index, is used to index ActionTableOne to
- --| obtain an Action:
- --|
- --| Action := ActionTableOne(Index);
- --|
- --| Action is then used to determine the return value:
- --|
- --| Action = 0:
- --| return DefaultMap(InStateValue);
- --|
- --| Action < ActionCount:
- --| if (Unique = ActionTableTwo(Index)) then
- --| return Action;
- --| else
- --| return DefaultMap(InStateValue);
- --| end if;
- --|
- --| Action >= ActionCount:
- --| --Search the hash collision chain
- --| Index := Action - ActionCount;
- --| while (Action /= 0) loop
- --| Index := Index + 1;
- --| Action := ActionTableTwo(Index);
- --| if (Action = Unique) then
- --| return ActionTableOne(Index);
- --| end if;
- --| end loop;
- --| return DefaultMap(InStateValue);
-
- ------------------------------------------------------------------
-
- --| The actual code used folds this algorithm into a more efficient one:
- ParserDecisionCount := Natural'succ(ParserDecisionCount) ;
-
- Unique := (InStateValue * GrammarSymbolCountPlusOne) +
- InSymbolValue;
- Index := (Unique mod ActionTableSize) + 1;
- Action := ActionTableOne(Index);
-
- if (Action >= ActionCount) then
- Index := Action - ActionCount + 1;
- while ( (ActionTableTwo(Index) /= Unique) and then
- (ActionTableTwo(Index) /= 0) ) loop
- Index := Index + 1;
- CollisionCount := Natural'succ(CollisionCount) ;
- end loop;
- Action := ActionTableOne(Index);
- end if;
-
- -- Collect statistics information.
- TotalCollisions := CollisionCount + TotalCollisions ;
- if CollisionCount > MaxCollisions then
- MaxCollisions := CollisionCount ;
- end if;
-
- if (ActionTableTwo(Index) /= Unique) then
- return DefaultMap(InStateValue);
- else
- return Action;
- end if;
-
- end GetAction; -- function
-
- function Get_LeftHandSide(
- GrammarRule : LeftHandSideRange
- ) return GrammarSymbolRange is
- begin
- return LeftHandSide(GrammarRule) ;
- end Get_LeftHandSide ;
-
- function Get_RightHandSide(
- GrammarRule : RightHandSideRange
- ) return GC.ParserInteger is
- begin
- return RightHandSide(GrammarRule) ;
- end Get_RightHandSide ;
-
- end MCC_ParseTables;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccstates.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with MCC_ParserDeclarations; -- declarations for the Parser
- use MCC_ParserDeclarations;
-
- package MCC_StateStack is --| Elements awaiting parsing
-
- --| Overview
- --|
- --| The StateStack used by the parser.
- --|
- --| This data structure has the following sets of operations:
- --|
- --| 1) A set that add and delete elements.
- --| This set can raise the exceptions Underflow and Overflow.
- --| The set includes:
- --|
- --| Pop
- --| Push
- --| Reduce
- --|
- --| 2) A function that returns the number of elements in the
- --| data structure.
- --| This set raises no exceptions.
- --| The set includes:
- --|
- --| Length
- --|
- --| 3) A procedure that re-initializes the stack to have zero elements.
- --| This set raises no exception.
- --| The set includes:
- --|
- --| Initialize
- --|
- --| 4) A copy operations, to return the top of the stack.
- --| The exception, UnderFlow,
- --| is utilized to indicate the end of a sequential examination.
- --| The set includes:
- --|
- --| CopyTop
- --| InitCopy
- --| CopyNext
-
- --| Notes
- --|
- --| Under some implementations the exception
- --| ParserDeclarations.MemoryOverflow could be raised.
- --|
-
- ------------------------------------------------------------------
- -- Declarations Global to Package StateStack
- ------------------------------------------------------------------
-
- OverFlow : exception;
- --| raised if no more space in stack.
- UnderFlow : exception;
- --| raised if no more elements in stack.
-
- ------------------------------------------------------------------
-
- procedure Push( --| Adds new top element to stack
- Element: in StateStackElement); --| element to add
-
- --|
- --| Raises
- --|
- --| OverFlow - no more space in stack.
-
- --| Effects
- --|
- --| This subprogram adds an element to the top of the stack.
- --|
-
- ------------------------------------------------------------------
-
- function Pop return StateStackElement;--| Removes top element in stack
-
- --| Raises
- --|
- --| UnderFlow - no more elements in stack.
-
- --| Effects
- --|
- --| This subprogram pops the element at the top of the stack.
- --|
-
- ------------------------------------------------------------------
-
- function CopyTop return StateStackElement;
- --| Copy top element in stack
-
- --| Raises
- --|
- --| UnderFlow - no more elements in stack.
- --|
-
- --| Effects
- --|
- --| Returns the top of the stack.
-
- ------------------------------------------------------------------
-
- function CopyNext return StateStackElement;
- --| Copy element after previous one copied
-
- --| Raises
- --|
- --| UnderFlow - no more elements in stack.
-
- --| Effects
- --|
- --| This subprogram is used in conjunction with
- --| CopyTop or Init Copy to sequentially examine the stack.
- --|
-
- ------------------------------------------------------------------
-
- function Length return StateParseStacksIndex;
- --| Returns the number of elements in the stack
-
- --| Effects
- --|
- --| This subprogram returns the number of elements in the stack.
- --|
-
- ----------------------------------------------------------------------
-
- procedure Initialize; --| Re-initializes the state to have no
- --| elements.
-
- --| Effects
- --|
- --| Resets the top of the stack to the first element.
-
- ----------------------------------------------------------------------
-
- procedure InitCopy; --| Initialize sequential examination of
- --| the data structure
-
- --| Effects
- --|
- --| Initializes the copy function,
- --| so that subsequent calls to CopyNext will sequentially examine
- --| the elements in the data structure.
- --|
-
- ------------------------------------------------------------------
-
- function CopyThisOne ( --| returns element given by parm 'which_one'
- which_one: StateParseStacksRange) return StateStackElement;
-
- --| Overview
- --|
- --| Returns the state stack element indicated by the parameter
- --| 'which_one'. This operation is needed by LocalStateStack
- --| because, in essence, the state stack is being copied in two
- --| nested loops and the Next_To_Copy counter can therefore only
- --| be used for one of the series of copies.
-
- ------------------------------------------------------------------
-
- procedure Reduce( --| Pops and discards top n elements on
- --| the stack.
- TopN : StateParseStacksIndex); --| Number of elements to pop.
-
- --| Raises:
- --|
- --| Underflow - no more elements in stack.
-
- --| Effects
- --|
- --| Pops and discards TopN elements on the stack.
- --| If TopN is greater than the number of elements in the stack,
- --| Underflow is raised.
- --| This subprogram is used by the parser to reduce the stack during
- --| a reduce action.
- --| This stack reduction could be done with a for
- --| loop and the Pop subprogram at a considerable cost in execution
- --| time.
- --|
-
- ------------------------------------------------------------------
-
- end MCC_StateStack;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccstates.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with MCC_ParseTables; -- state tables generated
- -- by parser generator
- use MCC_ParseTables;
- with MCC_Grammar_Constants; -- constants generated by parser generator
- use MCC_Grammar_Constants; -- to have visiblity on operations
- -- on type ParserInteger.
-
- package body MCC_StateStack is
-
- --| Overview
- --|
- --| The data structure is implemented as an array.
- --|
-
- --| Notes
- --|
- --| Abbreviations used in this compilation unit:
- --|
- --| Init : used as prefix for Initialize
- --|
-
- ------------------------------------------------------------------
- -- Declarations Global to Package Body StateStack
- ------------------------------------------------------------------
-
- Index : StateParseStacksIndex := 0;
- --| top element in stack.
- Next_To_Copy : StateParseStacksIndex := 0;
- --| next element to copy in stack.
-
- Space : array (StateParseStacksRange) of StateStackElement;
- --| Storage used to hold stack elements
-
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package StateStack
- -- (declared in package specification).
- ------------------------------------------------------------------
-
- procedure Push(Element: in StateStackElement) is
-
- begin
-
- if (Index >= StateParseStacksRange'Last) then
- raise OverFlow;
- end if;
-
- Index := Index + 1;
- Space (Index) := Element;
-
- end Push;
-
- ------------------------------------------------------------------
-
- function Pop return StateStackElement is
-
- begin
-
- if (Index < StateParseStacksRange'First) then
- raise UnderFlow;
- end if;
-
- Index := Index - 1;
- return Space (Index + 1);
-
- end Pop;
-
- ------------------------------------------------------------------
-
- function CopyTop return StateStackElement is
-
- begin
-
- InitCopy;
- return CopyNext;
-
- end CopyTop;
-
- ------------------------------------------------------------------
-
- function CopyNext return StateStackElement is
-
- begin
-
- Next_To_Copy := Next_To_Copy - 1;
-
- if (Next_To_Copy < StateParseStacksRange'First) then
- raise UnderFlow;
- end if;
-
- return Space (Next_To_Copy);
-
- end CopyNext;
-
- ------------------------------------------------------------------
-
- function Length return StateParseStacksIndex is
-
- begin
-
- return Index;
-
- end Length;
-
- ------------------------------------------------------------------
- procedure Initialize --| Re-initializes the state to have no
- --| elements.
- is
- begin
- Index := 0;
- end Initialize;
-
- --| Effects
- --|
- --| Resets the top of the stack to the first element.
-
- ----------------------------------------------------------------------
-
- procedure InitCopy is
-
- begin
-
- Next_To_Copy := Index + 1; -- start examination here
-
- end InitCopy;
-
- ------------------------------------------------------------------
-
- function CopyThisOne ( --| returns the which_oneth element
- which_one: StateParseStacksRange) return StateStackElement is
-
- begin
-
- if which_one > Index then
- raise OverFlow;
- end if;
-
- return (Space (which_one));
-
- end CopyThisOne;
-
- ------------------------------------------------------------------
-
- procedure Reduce (TopN : StateParseStacksIndex) is
-
- begin
-
- if (TopN > Index) then
- raise UnderFlow;
- end if;
-
- Index := Index - TopN;
-
- end Reduce;
-
- ------------------------------------------------------------------
-
- end MCC_StateStack;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccpdecls.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- with unchecked_deallocation;
- ----------------------------------------------------------------------
-
- package body MCC_ParserDeclarations is
-
- subtype Dump_String_Range_Plus_Zero is
- STANDARD.NATURAL range 0 .. 4000;
-
- Dump_String : string (1..Dump_String_Range_Plus_Zero'Last);
-
- Dump_String_Length : Dump_String_Range_Plus_Zero;
- -- must be set to zero before each use.
-
- ------------------------------------------------------------------
- -- Subprograms Local to Package ParserDeclarations
- ------------------------------------------------------------------
-
- procedure Append_To_Dump_String ( --| Add In_String to Dump_String
- In_String : in string --| String to append
- );
-
- --| Effects
-
- --| This subprogram appends In_String to the package Body global
- --| Dump_String.
-
- --| Modifies
- --|
- --| Dump_String
- --| Dump_String_Length
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package ParserDeclarations
- -- (declared in package specification).
- ------------------------------------------------------------------
-
- function Get_Source_Text(
- In_Source_Text : in Source_Text
- ) return string is
-
- begin
-
- if (In_Source_Text = Null_Source_Text) then
- return "" ;
- else
- return In_Source_Text.all ;
- end if;
-
- end Get_Source_Text;
-
- ------------------------------------------------------------------
-
- procedure Put_Source_Text(
- In_String : in string ;
- In_Out_Source_Text : in out Source_Text
- ) is
-
- begin
-
- In_Out_Source_Text := new string'(In_String);
-
- end Put_Source_Text;
-
- ------------------------------------------------------------------
-
- function Dump_Parse_Stack_Element(
- In_PSE : in ParseStackElement
- ) return string is
-
- --| Notes
-
- --| Abbreviations used in this compilation unit
- --|
- --| PSE : ParseStackElement
- --|
-
- begin
-
- Dump_String_Length := 0;
-
- -- Output data common to all ParseStackElements
- Append_To_Dump_String
- ("Element Kind: "
- & PT.Get_Grammar_Symbol(In_PSE.gram_sym_val)
- & " " -- give extra space to help highlight delimiters
- );
-
- -- Output data common to all lexed_tokens
- Append_To_Dump_String
- (" Token - Line: "
- & HD.Source_Line'IMAGE (In_PSE.lexed_token.srcpos_line)
- & " Column: "
- & HD.Source_Column'IMAGE(In_PSE.lexed_token.srcpos_column)
- );
-
- Append_To_Dump_String
- ( " Text: %"
- & Get_Source_Text(In_PSE.lexed_token.text)
- & "%"
- );
-
-
- -- Finally, finish up the message
- Append_To_Dump_String("");
-
- return Dump_String(1..Dump_String_Length);
-
- end Dump_Parse_Stack_Element;
-
- ------------------------------------------------------------------
-
- procedure flush is new unchecked_deallocation (string,
- Source_Text);
-
- procedure flush_source_text (s : in out source_text) is
- begin
- if s /= null then flush (s); end if;
- end flush_source_text;
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Local to Package ParserDeclarations
- ------------------------------------------------------------------
-
- procedure Append_To_Dump_String(
- In_String : in string --| String to append
- ) is
-
- begin
-
- Dump_String((Dump_String_Length + 1) ..
- (Dump_String_Length + In_String'Last)) := In_String;
-
- Dump_String_Length := Dump_String_Length + In_String'Length;
-
- end Append_To_Dump_String;
-
- ------------------------------------------------------------------
-
-
- end MCC_ParserDeclarations;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccparses.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with MCC_ParserDeclarations; -- declarations for the Parser
- use MCC_ParserDeclarations;
-
- package MCC_ParseStack is --| Elements awaiting parsing
-
- --| Overview
- --|
- --| The ParseStack used by the parser.
- --|
- --| This data structure has the following sets of operations:
- --|
- --| 1) A set that add and delete elements. This set can
- --| raise the exceptions: UnderFlow and OverFlow.
- --| The set includes:
- --|
- --| Pop
- --| Push
- --| Reduce
- --|
- --| 2) A function that returns the number of elements in the
- --| data structure. This set raises no exceptions.
- --| The set includes:
- --|
- --| Length
- --|
- --| 3) A procedure that re-initializes the stack to have zero elements.
- --| This set raises no exception.
- --| The set includes:
- --|
- --| Initialize
-
- --|
- --| Notes
- --|
- --| Under some implementations the exception
- --| ParserDeclarations.MemoryOverflow could be raised.
- --|
-
- package PD renames MCC_ParserDeclarations;
-
- ------------------------------------------------------------------
- -- Declarations Global to Package ParseStack
- ------------------------------------------------------------------
-
- OverFlow : exception;
- --| raised if no more space in stack.
- UnderFlow : exception;
- --| raised if no more elements in stack.
-
- ------------------------------------------------------------------
-
- procedure Push( --| Adds new top element to stack
- Element: in PD.ParseStackElement); --| element to add
-
- --| Raises
- --|
- --| OverFlow - no more space in stack.
-
- --| Effects
- --|
- --| This subprogram adds an element to the top of the stack.
- --|
-
- ------------------------------------------------------------------
-
- function Pop --| Removes top element in stack
- return PD.ParseStackElement;
-
- --| Raises
- --|
- --| UnderFlow - no more elements in stack.
-
- --| Effects
- --|
- --| This subprogram obtains the element at the top of the stack.
- --|
-
- ------------------------------------------------------------------
-
- function Length --| Returns the number of
- --| elements in the stack
- return PD.StateParseStacksIndex;
-
- --| Effects
- --|
- --| This subprogram returns the number of elements in the stack.
- --|
-
- ----------------------------------------------------------------------
-
- procedure Initialize; --| Re-initializes the state to have no
- --| elements.
-
- --| Effects
- --|
- --| Resets the top of the stack to the first element.
-
- ----------------------------------------------------------------------
-
- procedure Deallocate_Tokens(--| Deallocates the source texts of tokens
- --| on the stack about to be popped.
- TopN : in PD.StateParseStacksIndex
- --| how many tokens to deallocate
- );
-
- ----------------------------------------------------------------------
-
- procedure Reduce( --| Pops and discards top n elements on
- --| the stack.
- TopN : in PD.StateParseStacksIndex);
- --| Number of elements to pop.
-
- --| Raises
- --|
- --| Underflow - no more elements in stack.
-
- --| Effects
- --|
- --| Pops and discards top N elements on the stack.
- --| If TopN is greater than the number of elements in the stack,
- --| Underflow is raised.
- --| This subprogram is used by the parser to reduce the stack during
- --| a reduce action.
- --| This stack reduction could be done with a for loop and
- --| the Pop subprogram at a considerable cost in execution time.
- --|
-
- ----------------------------------------------------------------------
-
- function Get_Stack_Element(
- position : PD.StateParseStacksIndex
- )
- return PD.ParseStackElement;
-
- ----------------------------------------------------------------------
- end MCC_ParseStack;
-
- --------------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccparses.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with MCC_ParseTables; -- state tables generated by parser
- -- generator
- use MCC_ParseTables;
-
- with MCC_Grammar_Constants;
- use MCC_Grammar_Constants; -- to have visibility on operations
- -- on type ParserInteger declared there.
-
- with MCC_StateStack;
-
- package body MCC_ParseStack is
-
- --| Overview
- --|
- --| The data structure is implemented as an array.
- --|
-
- ------------------------------------------------------------------
- -- Declarations Global to Package Body ParseStack
- ------------------------------------------------------------------
-
- Index : PD.StateParseStacksIndex := 0;
- --| top element in stack.
-
- Space : array (PD.StateParseStacksRange) of PD.ParseStackElement;
- --| Storage used to hold stack elements
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package ParseStack
- -- (declared in package specification).
- ------------------------------------------------------------------
-
- procedure Push(Element : in PD.ParseStackElement) is
-
- begin
-
- if (Index >= PD.StateParseStacksRange'Last) then
- raise OverFlow;
- end if;
-
- Index := Index + 1;
- Space (Index) := Element;
-
- end Push;
-
- ------------------------------------------------------------------
-
- function Pop return PD.ParseStackElement is
-
- begin
-
- if (Index < PD.StateParseStacksRange'First) then
- raise UnderFlow;
- end if;
-
- Index := Index - 1;
- return Space (Index + 1);
-
- end Pop;
-
- ------------------------------------------------------------------
-
- function Length return PD.StateParseStacksIndex is
-
- begin
-
- return Index;
-
- end Length;
-
- ------------------------------------------------------------------
-
- procedure Initialize --| Re-initializes the state to have no
- --| elements.
- is
- element : PD.ParseStackElement;
- begin
- while Index > 0 loop
- element := Space (Index);
- PD.flush_source_text (element.lexed_token.text);
- Index := Index - 1;
- end loop;
- end Initialize;
-
- --| Effects
- --|
- --| Resets the top of the stack to the first element.
-
- ----------------------------------------------------------------------
-
-
- procedure Deallocate_Tokens(--| Deallocates the source texts of tokens
- --| on the stack about to be popped.
- TopN : in PD.StateParseStacksIndex
- --| how many tokens to deallocate
- ) is
-
- element : PD.ParseStackElement;
-
- begin
- if (TopN > Index) then
- raise UnderFlow;
- end if;
-
- for i in 1..TopN loop
- element := Space ((Index - i) + 1);
- PD.flush_source_text (element.lexed_token.text);
- end loop;
- end Deallocate_Tokens;
-
- ----------------------------------------------------------------------
- procedure Reduce(TopN : in PD.StateParseStacksIndex) is
-
- begin
- if (TopN > Index) then
- raise UnderFlow;
- end if;
-
- Index := Index - TopN;
-
- end Reduce; -- procedure
-
- ------------------------------------------------------------------
- function Get_Stack_Element(position : PD.StateParseStacksIndex)
- return PD.ParseStackElement is
-
- begin
-
- return Space(MCC_StateStack.Length - Position);
-
- end Get_Stack_Element;
-
- ------------------------------------------------------------------
- end MCC_ParseStack;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mcclexidv.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with MCC_Grammar_Constants; -- constants from the parser generator
- use MCC_Grammar_Constants;
- --| to gain visibility on ParserInteger's operations
-
- package body MCC_Lex_Identifier_Token_Value is
-
- --| Overview
- --|
- --| This perfect hash algorithm taken from
- --| "A Perfect Hash Function for Ada Reserved Words"
- --| by David Wolverton, published in Ada Letters Jul-Aug 1984
- --|
- use MCC_ParseTables;
- package PT renames MCC_ParseTables;
-
- ------------------------------------------------------------------
- -- Declarations Local to Package Lex_Identifier_Token_Value
- ------------------------------------------------------------------
-
- subtype HashRange is integer ;
- subtype HashIdentifierSubrange is HashRange range 0..70 ;
-
- type XlateArray is array(character) of HashRange ;
- Xlate : constant XlateArray := XlateArray'(
- 'A' => 0, 'B' => 49, 'C' => 0, 'D' => -7, 'E' => -20,
- 'F' => 18, 'G' => -2, 'H' =>-38, 'I' => 33, 'J' => 0,
- 'K' => -9, 'L' => 9, 'M' => 29, 'N' => -9, 'O' => 6,
- 'P' => 26, 'Q' => 0, 'R' => 8, 'S' => 1, 'T' => 1,
- 'U' => -9, 'V' => 0, 'W' => 56, 'X' =>-28, 'Y' => 11,
- 'Z' => 0, others => 0) ;
-
- type HashTableArray is array( HashIdentifierSubrange)
- of MCC_ParseTables.TokenRange ;
- --| Mapping from hash value into the token values.
-
- HashTable : constant HashTableArray := HashTableArray'(
- 40 => 2, -- ABORT
- 6 => 3, -- ABS
- 37 => 4, -- ACCEPT
- 43 => 5, -- ACCESS
- 34 => 6, -- ALL
- 22 => 7, -- AND
- 16 => 8, -- ARRAY
- 3 => 9, -- AT
- 61 => 10, -- BEGIN
- 70 => 11, -- BODY
- 20 => 12, -- CASE
- 35 => 13, -- CONSTANT
- 14 => 14, -- DECLARE
- 9 => 15, -- DELAY
- 36 => 16, -- DELTA
- 38 => 17, -- DIGITS
- 7 => 18, -- DO
- 0 => 19, -- ELSE
- 19 => 20, -- ELSIF
- 2 => 21, -- END
- 30 => 22, -- ENTRY
- 8 => 23, -- EXCEPTION
- 1 => 24, -- EXIT
- 57 => 25, -- FOR
- 45 => 26, -- FUNCTION
- 21 => 27, -- GENERIC
- 46 => 28, -- GOTO
- 69 => 29, -- IF
- 42 => 30, -- IN
- 52 => 31, -- IS
- 17 => 32, -- LIMITED
- 67 => 33, -- LOOP
- 53 => 34, -- MOD
- 58 => 35, -- NEW
- 23 => 36, -- NOT
- 26 => 37, -- NULL
- 54 => 38, -- OF
- 44 => 39, -- OR
- 47 => 40, -- OTHERS
- 50 => 41, -- OUT
- 25 => 42, -- PACKAGE
- 56 => 43, -- PRAGMA
- 51 => 44, -- PRIVATE
- 49 => 45, -- PROCEDURE
- 29 => 46, -- RAISE
- 5 => 47, -- RANGE
- 41 => 48, -- RECORD
- 48 => 49, -- REM
- 24 => 50, -- RENAMES
- 39 => 51, -- RETURN
- 31 => 52, -- REVERSE
- 12 => 53, -- SELECT
- 27 => 54, -- SEPARATE
- 18 => 55, -- SUBTYPE
- 32 => 56, -- TASK
- 28 => 57, -- TERMINATE
- 4 => 58, -- THEN
- 15 => 59, -- TYPE
- 10 => 60, -- USE
- 59 => 61, -- WHEN
- 63 => 62, -- WHILE
- 60 => 63, -- WITH
- 11 => 64, -- XOR
- others => PT.IdentifierTokenValue
- ) ;
-
- --| These are used to convert lower to upper case.
- convert : array(character) of character ;
- difference : constant := character'pos('a') - character'pos('A');
-
- ------------------------------------------------------------------
- -- Subprogram Specifications Local to
- -- Package Lex_Identifier_Token_Value
- ------------------------------------------------------------------
-
- function NormalizeToUpperCase ( --| normalize SYMREP to upper case
- In_String: in String) return String;
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package Lex_Identifier_Token_Value
- ------------------------------------------------------------------
-
- procedure Find(
- In_Identifier : in string;
- Out_Token_Value : out MCC_ParseTables.TokenRange) is
-
- subtype id_string is string(In_Identifier'Range);
-
- In_Identifier_Normalized : id_string;
-
- Length : HashRange := In_Identifier_Normalized'length ;
- --| Length of string
-
- First : HashRange := In_Identifier_Normalized'first ;
- --| Lower bound
-
- FirstChar, LastChar : character ;
- --| First and last characters
-
- SecondToLastChar : character ;
- --| Second to last character
-
- SecondToLast : HashRange;
- --| Alphabetic position of 2nd to last char.
-
- HashValue : HashRange ;
- --| Perfect hash value.
-
- TokenValue : MCC_ParseTables.GrammarSymbolRange ;
-
- begin
- In_Identifier_Normalized := NormalizeToUpperCase(In_Identifier);
-
- -- Assume In_Identifier is a plain identifier.
- Out_Token_Value := PT.IdentifierTokenValue;
-
- if (Length <= 1) or else (Length >= 10) then
- -- Couldn't be a reserved word.
- return;
- else
- FirstChar := In_Identifier_Normalized(First) ;
- LastChar := In_Identifier_Normalized( (First+Length) -1 ) ;
- SecondToLastChar := In_Identifier_Normalized(
- (First+Length) -2 ) ;
- SecondToLast := character'pos(SecondToLastChar)
- - character'pos('A') ;
- HashValue := XLate(FirstChar) + XLate(LastChar) +
- 2*SecondToLast + Length ;
- end if;
-
- if HashValue in HashIdentifierSubrange then
- -- index and see if it matches a reserved word value.
- -- if so, then compare the string to the reserved word text.
- TokenValue := MCC_ParseTables.GrammarSymbolRange(
- HashTable(HashValue)) ; -- conversion
- if TokenValue /= PT.IdentifierTokenValue then
- if (In_Identifier_Normalized =
- PT.Get_Grammar_Symbol(TokenValue) ) then
- Out_Token_Value := PT.TokenRange(TokenValue) ;
- -- conversion
- end if;
- end if;
- end if;
- end Find;
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Local to
- -- Package Lex_Identifier_Token_Value
- ------------------------------------------------------------------
-
- function NormalizeToUpperCase( --| normalize SYMREP to upper case
- In_String: in String) return String is
-
- OutString : string (In_String'range);
-
- begin
- for i in In_String'range loop
- OutString(i) := convert(In_String(i));
- end loop;
- return OutString;
- end NormalizeToUpperCase;
-
- ------------------------------------------------------------------
-
- begin
-
- --| Initialize the conversion array for lower to upper case conversion
- for i in character loop
- case i is
- when 'a' .. 'z' =>
- convert(i) := character'val(character'pos(i)
- - difference);
- when others =>
- convert(i) := i;
- end case;
- end loop;
-
- ------------------------------------------------------------------
-
- end MCC_Lex_Identifier_Token_Value;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccgrmcon.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --+ GRMCONST.BDY +--
-
- Package body MCC_Grammar_Constants is
-
- function setGrammarSymbolCount return ParserInteger is
- begin
- return 319 ;
- end setGrammarSymbolCount;
-
- function setActionCount return ParserInteger is
- begin
- return 1422 ;
- end setActionCount;
-
- function setStateCountPlusOne return ParserInteger is
- begin
- return 946 ;
- end setStateCountPlusOne;
-
- function setLeftHandSideCount return ParserInteger is
- begin
- return 474 ;
- end setLeftHandSideCount;
-
- function setRightHandSideCount return ParserInteger is
- begin
- return 474 ;
- end setRightHandSideCount;
-
- end MCC_Grammar_Constants;
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccdefs.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with Lists;
- with mcc_ParserDeclarations;
-
- package McCabe_Definitions is
-
- subtype Max_Value is INTEGER range 1 .. 99; -- max complexity
-
- type Node_Record;
-
- type Node_Type is access Node_Record;
-
- type Edges_Out_Type is (Left, Right);
-
- type Edge_Array is array( Edges_Out_Type ) of Node_Type;
-
- package Node_List is new Lists(Node_Type);
-
-
- type Node_Record is
- record
-
- Node_Number : NATURAL;
- Edges_In : Node_List.List;
- Edges_Out : Edge_Array;
- End_Node : Node_Type := NULL; --| set to node degnating
- --| END statement for a conditional (if,elsif,when)
- end record;
-
- type McCabe_Stack_Element is
- record
- First : Node_Type := NULL;
- Last : Node_Type := NULL;
- end record;
-
-
- ------------------------------------------------------------------------------
- -- global variables used by the McCabe Complexity Tool
- ------------------------------------------------------------------------------
-
- Null_Element : McCabe_Stack_Element := (NULL,NULL);
-
- First_Node : Node_Type := Null;
- Last_Node : Node_Type := Null;
-
- Max_Complexity : Max_Value;
-
-
- type Subprogram_ItemType is
- record
- Unit_Name : mcc_ParserDeclarations.Source_Text;
- Node_Count : NATURAL;
- Edge_Count : NATURAL;
- end record;
- Subprogram_Info : Subprogram_ItemType;
- --| Holds current subprogram information. Used by grammar
- --| and ReduceActions.apply_red.
-
- S_Identifier : mcc_ParserDeclarations.Source_Text;
- --| Identifier for current subunit
- S_Ident_Flag : BOOLEAN := FALSE;
- --| flag to mark identifier (see getnext.sub)
-
- end McCabe_Definitions;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --getnext.sub
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with mcc_ParserDeclarations;
- with McCabe_Definitions; use McCabe_Definitions;
-
- separate (mcc_Lex)
- function GetNextNonCommentToken return PD.ParseStackElement is
-
-
- begin
- loop
- CST := GetNextSourceToken;
-
- if (CST.gram_sym_val = PT.PackageTokenValue) OR
- (CST.gram_sym_val = PT.ProcedureTokenValue) OR
- (CST.gram_sym_val = PT.FunctionTokenValue) OR
- (CST.gram_sym_val = PT.TaskTokenValue) then
-
- S_Ident_Flag := True;
-
- elsif (CST.gram_sym_val = PT.IdentifierTokenValue) OR
- (CST.gram_sym_val = PT.StringTokenValue) then
-
- if S_Ident_Flag then
- S_Identifier := CST.lexed_token.text;
- S_Ident_Flag := False;
- end if;
-
- end if;
-
-
- exit when (CST.gram_sym_val = PT.EOF_TokenValue) or
- (CST.gram_sym_val /= PT.Comment_TokenValue);
-
- -- this is a comment. put here the code which deals with
- -- comments for your tool
-
-
- end loop;
-
-
- -- Debug Aid
- -- TEXT_IO.Put_Line(PD.Dump_Parse_Stack_Element(CST));
- --
-
- return CST; -- return the token that is not a comment
- end GetNextNonCommentToken;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccparser.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with MCC_ParserDeclarations; -- declarations for the Parser
- use MCC_ParserDeclarations;
-
- package MCC_Parser is
-
- --| Notes
- --|
- --| WARNING:
- --|
- --| Some of the code for this package is in the grammar source that is
- --| input to the parse table generator. One of the ouputs of the
- --| parse table generator is the source for the body of the procedure
- --| Apply_Actions used in this package. This procedure provides case
- --| statements to select the number of the rule to be used.
- --| This procedure is declared as separate subunits in the
- --| body of this package. It is strongly recommended that
- --| the code of these functions be kept integrated with the grammar
- --| for the following reasons.
- --|
- --| 1) to keep the case select numbers consistent with the reduce
- --| action numbers in the parse tables.
- --|
- --| 2) to associate each grammar rule with the code for its actions.
- --|
-
- package PD renames MCC_ParserDeclarations;
-
- ------------------------------------------------------------------
-
- procedure Apply_Actions(
- Rule_Number : in PT.LeftHandSideRange);
-
- ------------------------------------------------------------------
-
- function Parse --| NYU LALR style parser
- return PD.ParseStackElement;
-
- --| Raises
- --|
- --| ParserDeclarations.MemoryOverflow
- --|
-
- --| Effects
- --|
- --| This parser takes input from a Lexer and parses it according
- --| to a set of grammar rules that have been converted into a set of
- --| ParseTables by the NYU LALR Parser Generator.
-
- --| Requires
- --|
- --| The parser expects the Lexer and other units it uses to be
- --| initialized.
- --|
- --| The units that stay the same for different grammars are:
- --|
- --| Parser.Parse (this subprogram)
- --| ParseStack
- --|
- --| The units that need to be changed for different grammars are:
- --|
- --| Parser.Apply_Actions
- --| Lex
- --| ParserDeclarations
- --| ParseTables
- --|
-
- --| Modifies
- --|
- --| The following are modified:
- --|
- --| ParseStack
- --|
-
- ------------------------------------------------------------------
-
- end MCC_Parser;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccstk.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- -- $Source: /nosc/work/parser/RCS/ParseStk.spc,v $
- -- $Revision: 4.0 $ -- $Date: 85/02/19 11:33:03 $ -- $Author: carol $
-
- ----------------------------------------------------------------------
-
- with mcc_ParserDeclarations; -- declarations for the Parser
- use mcc_ParserDeclarations;
- with McCabe_Definitions;
- use McCabe_Definitions;
-
- package McCabe_Stack is --| Elements awaiting parsing
-
- --| Overview
- --|
- --| The Stack used by the McCabe Complexities Tool.
- --|
- --| This data structure has the following sets of operations:
- --|
- --| 1) A set that add and delete elements. This set can
- --| raise the exceptions: UnderFlow and OverFlow.
- --| The set includes:
- --|
- --| Pop
- --| Push
- --| Reduce
- --|
- --| 2) A function that returns the number of elements in the
- --| data structure. This set raises no exceptions.
- --| The set includes:
- --|
- --| Length
- --|
- --| 3) A procedure that re-initializes the stack to have zero elements.
- --| This set raises no exception.
- --| The set includes:
- --|
- --| Initialize
-
- --|
- --| Notes
- --|
- --| Under some implementations the exception
- --| ParserDeclarations.MemoryOverflow could be raised.
- --|
-
- package PD renames mcc_ParserDeclarations;
- package MD renames McCabe_Definitions;
-
- ------------------------------------------------------------------
- -- Declarations Global to Package McCabe_Stack
- ------------------------------------------------------------------
-
- OverFlow : exception;
- --| raised if no more space in stack.
- UnderFlow : exception;
- --| raised if no more elements in stack.
-
- ------------------------------------------------------------------
-
- procedure Push( --| Adds new top element to stack
- Element: in MD.McCabe_Stack_Element); --| element to add
-
- --| Raises
- --|
- --| OverFlow - no more space in stack.
-
- --| Effects
- --|
- --| This subprogram adds an element to the top of the stack.
- --|
-
- ------------------------------------------------------------------
-
- procedure Pop; --| Removes top element in stack
-
- --| Raises
- --|
- --| UnderFlow - no more elements in stack.
-
- --| Effects
- --|
- --| This subprogram obtains the element at the top of the stack.
- --|
-
- ------------------------------------------------------------------
-
- function Length --| Returns the number of
- --| elements in the stack
- return PD.StateParseStacksIndex;
-
- --| Effects
- --|
- --| This subprogram returns the number of elements in the stack.
- --|
-
- ----------------------------------------------------------------------
-
- procedure Initialize; --| Re-initializes the state to have no
- --| elements.
-
- --| Effects
- --|
- --| Resets the top of the stack to the first element.
-
- ----------------------------------------------------------------------
-
- procedure Reduce( --| Pops and discards top n elements on
- --| the stack.
- TopN : in PD.StateParseStacksIndex);
- --| Number of elements to pop.
-
- --| Raises
- --|
- --| Underflow - no more elements in stack.
-
- --| Effects
- --|
- --| Pops and discards top N elements on the stack.
- --| If TopN is greater than the number of elements in the stack,
- --| Underflow is raised.
- --| This subprogram is used by the parser to reduce the stack during
- --| a reduce action.
- --| This stack reduction could be done with a for loop and
- --| the Pop subprogram at a considerable cost in execution time.
- --|
-
- ----------------------------------------------------------------------
-
- function Get_Stack_Element(
- position : PD.StateParseStacksIndex
- )
- return MD.McCabe_Stack_Element;
-
- ----------------------------------------------------------------------
-
- procedure Put_Element_Value(First_Node : MD.Node_Type;
- Last_Node : MD.Node_Type;
- position : PD.StateParseStacksIndex
- );
-
- ----------------------------------------------------------------------
-
- end McCabe_Stack;
-
- --------------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --parse.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- -- $Source: /nosc/work/parser/RCS/Parse.bdy,v $
- -- $Revision: 4.0 $ -- $Date: 85/02/19 12:00:03 $ -- $Author: carol $
-
- ----------------------------------------------------------------------
-
- with mcc_Lex; -- the lexical analyzer
- with mcc_ParseStack; -- elements awaiting parsing
- with mcc_StateStack; -- stack of parse states
- with mcc_ParseTables; -- state tables generated by parser generator
- use mcc_ParseTables;
-
- with mcc_Grammar_Constants; -- constants generated by parser generator
- use mcc_Grammar_Constants;
-
- with McCabe_Definitions; use McCabe_Definitions;
- with McCabe_Stack; use McCabe_Stack;
-
-
- package body mcc_Parser is
-
-
- package MD renames McCabe_Definitions;
-
-
- ------------------------------------------------------------------
- -- Reduce Action Work Variables
- ------------------------------------------------------------------
-
- Reduce_Action_Number : PT.LeftHandSideRange;
- --| reduction to perform
-
- Reduce_Action_LH_Value : GrammarSymbolRange;
- --| grammar symbol number of left hand side of reduction
-
- Reduce_Action_RH_Size : PD.StateParseStacksIndex;
- --| number of elements in right hand side of reduction
-
- New_Stack_Element : PD.ParseStackElement;
- --| New element created when a grammar reduction takes place
-
- New_McCabe_Element : MD.McCabe_Stack_Element;
- --| New McCabe element created when a grammar reduction takes place
-
- ------------------------------------------------------------------
-
- procedure Apply_Actions(
- Rule_Number : in PT.LeftHandSideRange) is separate;
-
- ------------------------------------------------------------------
-
- function Parse return PD.ParseStackElement is
-
- --| Overview
- --|
- --| The appropriate reference is:
- --|
- --| Using the NYU LALR Parser Generator. Philippe Charles and
- --| Gerald Fisher. Courant Institute, New York University, 251 Mercer
- --| Street, New York, N.Y. 10012. Unpublished paper. 1981.
- --|
-
- --|
- --| Notes
- --|
- --| Abbreviations Used:
- --|
- --| Cur : Current - used as prefix
- --| LH : LeftHand
- --| RH : RightHand
- --|
-
- ------------------------------------------------------------------
- -- Objects
- ------------------------------------------------------------------
-
- Current_Action : ActionRange;
- --| return from PT.GetAction.
-
- Start_State : constant := 1;
- --| Start state for parser.
-
- Last_Element_Popped : PD.ParseStackElement;
- --| Last element popped from parse stack
-
- ------------------------------------------------------------------
-
- begin
-
- --|
- --| Algorithm
- --|
- --| Function PT.GetAction returns an action value,
- --| which indicate one of four possible actions:
- --|
- --| Error: action value = 0.
- --| Shift: 0 < action value < StateCountPlusOne.
- --| Accept: action value = StateCountPlusOne.
- --| Reduce: action value > StateCountPlusOne.
- --|
- --| The action is processed (as described below).
- --| This is repeated until no more tokens are obtained.
- --|
- --| The basic action processing is:
- --|
- --| SHIFT ACTION: the next token is placed on the ParseStack.
- --|
- --| REDUCE ACTION: the handle (a grammar rule's right hand side)
- --| found on the ParseStack is replaced with a
- --| non-terminal (grammar rule's left hand side) to which
- --| it has been reduced, and a new state.
- --|
- --| ACCEPT ACTION: the ParseStack contains the root
- --| of the parse tree, and processing is finished for
- --| If another compilation unit is present, parsing continues.
- --|
- --| ERROR ACTION: the exception Parser_Error is raised.
-
- ------------------------------------------------------------------
-
- -- Initialize Lexical Analyzer
- mcc_Lex.Initialization;
-
- PD.CurToken := mcc_Lex.GetNextNonCommentToken;
-
- mcc_StateStack.Initialize;
- mcc_ParseStack.Initialize;
- McCabe_Stack.Initialize;
-
- mcc_StateStack.Push(Start_State);
-
- Do_Parse: loop
-
- Current_Action := PT.GetAction(
- mcc_StateStack.CopyTop,
- PD.CurToken.gram_sym_val);
-
- -- Accept action
- exit when (Current_Action in PD.Accept_Action_Range);
-
- if Current_Action in PD.Shift_Action_Range then
-
- -- Shift token from CurToken to ParseStack.
- mcc_ParseStack.Push(PD.CurToken);
-
- McCabe_Stack.Push(MD.Null_Element);
-
- -- Add new state to top of StateStack
- mcc_StateStack.Push(Current_Action);
-
- -- Get next token.
- PD.CurToken := mcc_Lex.GetNextNonCommentToken;
-
- elsif Current_Action in PD.Reduce_Action_Range then
-
- Reduce_Action_Number := Current_Action -
- StateCountPlusOne;
-
- Reduce_Action_LH_Value :=
- PT.Get_LeftHandSide(Reduce_Action_Number);
-
- Reduce_Action_RH_Size :=
- PT.Get_RightHandSide(Reduce_Action_Number);
-
- New_Stack_Element.gram_sym_val := Reduce_Action_LH_Value;
- New_Stack_Element.lexed_token.text := PD.Null_Source_Text;
- New_Stack_Element.lexed_token.srcpos_line := 0;
- New_Stack_Element.lexed_token.srcpos_Column := 0;
-
- Apply_Actions(Reduce_Action_Number);
-
- -- Reduce Parse Stack
- mcc_ParseStack.Reduce(Reduce_Action_RH_Size);
- McCabe_Stack.Reduce(Reduce_Action_RH_Size);
-
- New_McCabe_Element.first := MD.First_Node;
- New_McCabe_Element.last := MD.Last_Node;
-
- MD.First_Node := NULL;
- MD.Last_Node := NULL;
-
- mcc_ParseStack.Push(New_Stack_Element);
- McCabe_Stack.Push(New_McCabe_Element);
-
- -- Reduce State Stack
- mcc_StateStack.Reduce(Reduce_Action_RH_Size);
-
- mcc_StateStack.Push(PT.GetAction(
- mcc_StateStack.CopyTop,
- Reduce_Action_LH_Value));
-
-
- else -- Current_Action is in PD.Error_Action_Range
- raise PD.Parser_Error;
- end if;
- end loop Do_Parse;
-
- McCabe_Stack.Pop;
- return mcc_ParseStack.Pop;
-
- exception
- when PD.MemoryOverflow =>
- -- raised if Parse runs out of newable memory.
- raise PD.MemoryOverflow;
-
- end Parse;
-
- ------------------------------------------------------------------
-
- end mcc_Parser;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --flowgraph.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with mcc_ParserDeclarations;
- with Lists;
- with McCabe_Definitions;
-
- package Flow_Graph_Pkg is
-
- use McCabe_Definitions;
-
- package PD renames mcc_ParserDeclarations;
- package MD renames McCabe_Definitions;
-
-
- -----------------------------------------------------------------------------
- -- Global types
- -----------------------------------------------------------------------------
-
- type Item_Type is
- record
- Name : PD.Source_Text;
- Node : MD.Node_Type;
- end record;
-
-
- ----------------------------------------------------------------------------
- -- Generic packages
- ----------------------------------------------------------------------------
-
- package Node_List is new Lists(MD.Node_Type);
-
- package Item_List is new Lists(Item_Type);
-
-
- --------------------------------------------------------------------------
- -- Procedures providing operations for producing graph
- --------------------------------------------------------------------------
-
- procedure Make_Edge( --| procedure to create edges between two nodes
- From_Node: MD.Node_Type;
- To_Node: MD.Node_Type;
- Which_Out: MD.Edges_Out_Type := MD.Left
- );
-
- function Make_Node --| procedure to create and return a new node
- return MD.Node_Type;
-
-
- ---------------------------------------------------------------------------
- -- subprograms providing operations for reading graph
- ---------------------------------------------------------------------------
-
- function Find_Top_Node(
- --| procedure to find the first open top node of a conditional statement
- N : MD.Node_Type
- ) return MD.Node_Type;
-
-
- end Flow_Graph_Pkg;
-
-
-
-
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --statement.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with McCabe_Definitions;
- with mcc_ParserDeclarations;
- with mcc_ParseTables;
- with mcc_Grammar_Constants;
- with Lists;
- with Labeled_Binary_Trees_Pkg;
- with Flow_Graph_Pkg;
- with Stack_Pkg;
- with String_Pkg;
-
- package Statements_Pkg is
-
- use McCabe_Definitions;
- use mcc_ParserDeclarations;
- use mcc_ParseTables;
- use mcc_Grammar_Constants;
-
- package PD renames mcc_ParserDeclarations;
- package FG renames Flow_Graph_Pkg;
- package MD renames McCabe_Definitions;
- package GC renames mcc_Grammar_Constants;
- package SP renames String_Pkg;
-
- function Label_Compare(x,y : SP.String_Type) return integer;
-
- package Label_Tree_Pkg is new Labeled_Binary_Trees_Pkg(
- Label_Type => SP.String_Type,
- Value_Type => MD.Node_Type,
- Difference => Label_Compare
- );
-
- package McCabe_List_Pkg is new Lists(ItemType => MD.Node_Type);
-
- package LT renames Label_Tree_Pkg;
-
- Curr_Label_Tree : LT.tree;
-
- package LP renames McCabe_List_Pkg;
-
- type Statement_Type is (Compound, Simple);
-
-
-
- package ST is new Stack_Pkg(Subprogram_ItemType);
-
- ------------------------------------------------------------------------------
- -- Declarations of global variables for Subprogram
- ------------------------------------------------------------------------------
-
- Source_File_Name : SP.String_Type;
- --| Name of the input file
-
- Subunit : ST.Stack;
- --| Holds current stack pointer
- Identifier : PD.Source_Text;
- --| Identifier for current subunit
- Ident_Flag : BOOLEAN := FALSE;
- --| flag to mark identifier (see getnext.sub)
-
-
- -- Exceptions --
-
- Empty_Stack: exception; --| Raised if an attempt is made to
- --| manipulate an empty list.
-
-
- --------------------------------------------------------------------------
- -- Global Variables and Constants
- --------------------------------------------------------------------------
-
- --| global constants for grammar symbols (may change if grammar changes);
- --| these constants correspond to the constants generated by the parser
- --| in the file mcc.tab
-
- Loop_Token : constant GrammarSymbolRange := 33;
- Select_Stmt_Token : constant GrammarSymbolRange := 53;
- Identifier_Token : constant GrammarSymbolRange := 65;
- Expanded_Name : constant GrammarSymbolRange := 214;
- Statement_Token : constant GrammarSymbolRange := 216;
- Stmt_List_Token : constant GrammarSymbolRange := 217;
- Seq_of_Stmt : constant GrammarSymbolRange := 218;
- Simple_Stmt : constant GrammarSymbolRange := 219;
- Comp_Stmt : constant GrammarSymbolRange := 220;
- Label_Plus_Token : constant GrammarSymbolRange := 221;
- Exit_Stmt : constant GrammarSymbolRange := 224;
- Goto_Stmt : constant GrammarSymbolRange := 226;
- If_Stmt : constant GrammarSymbolRange := 232;
- Case_Stmt : constant GrammarSymbolRange := 233;
- Loop_Stmt : constant GrammarSymbolRange := 234;
- Block_Stmt : constant GrammarSymbolRange := 235;
- Accept_Stmt : constant GrammarSymbolRange := 236;
- Select_Stmt : constant GrammarSymbolRange := 237;
- Label_Token : constant GrammarSymbolRange := 238;
- Elsif_Part : constant GrammarSymbolRange := 240;
- Else_Part : constant GrammarSymbolRange := 241;
- Case_Stmt_Alt : constant GrammarSymbolRange := 246;
- Case_Stmt_Alt_List : constant GrammarSymbolRange := 244;
- Loop_Id_Token : constant GrammarSymbolRange := 247;
- Iteration_Rule : constant GrammarSymbolRange := 249;
- Begin_End : constant GrammarSymbolRange := 250;
- Dec_Begin_End : constant GrammarSymbolRange := 251;
- Pragma_Except_Hand : constant GrammarSymbolRange := 252;
- Select_Wait : constant GrammarSymbolRange := 272;
- Cond_Entry : constant GrammarSymbolRange := 273;
- Timed_Entry : constant GrammarSymbolRange := 274;
- Select_Alt : constant GrammarSymbolRange := 275;
- Or_Select_Alt : constant GrammarSymbolRange := 276;
- Select_Wait_Alt : constant GrammarSymbolRange := 277;
- Accept_Alt : constant GrammarSymbolRange := 278;
- Delay_Alt : constant GrammarSymbolRange := 279;
- Terminate_Alt : constant GrammarSymbolRange := 280;
- Bracket_Sequence : constant GrammarSymbolRange := 281;
- Else_Seq_of_Stmt : constant GrammarSymbolRange := 317;
- Except_Handler : constant GrammarSymbolRange := 293;
- Except_Hand_List : constant GrammarSymbolRange := 318;
-
- -- global stack elements
-
- Id_Element : PD.ParseStackElement;
- Expand_Element : PD.ParseStackElement;
-
-
- -- global label stack
-
- package STL is new Stack_Pkg(LT.Tree);
-
- Label_Stack : STL.Stack;
-
- --------------------------------------------------------------------------
- -- The following groups of subprograms are used in the actions file.
- --------------------------------------------------------------------------
-
- --------------------------------------------------------------------------------
- -- Procedures for tying together a sequence of statements
- --------------------------------------------------------------------------------
-
- procedure Sequence_of_Statements
- --| procedure to connect a sequence of statement nodes using the following
- --| grammar reduction.
- ;
-
- --| Overview
- --|
- --| sequence_of_statements ::=
- --| {pragma_stm} statement {statement}
-
- --| Effects
- --| Causes the nodes for a statement and a list of statements to be
- --| connected in the flow graph.
-
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
- --| N/A
-
- procedure Statement_List
- --| procedure to connect a list of statements
- ;
-
- --| Overview
- --|
- --| {statement} ::=
- --| {pragma_stm}
- --|
- --| | {statement} statement {pragma_stm}
-
- --| Effects
- --| Causes the nodes for a statement and a list of statements to be
- --| connected in the flow graph.
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- -----------------------------------------------------------------------------
- -- Procedures to handle loops and exits
- -----------------------------------------------------------------------------
-
- procedure Loop_Statement(
- --| Procedure to create flow graph for a loop statement.
- Iteration_Rule_Exists : Boolean
- );
-
- --| Overview
- --|
- --|loop_statement ::=
- --| [loop_identifier:] iteration_rule
- --| sequence_of_statements END LOOP [identifier] ;
-
- --| Effects
- --| Causes the nodes for a statement and a list of statements to be
- --| connected in the flow graph. Creates nodes for the top and bottom of
- --| the loop statement and modifies the Edge list for the nodes involved.
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
- procedure Labeled_Exit(
- --| Procedure for determining the flow of a labeled exit, and adding it
- --| the flow graph.
- Conditional: boolean
- );
-
- --| Overview
- --|
- --| exit_statement ::=
- --|
- --| | EXIT expanded_name ;
- --|
- --| | EXIT expanded_name WHEN condition ;
-
- --| Effects
- --| Finds the enclosing loop with the matching identifier and causes the
- --| flow of control to point to the end of that loop.
-
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
-
- procedure UnLabeled_Exit(
- --| Procedure to determine the flow of control for an unlabeled exit
- Conditional: boolean
- );
-
- --| Overview
- --|
- --| exit_statement ::=
- --|
- --| EXIT ;
- --|
- --| | EXIT WHEN condition ;
-
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- -----------------------------------------------------------------------------
- -- Procedures to handle Labeled statements and Goto's
- -----------------------------------------------------------------------------
-
- procedure Goto_Statement;
- --| Procedure to determine flow of control for a goto statement
-
- --| Overview
- --|
- --| goto_statement ::=
- --| GOTO expanded_name ;
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- --| Label_List
-
- procedure Set_Label;
- --| Procedure to set the label id and place it in a list for later reference
-
- --| Overview
- --|
- --| label ::=
- --| << identifier >>
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- --| Label_List
-
- procedure Label_Plus_Rule;
- --| procedure to connect two (or more) labels listed consecutively
-
- --| Overview
- --|
- --| {label}+ ::=
- --| label
- --| | {label}+ label
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- --| Label_List
-
- procedure Label_Plus_Statement_Rule(
- --| procedure to connect a list of labels with the corresponding statement.
- This_Statement : Statement_Type
- );
-
- --| Overview
- --|
- --| statement ::=
- --|
- --| | {label}+ simple_statement
- --|
- --| | {label}+ compound_statement
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- -----------------------------------------------------------------------------
- -- procedures for conditional statements
- -- such as IF, SELECT, CASE, and Exception Handlers
- -----------------------------------------------------------------------------
-
- procedure Entry_Call(
- --| procedure to create the nodes and edges required for an entry call
- Else_Part_Kind: GrammarSymbolRange
- );
-
- --| Overview
- --|
- --| conditional_entry_call ::=
- --| SELECT_token {pragma_stm} call_statement [sequence_of_statements]
- --| ELSE__sequence_of_statements END SELECT ;
- --|
- --| timed_entry_call ::=
- --| SELECT {pragma_stm} call_statement [sequence_of_statements]
- --| OR {pragma_stm} delay_alternative END SELECT ;
-
-
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
- procedure Accept_Alternative;
- --| procedure to connect the parts of an accept alternative
-
- --| Overview
- --|
- --| accept_alternative ::=
- --| accept_statement [sequence_of_statements]
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
-
- procedure Elsif_or_OR_Statement(
- --| procedure to connect the parts of an elsif part of and if statement
- --| or the OR part of a select statement
- List_Part: GrammarSymbolRange;
- Seq_Part: GrammarSymbolRange
- );
-
- --| Overview
- --|
- --| {ELSIF__condition__THEN__sequence_of_statements} ::=
- --| empty
- --|
- --| | {ELSIF__condition__THEN__sequence_of_statements}
- --| ELSIF__condition__THEN sequence_of_statements
- --|
- --| {OR__select_alternative} ::=
- --| empty
- --| | {OR__select_alternative} OR select_alternative
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
-
- procedure Conditional_Stmt_Alternative;
- --| procedure to create the nodes and edges required for a conditional
- --| statement alternative.
-
- --| Overview
- --|
- --| case_statement_alternative ::=
- --| WHEN_choice_=> sequence_of_statements
- --|
- --| exception_handler ::=
- --| WHEN_exception_choice_=>
- --| sequence_of_statements
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
-
- procedure Conditional_Stmt_Alternative_List(
- --| procedure to connect a list of conditional statement alternatives
- Alternate_Kind: GrammarSymbolRange;
- List_Kind: GrammarSymbolRange
- );
-
- --| Overview
- --| {case_statement_alternative} ::=
- --| | {case_statement_alternative} case_statement_alternative
- --|
- --| exception_handler_list ::=
- --| exception_handler
- --| | exception_handler_list exception_handler
-
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
-
- procedure Conditional_End (
- --| procedure to finish up the flow graph for a conditional statement
- List_Part: GrammarSymbolRange := Elsif_Part;
- Seq_Part: GrammarSymbolRange := Seq_of_Stmt
- );
- --| Overview
- --|
- --| if_statement ::=
- --| IF condition_THEN__sequence_of_statements
- --| {ELSIF__condition__THEN__sequence_of_statements}
- --| [ELSE__sequence_of_statements] END IF ;
- --|
- --| case_statement ::=
- --| CASE_expression_IS
- --| {pragma_alt} case_statement_alternative
- --| {case_statement_alternative} END CASE ;
- --|
- --| selective_wait ::=
- --| SELECT_token select_alternative {OR__select_alternative}
- --| [ELSE__sequence_of_statements] END SELECT ;
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
-
- procedure Exception_End;
- --| procedure to finish up the connections for the end of an exception
- --| handler
-
- --| Overview
- --| begin_end_block ::=
- --| | BEGIN sequence_of_statements
- --| EXCEPTION {pragma_alt}__exception_handler_list END
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- ------------------------------------------------------------------------------
- -- Procedure for cleaning up at end of a subprogram
- ------------------------------------------------------------------------------
-
- procedure Clean_Up_Subprogram;
- --| Procedure to make the final connections for a subprogram's flow graph
-
- --| Overview
- --|
- --| subprogram_body ::=
- --| subprogram_specification IS
- --| declarative_part__begin_end_block
- --| [end_designator] ;
- --|
- --| package_body ::=
- --| | package_body_indicator
- --| declarative_part__begin_end_block
- --| [identifier] ;
- --|
- --| task_body ::=
- --| task_body_indicator
- --| declarative_part__begin_end_block
- --| [identifier] ;
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- ------------------------------------------------------------------------------
- -- Procedures for propagating information up as reductions are done
- ------------------------------------------------------------------------------
-
- procedure Make_Holding_Node;
- --| procedure to create a node when neede to hold a place which might be
- --| empty
-
- --| Overview
- --|
- --| [sequence_of_statements] ::=
- --| {pragma_stm}
- --|
- --| {statement} ::=
- --| {pragma_stm}
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
-
-
- procedure Propagate_Up(
- --| procedure to propagate up a spcefic part of a grammar construct
- Grammar_Kind: GrammarSymbolRange
- );
-
- --| Overview
- --|
- --| accept_statement ::=
- --| ACCEPT identifier [(expression)][formal_part] DO_token
- --| sequence_of_statements END [identifier] ;
- --|
- --| begin_end_block ::=
- --| BEGIN sequence_of_statements END
- --|
- --| [ELSE__sequence_of_statements] ::=
- --| | ELSE__sequence_of_statements
- --|
- --| ELSE__sequence_of_statements ::=
- --| ELSE sequence_of_statements
- --|
- --| [sequence_of_statements] ::=
- --| {pragma_stm}
- --| | sequence_of_statements
-
- --| Modifies
- --| McCabe_Definitions.First_Node
- --| McCabe_Definitions.Last_Node
- --| McCabe_Stack.Space
- --------------------------------------------------------------------------
- --| procedures for keeping track of current subprogram
- --------------------------------------------------------------------------
-
- procedure Init_Subprogram_Element;
-
- procedure Open_Subprogram;
- --| Makes Element first item in stack Stk.
-
- --| Effects
- --| This prepends stack Stk with Element.
- --|
- --| Modifies
- --| This adds Element to the beginning of the stack Stk.
-
- procedure Report_and_Close_Subprogram;
-
- procedure Close_Subprogram;
-
- procedure Report_Total_Complexity;
-
- end Statements_Pkg;
-
-
-
-
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccapply.sub
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-
- with Statements_Pkg; use Statements_Pkg;
- with MCC_ParseStack; use MCC_ParseStack;
- with MCC_ParserDeclarations; use MCC_ParserDeclarations;
-
-
-
- separate ( MCC_Parser )
-
- procedure Apply_Actions ( Rule_Number : in PT.LeftHandSideRange )
- is
- begin
- case Rule_Number is
-
-
- ----------------------------------------------------------------------
- -- sequence_of_statements ::= {pragma_stm} statement {statement}
-
-
- when 166 =>
-
-
- Sequence_of_Statements;
- ----------------------------------------------------------------------
- -- statement ::= simple_statement
-
-
- when 167 =>
-
-
- Propagate_Up(Simple_Stmt);
- ----------------------------------------------------------------------
- -- statement ::= compound_statement
-
-
- when 168 =>
-
-
- Propagate_Up(Comp_Stmt);
- ----------------------------------------------------------------------
- -- statement ::= {label}+ simple_statement
-
-
- when 169 =>
-
-
- Label_Plus_Statement_Rule(Simple);
- ----------------------------------------------------------------------
- -- statement ::= {label}+ compound_statement
-
-
- when 170 =>
-
-
- Label_Plus_Statement_Rule(Compound);
- ----------------------------------------------------------------------
- -- simple_statement ::= exit_statement
-
-
- when 173 =>
-
-
- Propagate_Up(Exit_Stmt);
- ----------------------------------------------------------------------
- -- simple_statement ::= goto_statement
-
-
- when 175 =>
-
-
- Propagate_Up(Goto_Stmt);
- ----------------------------------------------------------------------
- -- compound_statement ::= if_statement
-
-
- when 181 =>
-
-
- Propagate_Up(If_Stmt);
- ----------------------------------------------------------------------
- -- compound_statement ::= case_statement
-
-
- when 182 =>
-
-
- Propagate_Up(Case_Stmt);
- ----------------------------------------------------------------------
- -- compound_statement ::= loop_statement
-
-
- when 183 =>
-
-
- Propagate_Up(Loop_Stmt);
- ----------------------------------------------------------------------
- -- compound_statement ::= block_statement
-
-
- when 184 =>
-
-
- Propagate_Up(Block_Stmt);
- ----------------------------------------------------------------------
- -- compound_statement ::= accept_statement
-
-
- when 185 =>
-
-
- Propagate_Up(Accept_Stmt);
- ----------------------------------------------------------------------
- -- compound_statement ::= select_statement
-
-
- when 186 =>
-
-
- Propagate_Up(Select_Stmt);
- ----------------------------------------------------------------------
- -- label ::= << identifier >>
-
-
- when 187 =>
-
-
- Set_Label;
- ----------------------------------------------------------------------
- -- if_statement ::= IF condition__THEN sequence_of_statements END IF ;
-
-
- when 190 =>
-
-
- Conditional_End;
- ----------------------------------------------------------------------
- -- case_statement ::= CASE expression IS {pragma_alt}
- -- {case_statement_alternative}
-
-
- when 192 =>
-
-
- Propagate_Up(Case_Stmt_Alt_List);
- ----------------------------------------------------------------------
- -- case_statement_alternative ::= WHEN_choice_=> sequence_of_statements
-
-
- when 193 =>
-
-
- Conditional_Stmt_Alternative;
- ----------------------------------------------------------------------
- -- loop_statement ::= [loop_identifier:] LOOP sequence_of_statements END LOOP ;
-
-
- when 196 =>
-
-
- Loop_Statement(Iteration_Rule_Exists => FALSE);
- ----------------------------------------------------------------------
- -- loop_statement ::= [loop_identifier:] iteration_rule LOOP END LOOP ;
-
-
- when 197 =>
-
-
- Loop_Statement(Iteration_Rule_Exists => TRUE);
- ----------------------------------------------------------------------
- -- declarative_part__begin_end_block ::= declarative_part begin_end_block
-
-
- when 201 =>
-
-
- Propagate_Up(Begin_End);
- ----------------------------------------------------------------------
- -- begin_end_block ::= BEGIN sequence_of_statements END
-
-
- when 202 =>
-
-
- Propagate_Up(Seq_of_Stmt);
- ----------------------------------------------------------------------
- -- begin_end_block ::= BEGIN sequence_of_statements EXCEPTION END
-
-
- when 203 =>
-
-
- Exception_End;
- ----------------------------------------------------------------------
- -- block_statement ::= [block_identifier:] DECLARE [identifier] ;
-
-
- when 204 =>
-
-
- Propagate_Up(Dec_Begin_End);
- ----------------------------------------------------------------------
- -- block_statement ::= [block_identifier:] begin_end_block [identifier] ;
-
-
- when 205 =>
-
-
- Propagate_Up(Begin_End);
- ----------------------------------------------------------------------
- -- exit_statement ::= EXIT ;
-
-
- when 206 =>
-
-
- UnLabeled_Exit(Conditional => FALSE);
- ----------------------------------------------------------------------
- -- exit_statement ::= EXIT WHEN condition ;
-
-
- when 207 =>
-
-
- UnLabeled_Exit(Conditional => TRUE);
- ----------------------------------------------------------------------
- -- exit_statement ::= EXIT expanded_name ;
-
-
- when 208 =>
-
-
- Labeled_Exit(Conditional => FALSE);
- ----------------------------------------------------------------------
- -- exit_statement ::= EXIT expanded_name WHEN condition ;
-
-
- when 209 =>
-
-
- Labeled_Exit(Conditional => TRUE);
- ----------------------------------------------------------------------
- -- goto_statement ::= GOTO expanded_name ;
-
-
- when 212 =>
-
-
- Goto_Statement;
- ----------------------------------------------------------------------
- -- subprogram_declaration ::= subprogram_specification ;
-
-
- when 213 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= PROCEDURE identifier
-
-
- when 214 =>
-
-
- Open_Subprogram;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= PROCEDURE identifier ( parameter_specification
- -- )
-
-
- when 215 =>
-
-
- Open_Subprogram;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= FUNCTION designator RETURN type_mark
-
-
- when 216 =>
-
-
- Open_Subprogram;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= FUNCTION designator ( parameter_specification )
-
-
- when 217 =>
-
-
- Open_Subprogram;
- ----------------------------------------------------------------------
- -- subprogram_body ::= subprogram_specification IS [end_designator] ;
-
-
- when 226 =>
-
-
- Clean_Up_Subprogram;
- Report_and_Close_Subprogram;
- ----------------------------------------------------------------------
- -- package_declaration ::= package_specification ;
-
-
- when 228 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- package_spec_indicator ::= PACKAGE identifier IS
-
-
- when 231 =>
-
-
- Open_Subprogram;
- ----------------------------------------------------------------------
- -- package_body ::= package_body_indicator declarative_part END [identifier] ;
-
-
- when 232 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- package_body ::= package_body_indicator declarative_part__begin_end_block ;
-
-
- when 233 =>
-
-
- Clean_Up_Subprogram;
- Report_and_Close_Subprogram;
- ----------------------------------------------------------------------
- -- package_body_indicator ::= PACKAGE BODY identifier IS
-
-
- when 234 =>
-
-
- Open_Subprogram;
- ----------------------------------------------------------------------
- -- renaming_declaration ::= subprogram_specification RENAMES name ;
-
-
- when 243 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- task_body ::= task_body_indicator declarative_part__begin_end_block ;
-
-
- when 249 =>
-
-
- Clean_Up_Subprogram;
- Report_and_Close_Subprogram;
- ----------------------------------------------------------------------
- -- task_body_indicator ::= TASK BODY identifier IS
-
-
- when 250 =>
-
-
- Open_Subprogram;
- ----------------------------------------------------------------------
- -- accept_statement ::= ACCEPT identifier [(expression)][formal_part] ;
-
-
- when 252 =>
-
-
- Make_Holding_Node;
- ----------------------------------------------------------------------
- -- accept_statement ::= ACCEPT identifier [(expression)][formal_part] DO END ;
-
-
- when 253 =>
-
-
- Propagate_Up(Seq_of_Stmt);
- ----------------------------------------------------------------------
- -- select_statement ::= selective_wait
-
-
- when 255 =>
-
-
- Propagate_Up(Select_Wait);
- ----------------------------------------------------------------------
- -- select_statement ::= conditional_entry_call
-
-
- when 256 =>
-
-
- Propagate_Up(Cond_Entry);
- ----------------------------------------------------------------------
- -- select_statement ::= timed_entry_call
-
-
- when 257 =>
-
-
- Propagate_Up(Timed_Entry);
- ----------------------------------------------------------------------
- -- selective_wait ::= SELECT select_alternative {OR__select_alternative} END ;
-
-
- when 258 =>
-
-
- Conditional_End(Or_Select_Alt, Select_Alt);
- ----------------------------------------------------------------------
- -- select_alternative ::= {pragma_stm} WHEN condition =>
-
-
- when 259 =>
-
-
- Propagate_Up(Select_Wait_Alt);
- ----------------------------------------------------------------------
- -- select_alternative ::= {pragma_stm} selective_wait_alternative
-
-
- when 260 =>
-
-
- Propagate_Up(Select_Wait_Alt);
- ----------------------------------------------------------------------
- -- selective_wait_alternative ::= accept_alternative
-
-
- when 261 =>
-
-
- Propagate_Up(Accept_Alt);
- ----------------------------------------------------------------------
- -- selective_wait_alternative ::= delay_alternative
-
-
- when 262 =>
-
-
- Propagate_Up(Delay_Alt);
- ----------------------------------------------------------------------
- -- selective_wait_alternative ::= terminate_alternative
-
-
- when 263 =>
-
-
- Propagate_Up(Terminate_Alt);
- ----------------------------------------------------------------------
- -- accept_alternative ::= accept_statement [sequence_of_statements]
-
-
- when 264 =>
-
-
- Accept_Alternative;
- ----------------------------------------------------------------------
- -- delay_alternative ::= delay_statement [sequence_of_statements]
-
-
- when 265 =>
-
-
- Propagate_Up(Bracket_Sequence);
- ----------------------------------------------------------------------
- -- terminate_alternative ::= TERMINATE ; {pragma_stm}
-
-
- when 266 =>
-
-
- Make_Holding_Node;
- ----------------------------------------------------------------------
- -- conditional_entry_call ::= SELECT {pragma_stm} call_statement ELSE END
- -- SELECT
-
-
- when 267 =>
-
-
- Entry_Call(Seq_of_Stmt);
- ----------------------------------------------------------------------
- -- timed_entry_call ::= SELECT {pragma_stm} call_statement OR {pragma_stm} END
-
-
- when 268 =>
-
-
- Entry_Call(Delay_Alt);
- ----------------------------------------------------------------------
- -- body_stub ::= subprogram_specification IS SEPARATE ;
-
-
- when 284 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- body_stub ::= PACKAGE BODY identifier IS SEPARATE ;
-
-
- when 285 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- body_stub ::= TASK BODY identifier IS SEPARATE ;
-
-
- when 286 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- exception_handler ::= WHEN_exception_choice_=> sequence_of_statements
-
-
- when 289 =>
-
-
- Conditional_Stmt_Alternative;
- ----------------------------------------------------------------------
- -- generic_specification ::= generic_formal_part subprogram_specification
-
-
- when 296 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- generic_specification ::= generic_formal_part package_specification
-
-
- when 297 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- generic_parameter_declaration ::= WITH subprogram_specification ;
-
-
- when 302 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ;
-
-
- when 315 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ( )
- -- ;
-
-
- when 316 =>
-
-
- Close_Subprogram;
- ----------------------------------------------------------------------
- -- expanded_name ::= identifier
-
-
- when 346 =>
-
-
- Id_Element := Get_Stack_Element(1);
- New_Stack_Element.lexed_token.text :=
- Id_Element.lexed_token.text;
- ----------------------------------------------------------------------
- -- expanded_name ::= expanded_name . identifier
-
-
- when 347 =>
-
-
-
- Id_Element := Get_Stack_Element(1);
- Expand_Element := Get_Stack_Element(3);
-
- Put_Source_Text(
- (Get_Source_Text(Expand_Element.lexed_token.text) &
- "." &
- Get_Source_Text(Id_Element.lexed_token.text)),
- New_Stack_Element.lexed_token.text);
-
- ----------------------------------------------------------------------
- -- {statement} ::= {statement} statement {pragma_stm}
-
-
- when 408 =>
-
-
- Statement_List;
- ----------------------------------------------------------------------
- -- {label}+ ::= label
-
-
- when 409 =>
-
-
- Label_Plus_Rule;
- ----------------------------------------------------------------------
- -- {label}+ ::= {label}+ label
-
-
- when 410 =>
-
-
- Label_Plus_Rule;
- ----------------------------------------------------------------------
- -- {ELSIF__condition__THEN__sequence_of_statements} ::= ELSIF__condition__THEN
-
-
- when 412 =>
-
-
- Elsif_or_OR_Statement(Elsif_Part, Seq_of_Stmt);
- ----------------------------------------------------------------------
- -- [ELSE__sequence_of_statements] ::= empty
-
-
- when 413 =>
-
-
- Make_Holding_Node;
- ----------------------------------------------------------------------
- -- [ELSE__sequence_of_statements] ::= ELSE__sequence_of_statements
-
-
- when 414 =>
-
-
- Propagate_Up(Else_Seq_of_Stmt);
- ----------------------------------------------------------------------
- -- ELSE__sequence_of_statements ::= ELSE sequence_of_statements
-
-
- when 415 =>
-
-
- Propagate_Up(Seq_of_Stmt);
- ----------------------------------------------------------------------
- -- {case_statement_alternative} ::= case_statement_alternative
-
-
- when 418 =>
-
-
- Propagate_Up(Case_Stmt_Alt);
- ----------------------------------------------------------------------
- -- {case_statement_alternative} ::= {case_statement_alternative}
-
-
- when 419 =>
-
-
- Conditional_Stmt_Alternative_List(Case_Stmt_Alt, Case_Stmt_Alt_List);
- ----------------------------------------------------------------------
- -- [loop_identifier:] ::= identifier :
-
-
- when 421 =>
-
-
- Id_Element := Get_Stack_Element(2);
- New_Stack_Element.lexed_token.text :=
- Id_Element.lexed_token.text;
- ----------------------------------------------------------------------
- -- {pragma_alt}__exception_handler_list ::= {pragma_alt} exception_handler_list
-
-
- when 426 =>
-
-
- Propagate_Up(Except_Hand_List);
- ----------------------------------------------------------------------
- -- exception_handler_list ::= exception_handler
-
-
- when 427 =>
-
-
- Propagate_Up(Except_Handler);
- -- Conditional_Stmt_Alternative_List(Except_Handler, Except_Hand_List);
- ----------------------------------------------------------------------
- -- exception_handler_list ::= exception_handler_list exception_handler
-
-
- when 428 =>
-
-
- Conditional_Stmt_Alternative_List(Except_Handler, Except_Hand_List);
- ----------------------------------------------------------------------
- -- {OR__select_alternative} ::= {OR__select_alternative} OR select_alternative
-
-
- when 449 =>
-
-
- Elsif_or_OR_Statement(OR_Select_Alt, Select_Alt);
- ----------------------------------------------------------------------
- -- [sequence_of_statements] ::= {pragma_stm}
-
-
- when 450 =>
-
-
- Make_Holding_Node;
- ----------------------------------------------------------------------
- -- [sequence_of_statements] ::= sequence_of_statements
-
-
- when 451 =>
-
-
- Propagate_Up(Seq_of_Stmt);
-
- when others =>
- null;
- end case;
-
- end Apply_Actions;
-
-
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --statement.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with case_insensitive_string_comparison;
-
- with McCabe_Stack;
- with Paginated_Output;
- with mcc_ParseStack;
- with mcc_StateStack;
- with Text_IO;
-
- package body Statements_Pkg is
-
- -- package PD renames ParserDeclarations;
- -- package LT renames Label_Tree_Pkg;
- -- package FG renames Flow_Graph_Package;
- -- package LP renames McCabe_List_Package;
- -- package MD renames McCabe_Definitions;
-
- package CISC renames case_insensitive_string_comparison;
- package PO renames Paginated_Output;
- package Int_IO is new Text_IO.Integer_IO(INTEGER);
-
- --------------------------------------------------------------------------
- -- Local State Variables
- --------------------------------------------------------------------------
-
- Total_Nodes: integer := 0;
- Total_Edges: integer := 0;
- Total_Units: integer := 0;
-
- --------------------------------------------------------------------------
- -- Specifications of local subprograms
- --------------------------------------------------------------------------
-
- procedure Backup_Thru_Stack(
- Stack_Element: in out PD.ParseStackElement;
- Token: in GrammarSymbolRange
- );
-
- procedure Backup_Thru_Stack(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Token: in GrammarSymbolRange);
-
- procedure Backup_Thru_Stack(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Token: in GrammarSymbolRange;
- Position: out StateParseStacksIndex
- );
-
- procedure Backup_Thru_Stack_Twice(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Token: in GrammarSymbolRange
- );
-
- function Get_Id(Stack_Element : PD.ParseStackElement) return PD.Source_Text;
-
-
- procedure Exit_Statement(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Conditional: in boolean;
- Position: in PD.StateParseStacksIndex
- );
-
-
- procedure Conditional_Statement(
- Seq_Element: MD.McCabe_Stack_Element;
- Conditional_Node: in out MD.Node_Type;
- End_Node: in out MD.Node_Type
- );
-
- procedure Conditional_Statement_List(
- List_Element : MD.McCabe_Stack_Element;
- Conditional_Node : MD.Node_Type
- );
-
- procedure Put_Fully_Qualified_Name;
-
- procedure Report_Complexities;
-
- --------------------------------------------------------------------------
- -- The following function is used in the instantiation of Label_Tree
- -- to allow for ordering of the label tree.
- --------------------------------------------------------------------------
-
- function Label_Compare(
- --| used by trees_pkg for determining order of nodes.
- x,y : SP.String_Type
- ) return integer is
-
- --| Algorithm
- --|+
- --| returns true if the string value of x is less than
- --| the string value of y, else returns false.
- --|-
-
- begin
-
- return CISC.Compare(SP.Value(x), SP.Value(y));
-
- end Label_Compare;
-
- --------------------------------------------------------------------------
- -- The following groups of subprograms are used in the actions file.
- --------------------------------------------------------------------------
-
- ----------------------------------------------------------------------------
- -- Procedures for tying together a sequence of statements
- ----------------------------------------------------------------------------
-
- procedure Sequence_of_Statements is
-
- --| Overview
- --| sequence_of_statements ::=
- --| {pragma_stm} statement {statement}
-
- --| Algorithm
- --|+
- --| Backup through the parse stack to the beginning of the sequence.
- --| Loop through the statements. If the first and last nodes of a statement
- --| are null then it can be added to the current node. If not, an edge is
- --| made from the previous node to the first node of the current statement
- --| and from the last node to a new node.
- --|-
-
- Statement_Element : MD.McCabe_Stack_Element;
- Stmt_List_Element : MD.McCabe_Stack_Element;
-
- begin
- Backup_Thru_Stack(Statement_Element, Statement_Token);
- Backup_Thru_Stack(Stmt_List_Element, Stmt_List_Token);
-
- if (Statement_Element.first = NULL) and (Stmt_List_Element.first = NULL)
- then
- MD.First_Node := FG.Make_Node;
- MD.Last_Node := MD.First_Node;
- elsif Statement_Element.first /= NULL then
- MD.First_Node := Statement_Element.first;
- if Stmt_List_Element.first /= NULL then
- MD.Last_Node := Stmt_List_Element.last;
- FG.Make_Edge(Statement_Element.last, Stmt_List_Element.first);
- else
- MD.Last_Node := Statement_Element.last;
- end if;
- else
- MD.First_Node := Stmt_List_Element.first;
- MD.Last_Node := Stmt_List_Element.last;
- end if;
-
- end Sequence_of_Statements;
-
-
- procedure Statement_List is
-
- --| Overview
- --|
- --| {statement} ::=
- --| | {statement} statement {pragma_stm}
-
- Statement_Element : MD.McCabe_Stack_Element;
- Stmt_List_Element : MD.McCabe_Stack_Element;
-
- begin
-
- Backup_Thru_Stack(Statement_Element, Statement_Token);
- Backup_Thru_Stack(Stmt_List_Element, Stmt_List_Token);
-
- if (Stmt_List_Element.first = NULL) and (Statement_Element.first = NULL)
- then
- MD.First_Node := FG.Make_Node;
- MD.Last_Node := MD.First_Node;
-
- elsif Stmt_List_Element.first /= NULL then
-
- MD.First_Node := Stmt_List_Element.first;
-
- if Statement_Element.first /= NULL then
- FG.Make_Edge(Stmt_List_Element.last, Statement_Element.first);
- MD.Last_Node := Statement_Element.last;
- else
- MD.Last_Node := Stmt_List_Element.last;
- end if;
-
- else
-
- MD.First_Node := Statement_Element.first;
- MD.Last_Node := Statement_Element.last;
-
- end if;
-
- end Statement_List;
-
- -----------------------------------------------------------------------------
- -- Procedures to handle loops and exits
- -----------------------------------------------------------------------------
-
- procedure Loop_Statement(
- Iteration_Rule_Exists : Boolean
- ) is
-
- --| Overview
- --|
- --| loop_statement ::=
- --| [loop_identifier:] iteration_rule
- --| sequence_of_statements END LOOP [identifier] ;
-
-
- --| Algorithm
- --|+
- --| If the loop token element in the parse stack has no first and end
- --| nodes associated with it (no exit statements were found) then make
- --| these two nodes. Otherwise propagate the values up.
- --| If this loop has an iteration rule associated with it then make
- --| an edge to the top of the loop from the end.
- --| Then enclose the sequence of statements between the top and the
- --| end.
- --|-
-
- Loop_Stmt_Token : MD.McCabe_Stack_Element;
- Seq_Token : MD.McCabe_Stack_Element;
- Iteration_Rule_Token : MD.McCabe_Stack_Element;
-
- begin
- Backup_Thru_Stack_Twice(Loop_Stmt_Token, Loop_Token);
- Backup_Thru_Stack(Seq_Token, Seq_of_Stmt);
-
- if Loop_Stmt_Token.first = NULL then
- MD.First_Node := FG.Make_Node;
- MD.Last_Node := FG.Make_Node;
- FG.Make_Edge(MD.First_Node, MD.Last_Node);
- else
- MD.First_Node := Loop_Stmt_Token.first;
- MD.Last_Node := Loop_Stmt_Token.last;
- if Iteration_Rule_Exists then
- FG.Make_Edge(MD.First_Node, MD.Last_Node);
- end if;
- end if;
-
- FG.Make_Edge(MD.First_Node, Seq_Token.first);
- FG.Make_Edge(Seq_Token.last, MD.First_Node);
-
- end Loop_Statement;
-
-
- procedure Labeled_Exit(
- Conditional: boolean
- ) is
- --| Overview
- --| exit_statement ::=
- --| | EXIT expanded_name ;
- --| | EXIT expanded_name WHEN condition ;
-
- --| Algorithm
- --|+
- --| Backup through the parse stack until the enclosing loop with
- --| the corresponding label is found. Call Exit_Statement.
- --|-
-
- Stack_Element : PD.ParseStackElement;
- McCabe_Element : MD.McCabe_Stack_Element;
- Label_Id : PD.Source_Text;
- Exists : Boolean := False;
- Complaint : Exception;
- Position : PD.StateParseStacksIndex;
-
- begin
-
- Backup_Thru_Stack(Stack_Element, Expanded_Name);
- Label_Id := Get_Id(Stack_Element);
-
- for i in 1..mcc_ParseStack.Length loop
-
- Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
-
- if Stack_Element.gram_sym_val = Loop_Token then
- McCabe_Element := McCabe_Stack.Get_Stack_Element(i);
- Position := i;
-
- elsif Stack_Element.gram_sym_val = Loop_Id_Token then
-
- if PD.GEt_Source_Text(Get_Id(Stack_Element))
- = PD.Get_Source_Text(Label_Id)
- then
- Exists := TRUE;
- EXIT;
- end if;
-
- end if;
-
- end loop;
-
- if Exists then
- Exit_Statement( McCabe_Element, Conditional, Position);
- else
- Paginated_Output.PUT("Loop identifier not found");
- end if;
-
- end Labeled_Exit;
-
- procedure UnLabeled_Exit(
- Conditional: boolean
- ) is
-
- --| Overview
- --| exit_statement ::=
- --| EXIT ;
- --| | EXIT WHEN condition ;
-
- --| Algorithm
- --|+
- --| Back up through the parse stack until the enclosing loop token
- --| is found. Call Exit_Statement.
- --|-
-
- Stack_Element : MD.McCabe_Stack_Element;
- Position : PD.StateParseStacksIndex;
-
- begin
-
- Backup_thru_Stack(Stack_Element, Loop_Token, Position);
- Exit_Statement( Stack_Element, Conditional, Position) ;
-
- end UnLabeled_Exit;
-
-
- ---------------------------------------------------------------------------
- -- Procedures to handle Labeled statements and Goto's
- ---------------------------------------------------------------------------
-
- procedure Goto_Statement is
-
- --| Overview
- --| goto_statement ::=
- --| GOTO expanded_name ;
-
- --| Algorithm
- --|+
- --| Make a node for the goto statement. Check the label tree for
- --| the Label_Id (expanded_name). If is not present, make a node,and
- --| add a listing to the label tree. Make an edge to the label node,
- --| and set the last node in the goto statement to be null. This is
- --| done so that when the enclosing sequence of statements is reduced,
- --| no edge will be made to the following statement.
- --|-
-
- Stack_Element: PD.ParseStackElement;
- Label_Node: MD.Node_Type;
- Goto_Node: MD.Node_Type;
- Label_Id: SP.String_Type;
-
- begin
-
- Goto_Node := FG.Make_Node;
- MD.First_Node := Goto_Node;
- MD.Last_Node := Goto_Node;
-
- Backup_Thru_Stack(Stack_Element, Expanded_Name);
- Label_Id := SP.Upper(PD.Get_Source_Text(Get_Id(Stack_Element)));
-
- if LT.is_Found(Label_Id, Curr_Label_Tree) then
- Label_Node := LT.Find(Label_Id, Curr_Label_Tree);
- else
- Label_Node := FG.Make_Node;
- LT.Insert(Label_Id, Label_Node, Curr_Label_Tree);
- end if;
-
- FG.Make_Edge(Goto_Node, Label_Node);
- MD.Last_Node := NULL;
-
- end Goto_Statement;
-
-
-
- procedure Set_Label is
-
- --| Overview
- --| label ::=
- --| << identifier >>
-
- --| Algorithm
- --|+
- --| Look for the label identifier in the label tree. If it is present
- --| then set the ParseStackElement first and last values to the listed
- --| node. If not, make a new node and add it and the label id to the
- --| label tree.
- --|-
-
- Stack_Element: PD.ParseStackElement;
- Label_Id: SP.String_Type;
- N: Node_Type;
-
- begin
-
-
- Backup_Thru_Stack(Stack_Element, Identifier_Token);
- Label_Id := SP.Upper(PD.Get_Source_Text(Get_Id(Stack_Element)));
-
- if LT.is_Found(Label_Id, Curr_Label_Tree) then
- MD.First_Node := LT.Find(Label_Id, Curr_Label_Tree);
- MD.Last_Node := MD.First_Node;
- else
- N := FG.Make_Node;
- LT.Insert(Label_Id, N, Curr_Label_Tree);
- MD.First_Node := N;
- MD.Last_Node := N;
- end if;
-
- end Set_Label;
-
-
- procedure Label_Plus_Rule is
- --| This makes sure that a list of labels is connected into the flow graph.
-
- --| Overview
- --| {label}+ ::=
- --| label
- --| | {label}+ label
-
- --| Algorithm
- --|+
- --| Make an edge from the last node of the label list to the label.
- --| Then set the first and last nodes of the new Stack_Element to include
- --| the newly added label.
- --|-
- Label_Plus_Element : MD.McCabe_Stack_Element;
- Label_Element : MD.McCabe_Stack_Element;
-
- begin
-
- Backup_Thru_Stack(Label_Plus_Element, Label_Plus_Token);
- Backup_Thru_Stack(Label_Element, Label_Token);
-
- if Label_Plus_Element.first /= NULL then
-
- FG.Make_Edge(Label_Plus_Element.last, Label_Element.first);
- MD.First_Node := Label_Plus_Element.first;
- MD.Last_Node := Label_Element.last;
-
- else
-
- MD.First_Node := Label_Element.first;
- MD.Last_Node := Label_Element.last;
-
- end if;
-
- end Label_Plus_Rule;
-
-
- procedure Label_Plus_Statement_Rule(This_Statement : Statement_Type) is
-
- --| Overview
- --| statement ::=
- --| | {label}+ simple_statement
- --| | {label}+ compound_statement
-
- --| Algorithm
- --|+
- --| Add an edge from the list of labels to the top of the statement.
- --| If it is a simple statement, then a new node must be made.
- --|-
-
- N : Node_Type;
- Statement_Element : MD.McCabe_Stack_Element;
- Label_Plus_Element : MD.McCabe_Stack_Element;
-
- begin
-
- if This_Statement = Compound then
- Backup_Thru_Stack(Statement_Element, Comp_Stmt);
- else
- Backup_Thru_Stack(Statement_Element, Simple_Stmt);
- end if;
-
- Backup_Thru_Stack(Label_Plus_Element, Label_Plus_Token);
-
- if Statement_Element.first = NULL then
- N := FG.Make_Node;
- Statement_Element.first := N;
- Statement_Element.last := N;
- end if;
-
- FG.Make_Edge(Label_Plus_Element.last,Statement_Element.first);
-
- MD.First_Node := Statement_Element.first;
- MD.Last_Node := Statement_Element.last;
-
- end Label_Plus_Statement_Rule;
-
- ---------------------------------------------------------------------------
- -- procedures for conditional statements
- -- such as IF, SELECT, CASE, and Exception Handlers
- ---------------------------------------------------------------------------
-
- procedure Entry_Call(Else_Part_Kind : GrammarSymbolRange) is
-
- --| Overview
- --| conditional_entry_call ::=
- --| SELECT_token {pragma_stm} call_statement [sequence_of_statements]
- --| ELSE__sequence_of_statements END SELECT ;
- --|
- --| timed_entry_call ::=
- --| SELECT {pragma_stm} call_statement [sequence_of_statements]
- --| OR {pragma_stm} delay_alternative END SELECT ;
-
- Entry_Element : MD.McCabe_Stack_Element;
- Seq_Element : MD.McCabe_Stack_Element;
-
- begin
-
- Backup_Thru_Stack(Entry_Element, Else_Part_Kind);
- Backup_Thru_Stack(Seq_Element, Bracket_Sequence);
-
- MD.First_Node := FG.Make_Node;
- MD.Last_Node := FG.Make_Node;
-
- FG.Make_Edge(MD.First_Node, Seq_Element.first);
- FG.Make_Edge(Seq_Element.last, MD.Last_Node);
-
- FG.Make_Edge(MD.First_Node, Entry_Element.first);
- FG.Make_Edge(Entry_Element.last, MD.Last_Node);
-
- end Entry_Call;
-
-
- procedure Accept_Alternative is
-
- --| Overview
- --| accept_alternative ::=
- --| accept_statement [sequence_of_statements]
-
- Accept_Element : MD.McCabe_Stack_Element;
- Seq_Element : MD.McCabe_Stack_Element;
-
- begin
- Backup_Thru_Stack(Accept_Element, Accept_Stmt);
- Backup_Thru_Stack(Seq_Element, Bracket_Sequence);
-
- MD.First_Node := Accept_Element.first;
- MD.Last_Node := Seq_Element.last;
-
- FG.Make_Edge(Accept_Element.last, Seq_Element.first);
-
- end Accept_Alternative;
-
-
-
- procedure Elsif_or_OR_Statement(
- List_Part: GrammarSymbolRange;
- Seq_Part: GrammarSymbolRange
- ) is
-
- --| Overview
- --| {ELSIF__condition__THEN__sequence_of_statements} ::=
- --| empty
- --|
- --| | {ELSIF__condition__THEN__sequence_of_statements}
- --| ELSIF__condition__THEN sequence_of_statements
- --|
- --| {OR__select_alternative} ::=
- --| empty
- --| | {OR__select_alternative} OR select_alternative
-
- Seq_Element : MD.McCabe_Stack_Element;
- List_Element : MD.McCabe_Stack_Element;
- End_Node : MD.Node_Type := NULL;
- Conditional_Node : MD.Node_Type := NULL;
-
- begin
-
- Backup_Thru_Stack(Seq_Element, Seq_Part);
- Backup_Thru_Stack(List_Element, List_Part);
-
- Conditional_Statement(Seq_Element,Conditional_Node, End_Node);
-
- if List_Element.first /= NULL then
-
- Conditional_Statement_List(List_Element, Conditional_Node);
-
- else
-
- MD.First_Node := Conditional_Node;
- MD.Last_Node := End_Node;
-
- end if;
-
- end Elsif_or_OR_Statement;
-
-
-
- procedure Conditional_Stmt_Alternative is
-
- --| Overview
- --| case_statement_alternative ::=
- --| WHEN_choice_=> sequence_of_statements
- --|
- --| exception_handler ::=
- --| WHEN_exception_choice_=>
- --| sequence_of_statements
-
-
- Seq_Element : MD.McCabe_Stack_Element;
- End_Node : MD.Node_Type := NULL;
- Conditional_Node : MD.Node_Type := NULL;
-
- begin
-
- Backup_Thru_Stack(Seq_Element, Seq_of_Stmt);
-
- Conditional_Statement(Seq_Element,Conditional_Node, End_Node);
-
- MD.First_Node := Conditional_Node;
- MD.Last_Node := End_Node;
-
- end Conditional_Stmt_Alternative;
-
-
-
- procedure Conditional_Stmt_Alternative_List(
- Alternate_Kind: GrammarSymbolRange;
- List_Kind: GrammarSymbolRange
- ) is
-
- --| Overview
- --| {case_statement_alternative} ::=
- --| | {case_statement_alternative} case_statement_alternative
- --|
- --| exception_handler_list ::=
- --| exception_handler
- --| | exception_handler_list exception_handler
-
- Alternate : MD.McCabe_Stack_Element;
- Alternate_List : MD.McCabe_Stack_Element;
-
- begin
-
- Backup_Thru_Stack(Alternate, Alternate_Kind);
- Backup_Thru_Stack(Alternate_List, List_Kind);
-
- if Alternate_List.first /= NULL then
-
- Conditional_Statement_List(Alternate_List, Alternate.first);
-
- else
-
- MD.First_Node := Alternate.first;
- MD.Last_Node := Alternate.last;
-
- end if;
-
- end Conditional_Stmt_Alternative_List;
-
-
- procedure Conditional_End (
- List_Part: GrammarSymbolRange := Elsif_Part;
- Seq_Part: GrammarSymbolRange := Seq_of_Stmt
- ) is
-
- --| Overview
- --| End If
- --| if_statement ::=
- --| IF condition__THEN sequence_of_statements
- --| {ELSIF__condition__THEN__sequence_of_statements}
- --| [ELSE__sequence_of_statements] END IF ;
- --|
- --| End Select
- --| selective_wait ::=
- --| SELECT_token select_alternative {OR__select_alternative}
- --| [ELSE__sequence_of_statements] END SELECT ;
-
-
- --| Algorithm
- --|+
- --| Starting from the parse stack element for the IF (or select)
- --| token, loop through the stack. If the grammar type of the current element
- --| is a sequence of statements then make an edge from the top node to the
- --| first node in the sequence. Make an end node and add an edge from the
- --| last node in the sequence to this node. The last value of the IF
- --| (select) statement is this node.
- --| If the grammar type is an elsif ( when condition, or select_alternate)
- --| then make an edge from the top node to the first node of this production.
- --| The top node is then set to be this first node. Make a new node, make an
- --| edge from this node to the end node. This node then becomes the end node.
- --| Make an edge from the last node in the production to this new end node.
- --| If the grammar type is an else clause then make an edge from the top
- --| node to the first node in the production, and the top node becomes the
- --| last node in this production.
- --|-
-
- Top, Bottom, N : Node_Type;
- Seq_Stmts : MD.McCabe_Stack_Element;
- List_Element : MD.McCabe_Stack_Element;
- Else_Pt_Element : MD.McCabe_Stack_Element;
-
- begin
-
- Backup_Thru_Stack(Seq_Stmts, Seq_Part);
- Backup_Thru_Stack(List_Element, List_Part);
- Backup_Thru_Stack(Else_Pt_Element, Else_Part);
-
- MD.First_Node := FG.Make_Node;
- MD.Last_Node := FG.Make_Node;
-
- if Seq_Stmts.first /= NULL then
-
- FG.Make_Edge(MD.First_Node, Seq_Stmts.first, MD.Right);
- FG.Make_Edge(Seq_Stmts.last, MD.Last_Node);
-
- end if;
-
- if List_Element.first /= NULL then
-
- FG.Make_Edge(MD.First_Node, List_Element.first);
- FG.Make_Edge(List_Element.last, MD.Last_Node);
-
- Top := FG.Find_Top_Node(List_Element.first);
- Bottom := Top.End_Node;
-
- if Else_Pt_Element.first /= NULL then
- FG.Make_Edge(Top, Else_Pt_Element.first);
- FG.Make_Edge(Else_Pt_Element.last, Bottom);
- else
- FG.Make_Edge(Top, Bottom);
- end if;
-
- else
-
- if Else_Pt_Element.first /= NULL then
- FG.Make_Edge(MD.First_Node, Else_Pt_Element.first);
- FG.Make_Edge(Else_Pt_Element.last, MD.Last_Node);
- else
- FG.Make_Edge(MD.First_Node, MD.Last_Node);
- end if;
-
- end if;
-
- end Conditional_End;
-
-
- procedure Exception_End is
-
- --| Overview
- --| begin_end_block ::=
- --| | BEGIN sequence_of_statements
- --| EXCEPTION {pragma_alt}__exception_handler_list END
-
- Top, Bottom : MD.Node_Type;
- Raise_Node : MD.Node_Type;
- Seq_Element : MD.McCabe_Stack_Element;
- Except_Hand_Element : MD.McCabe_Stack_Element;
-
- begin
-
- Backup_Thru_Stack(Except_Hand_Element, Pragma_Except_Hand);
- Backup_Thru_Stack(Seq_Element, Seq_of_Stmt);
-
- Top := FG.Find_Top_Node(Except_Hand_Element.first);
- Bottom := Top.End_Node;
- FG.Make_Edge(Top, Bottom);
- FG.Make_Edge(Seq_Element.last, Except_Hand_Element.first);
-
- MD.First_Node := Seq_Element.first;
- MD.Last_Node := Except_Hand_Element.last;
-
- end Exception_End;
-
-
- ----------------------------------------------------------------------------
- -- Procedure for cleaning up at end of a subprogram
- ----------------------------------------------------------------------------
-
- procedure Clean_Up_Subprogram is
-
- --| Overview
- --|
- --| subprogram_body ::=
- --| subprogram_specification IS
- --| declarative_part__begin_end_block
- --| [end_designator] ;
- --|
- --| package_body ::=
- --| | package_body_indicator
- --| declarative_part__begin_end_block
- --| [identifier] ;
- --|
- --| task_body ::=
- --| task_body_indicator
- --| declarative_part__begin_end_block
- --| [identifier] ;
-
-
- Return_Node : MD.Node_Type;
- N : MD.Node_Type;
-
- begin
-
- Propagate_Up(Dec_Begin_End);
-
- end Clean_Up_Subprogram;
-
- ----------------------------------------------------------------------------
- -- Procedures for propagating information up as reductions are done
- ----------------------------------------------------------------------------
-
-
- procedure Make_Holding_Node is
-
- --| Overview
- --| [sequence_of_statements] ::=
- --| {pragma_stm}
- --|
- --| {statement} ::=
- --| {pragma_stm}
-
- begin
- MD.First_Node := FG.Make_Node;
- MD.Last_Node := MD.First_Node;
- end Make_Holding_Node;
-
-
-
- procedure Propagate_Up(Grammar_Kind : GrammarSymbolRange) is
-
- --| Overview
- --| [ELSE__sequence_of_statements] ::=
- --| | ELSE__sequence_of_statements
- --|
- --| ELSE__sequence_of_statements ::=
- --| ELSE sequence_of_statements
- --|
- --| [sequence_of_statements] ::=
- --| {pragma_stm}
- --| | sequence_of_statements
- --|
- --| declarative_part__begin_end_block ::=
- --| declarative_part begin_end_block
- --|
- --| accept_statement ::=
- --| ACCEPT identifier [(expression)][formal_part] DO_token
- --| sequence_of_statements END [identifier] ;
- --|
- --| begin_end_block ::=
- --| BEGIN sequence_of_statements END
-
- --| Algorithm
- --|+
- --| Read back through the parse stack until the enclosed
- --| Grammar_Kind is found. The first and last nodes
- --| of the sequence become the first and last nodes of the
- --| new element on the parse stack.
- --|-
-
- Stack_Element : MD.McCabe_Stack_Element;
-
- begin
-
- Backup_Thru_Stack(Stack_Element, Grammar_Kind);
-
- MD.First_Node := Stack_element.first;
- MD.Last_Node := Stack_Element.last;
-
- end Propagate_Up;
-
-
- -------------------------------------------------------------------------
- --| procedures for keeping track of current subprogram
- -------------------------------------------------------------------------
-
- procedure Init_Subprogram_Element is
- --| Used to initialize an element in the Subprogram Stack
- begin
-
- Subprogram_Info.Unit_Name := S_Identifier;
- Subprogram_Info.Node_Count := 0; --| number of nodes of the graph
- Subprogram_Info.Edge_Count := 0; --| number of edges on the graph
-
- end Init_Subprogram_Element;
-
- procedure Open_Subprogram is
- --| Pushes a new element on the subprogram stack and
- --| initializes it.
- begin
-
- ST.Push(Subunit, Subprogram_Info); --| push element on stack
- Init_Subprogram_Element; --| initialize new element
-
- STL.Push(Label_Stack,Curr_Label_Tree);
- Curr_Label_Tree := LT.Create;
-
- end Open_Subprogram;
-
- procedure Report_and_Close_Subprogram is
- begin
-
- Report_Complexities;
- ST.Pop(Subunit, Subprogram_Info);
-
- STL.Pop(Label_Stack,Curr_Label_Tree);
-
- exception
- when ST.Empty_Stack =>
- raise Empty_Stack;
-
- when STL.Empty_Stack =>
- raise Empty_Stack;
-
- end Report_and_Close_Subprogram;
-
-
- procedure Close_Subprogram is
-
- begin
-
- ST.Pop(Subunit, Subprogram_Info);
- STL.Pop(Label_Stack,Curr_Label_Tree);
- exception
- when ST.Empty_Stack =>
- raise Empty_Stack;
-
- when STL.Empty_Stack =>
- raise Empty_Stack;
-
- end Close_Subprogram;
-
- ----------------------------------------------------------------------------
- -- Bodies of Local Subprograms
- ----------------------------------------------------------------------------
-
- procedure Backup_Thru_Stack(
- Stack_Element: in out PD.ParseStackElement;
- Token: in GrammarSymbolRange
- ) is
-
- begin
-
- for i in 1..(mcc_StateStack.Length - 1) loop
- Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
- if Stack_Element.gram_sym_val = Token then
- Return;
- end if;
- end loop;
-
- end Backup_Thru_Stack;
-
-
- procedure Backup_Thru_Stack(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Token: in GrammarSymbolRange
- ) is
-
- Parse_Stack_Element : PD.ParseStackElement;
-
- begin
-
- for i in 1..(mcc_StateStack.Length - 1) loop
-
- Parse_Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
-
- if Parse_Stack_Element.gram_sym_val = Token then
- Stack_Element := McCabe_Stack.Get_Stack_Element(i);
- Return;
- end if;
-
- end loop;
-
- end Backup_Thru_Stack;
-
-
- procedure Backup_Thru_Stack(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Token: in GrammarSymbolRange;
- Position: out StateParseStacksIndex
- )
- is
- Parse_Stack_Element : PD.ParseStackElement;
-
- begin
-
- for i in 1..(mcc_StateStack.Length - 1) loop
-
- Parse_Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
-
- if Parse_Stack_Element.gram_sym_val = Token then
- Stack_Element := McCabe_Stack.Get_Stack_Element(i);
- Position := i;
- Return;
- end if;
-
- end loop;
-
- end Backup_Thru_Stack;
-
- procedure Backup_Thru_Stack_Twice(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Token: in GrammarSymbolRange
- )
- is
- Parse_Stack_Element : PD.ParseStackElement;
- First_Time : boolean := TRUE;
-
- begin
-
- for i in 1..(mcc_StateStack.Length - 1) loop
-
- Parse_Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
-
- if Parse_Stack_Element.gram_sym_val = Token then
-
- if not First_Time then
- Stack_Element := McCabe_Stack.Get_Stack_Element(i);
- Return;
- else
- First_Time := False;
- end if;
-
- end if;
-
- end loop;
-
- end Backup_Thru_Stack_Twice;
-
-
- function Get_Id(
- Stack_Element : PD.ParseStackElement
- ) return PD.Source_Text
- is
- Index : Natural;
- Text : PD.Source_Text;
- Text_String : constant String
- := PD.Get_Source_Text(Stack_Element.lexed_token.text);
- begin
-
- Index := 0;
-
- for i in 1..Text_String'Length loop
- if Text_String(i) = '.' then
- Index := i;
- end if;
- end loop;
-
- PD.Put_Source_Text(Text_String((index + 1)..Text_String'Length), Text);
- Return Text;
-
- end Get_Id;
-
-
- procedure Exit_Statement(
- Stack_Element: in out MD.McCabe_Stack_Element;
- Conditional: in boolean;
- Position: in PD.StateParseStacksIndex
- ) is
-
- --| This procedure is called by Labeled_Exit, and UnLabeled_Exit
-
- --| Algorithm
- --|+
- --| The Stack_Element parameter contains the ParseStackElement
- --| which refers to the enclosing loop (or select) statement. If
- --| the first and last values are null, new nodes are made. A node
- --| is made to hold the exit (or terminate) statement itself. An
- --| edge is made from the exit node to the last node for the loop
- --| statement, and if the exit is conditional (ie. exit when), then
- --| an edge is also made to the first node of the loop statement.
- --|-
-
- begin
-
- MD.First_Node := FG.Make_Node;
- MD.Last_Node := MD.First_Node;
-
- if Stack_Element.first = NULL then
-
- Stack_Element.first := FG.Make_Node;
- Stack_Element.last := FG.Make_Node;
- McCabe_Stack.Put_Element_Value(Stack_Element.first,
- Stack_Element.last,
- Position);
-
- end if;
-
- FG.Make_Edge(MD.Last_Node, Stack_Element.last);
-
- if not Conditional then
- MD.Last_Node := NULL;
- end if;
-
- end Exit_Statement;
-
-
- procedure Conditional_Statement(
- Seq_Element: MD.McCabe_Stack_Element;
- Conditional_Node: in out MD.Node_Type;
- End_Node: in out MD.Node_Type
- ) is
-
- --| Overview
- --| {ELSIF__condition__THEN__sequence_of_statements} ::=
- --| empty
- --|
- --| | {ELSIF__condition__THEN__sequence_of_statements}
- --| ELSIF__condition__THEN sequence_of_statements
- --|
- --| case_statement_alternative ::=
- --| WHEN_choice_=> sequence_of_statements
- --|
- --|? select_alternative ::=
- --|? {pragma_stm} WHEN condition => selective_wait_alternative
- --|? | {pragma_stm} selective_wait_alternative
- --|
- --|? {OR__select_alternative} ::=
- --|? empty
- --|? | {OR__select_alternative} OR select_alternative
-
- --| Algorithm
- --|+
- --| Make a node for the conditional, and make an edge to the following
- --| sequence of statements. Then set the last value of the conditional
- --| stack element to the last value of the sequence of statements.
- --|-
-
- begin
-
-
- Conditional_Node := FG.Make_Node;
- End_Node := FG.Make_Node;
- Conditional_Node.End_Node := End_Node;
- FG.Make_Edge(Conditional_Node, Seq_Element.first, MD.Right);
- FG.Make_Edge(Seq_Element.last, End_Node);
-
- end Conditional_Statement;
-
-
- procedure Conditional_Statement_List(
- List_Element: MD.McCabe_Stack_Element;
- Conditional_Node: MD.Node_Type
- ) is
-
- --| Overview
- --| {ELSIF__condition__THEN__sequence_of_statements} ::=
- --| empty
- --|
- --| | {ELSIF__condition__THEN__sequence_of_statements}
- --| ELSIF__condition__THEN sequence_of_statements
-
- Top : MD.Node_Type;
- Bottom : MD.Node_Type;
-
- begin
-
- MD.First_Node := List_Element.first;
- MD.Last_Node := List_Element.last;
- Top := FG.Find_Top_Node(MD.First_Node);
- Bottom := Top.End_Node;
- FG.Make_Edge(Top, Conditional_Node);
- FG.Make_Edge(Conditional_Node.End_Node, Bottom);
-
- end Conditional_Statement_List;
-
- --------------------------------------------------------------------------
- -- Procedures providing operations for producing reports
- --------------------------------------------------------------------------
-
- procedure Put_Fully_Qualified_Name is
-
- stk: ST.Stack;
- x: Integer := 0;
-
- begin
- stk := ST.Copy(Subunit);
- declare
- Names: array (1 .. ST.Size(stk)) of Subprogram_ItemType;
- begin
- while not ST.Is_Empty(stk) loop
- X := x + 1;
- ST.Pop(stk, Names(x));
- end loop;
- ST.Destroy(stk);
-
- for i in reverse 1 .. x - 1 loop
- PO.Put(PD.Get_Source_Text(Names(i).Unit_Name));
- PO.Put('.');
- end loop;
- end;
- PO.Put(PD.Get_Source_Text(Subprogram_Info.Unit_Name));
-
- end Put_Fully_Qualified_Name;
-
-
-
- procedure Report_Complexities is
- --| determines cyclomatic and essential complexities and produces a report
-
- Cyclomatic_Complexity : INTEGER; --| value of cyclomatic complexity
- Int_String : String(1..5);
-
- begin
-
- Total_Edges := Total_Edges + Subprogram_Info.Edge_Count;
- Total_Nodes := Total_Nodes + Subprogram_Info.Node_Count;
- Total_Units := Total_Units + 1;
-
- Cyclomatic_Complexity := -- determine cyclomatic complexity
- Subprogram_Info.Edge_Count - Subprogram_Info.Node_Count + 2;
-
- if Cyclomatic_Complexity < 1 then
- PO.Space(7);
- PO.Put("unreachable code");
- PO.Space(8);
- else
- PO.Space(5);
- Int_IO.Put(Int_String, Cyclomatic_Complexity);
- PO.Put(Int_String);
-
- PO.Space(9);
- Int_IO.Put(Int_String, Subprogram_Info.Edge_Count);
- PO.Put(Int_String);
-
- PO.Space(2);
- Int_IO.Put(Int_String, Subprogram_Info.Node_Count);
- PO.Put(Int_String);
-
- end if;
-
- If Cyclomatic_Complexity > MD.Max_Complexity then
- PO.Put(" ***");
- else
- PO.Space(8);
- end if;
-
- Put_Fully_Qualified_Name; -- put subprogram name
- PO.Skip_Line(2);
-
- end Report_Complexities;
-
-
- procedure Report_Total_Complexity is
- --| determines cyclomatic and essential complexities and produces a report
-
- Cyclomatic_Complexity : INTEGER; --| value of cyclomatic complexity
- Int_String : String(1..5);
-
- begin
-
- Cyclomatic_Complexity := -- determine cyclomatic complexity
- Total_Edges - Total_Nodes + 2*Total_Units ;
-
- PO.Space(5);
- Int_IO.Put(Int_String, Cyclomatic_Complexity);
- PO.Put(Int_String);
- PO.Space(9);
- Int_IO.Put(Int_String, Total_Edges);
- PO.Put(Int_String);
- PO.Space(2);
- Int_IO.Put(Int_String, Total_Nodes);
- PO.Put(Int_String);
- PO.Space(8);
- PO.Put("Total for");
- PO.Put(integer'Image(Total_Units) & " program units");
-
- end Report_Total_Complexity;
-
- end Statements_Pkg;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccstk.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- -- $Source: /nosc/work/parser/RCS/ParseStk.bdy,v $
- -- $Revision: 4.0 $ -- $Date: 85/02/19 11:34:13 $ -- $Author: carol $
-
- ----------------------------------------------------------------------
-
- with mcc_ParseTables; -- state tables generated by parser
- -- generator
- use mcc_ParseTables;
-
- with mcc_Grammar_Constants;
- use mcc_Grammar_Constants; -- to have visibility on operations
- -- on type ParserInteger declared there.
-
- with mcc_StateStack;
-
- package body McCabe_Stack is
-
- --| Overview
- --|
- --| The data structure is implemented as an array.
- --|
-
- ------------------------------------------------------------------
- -- Declarations Global to Package Body ParseStack
- ------------------------------------------------------------------
-
- Index : PD.StateParseStacksIndex := 0;
- --| top element in stack.
-
- Space : array (PD.StateParseStacksRange) of MD.McCabe_Stack_Element;
- --| Storage used to hold stack elements
-
- ------------------------------------------------------------------
- -- Subprogram Bodies Global to Package ParseStack
- -- (declared in package specification).
- ------------------------------------------------------------------
-
- procedure Push(Element : in MD.McCabe_Stack_Element) is
-
- begin
-
- if (Index >= PD.StateParseStacksRange'Last) then
- raise OverFlow;
- end if;
-
- Index := Index + 1;
- Space (Index) := Element;
-
- end Push;
-
- ------------------------------------------------------------------
-
- procedure Pop is
-
- begin
-
- if (Index < PD.StateParseStacksRange'First) then
- raise UnderFlow;
- end if;
-
- Index := Index - 1;
-
- end Pop;
-
- ------------------------------------------------------------------
-
- function Length return PD.StateParseStacksIndex is
-
- begin
-
- return Index;
-
- end Length;
-
- ------------------------------------------------------------------
-
- procedure Initialize --| Re-initializes the state to have no
- --| elements.
- is
- begin
-
- Index := 0;
-
- end Initialize;
-
- --| Effects
- --|
- --| Resets the top of the stack to the first element.
-
-
- ----------------------------------------------------------------------
- procedure Reduce(TopN : in PD.StateParseStacksIndex) is
-
- begin
- if (TopN > Index) then
- raise UnderFlow;
- end if;
-
- Index := Index - TopN;
-
- end Reduce; -- procedure
-
- ------------------------------------------------------------------
- function Get_Stack_Element(position : PD.StateParseStacksIndex)
- return MD.McCabe_Stack_Element is
-
- begin
-
- return Space(mcc_StateStack.Length - Position);
-
- end Get_Stack_Element;
-
- ------------------------------------------------------------------
-
- procedure Put_Element_Value(First_Node : MD.Node_Type;
- Last_Node : MD.Node_Type;
- position : PD.StateParseStacksIndex
- ) is
-
- begin
-
- Space(mcc_StateStack.Length - position).first := First_Node;
- Space(mcc_StateStack.Length - position).last := Last_Node;
-
- end Put_Element_Value;
-
-
- ------------------------------------------------------------------
-
- end McCabe_Stack;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --flowgraph.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- package body Flow_Graph_Pkg is
-
- complaint : exception;
-
-
- --------------------------------------------------------------------------
- -- Procedures providing operations for producing graph
- --------------------------------------------------------------------------
-
- procedure Make_Edge
- (From_Node : MD.Node_Type;
- To_Node : MD.Node_Type;
- Which_Out : MD.Edges_Out_Type := MD.Left) is
-
- --| Algorithm
- --|+
- --| Creates an edge between two nodes on the graph, and
- --| increments the edge count.
-
- begin
-
- if (From_Node = NULL) or (To_Node = NULL) then
- NULL;
- else
-
- Subprogram_Info.Edge_Count := Subprogram_Info.Edge_Count + 1;
- --| increment edge count
- From_Node.Edges_Out(Which_Out) := To_Node; --| add to edges out
- MD.Node_List.Attach(To_Node,From_Node.Edges_In); -- add to edges in
-
- end if;
-
-
- end Make_Edge;
-
-
-
- function Make_Node return MD.Node_Type is
-
- N : MD.Node_Type;
-
- begin
-
- N := new MD.Node_Record;
- N.Edges_In := MD.Node_List.Create;
- Subprogram_Info.Node_Count := Subprogram_Info.Node_Count + 1;
- N.Node_Number := Subprogram_Info.Node_Count;
- return N;
-
- end Make_Node;
-
- ----------------------------------------------------------------------------
- -- subprograms providing operations for reading flow graph
- ----------------------------------------------------------------------------
-
- function Find_Top_Node(N : MD.Node_Type) return MD.Node_Type is
-
- -- this reads thru a given graph for the first node with
- -- no false case attached
-
- Top_Node : MD.Node_Type := N;
-
- begin
-
- loop
- if Top_Node.Edges_Out(left) = NULL then
- return Top_Node;
- else
- Top_Node := Top_Node.Edges_Out(left);
- end if;
- end loop;
-
- end Find_Top_Node;
-
-
-
- end Flow_Graph_Pkg;
-
-
-
-
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --mccabe.ada
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --------- SPEC ----------------------------------------------------------
-
- function MCCABE return INTEGER;
-
- --------- BODY ----------------------------------------------------------
-
- with Text_Io;
- with mcc_ParserDeclarations;
- with Standard_Interface; use Standard_Interface;
- with Paginated_Output;
- with String_Pkg;
- with Host_Lib;
- -- with Lex;
- with mcc_Parser; use mcc_Parser;
- with Statements_Pkg; use Statements_Pkg;
- with McCabe_Definitions;
-
- function MCCABE return INTEGER is
-
- package PO renames Paginated_Output;
- package SP renames String_Pkg;
- package MD renames McCabe_Definitions;
-
- package File is new String_Argument( -- instantiate with
- String_Type_Name => "file_name"); -- name : file_name
-
- package Max is new Integer_Argument( -- instantiate with
- Integer_Type => MD.Max_Value, -- max unflagged
- Integer_Type_Name => "max_value"); -- integer
-
-
- Mc_Cabe : Process_Handle; -- handle to process structure
- Source_File : SP.String_Type; -- string type
- Output_File : SP.String_Type; -- string type
-
- begin
-
- Set_Tool_Identifier(Identifier => "1.1");
-
- Define_Process( -- define this process
- Name => "mccabe", -- name of the process
- Help => "Calculate the McCabe complexity measure.",
- Proc => Mc_Cabe); -- handle to be returned
-
- File.Define_Argument( -- define the first argument
- Proc => Mc_Cabe, -- process
- Name => "source_file", -- name of the argument
- Help => "Input file name.");
-
- File.Define_Argument( -- define the second argument
- Proc => Mc_Cabe, -- process
- Name => "output_file", -- name of the argument
- Default => "", -- default value
- Help => "Name of the report file (default is standard output)");
-
- Max.Define_Argument( -- define the last argument
- Proc => Mc_Cabe, -- process
- Name => "max_complexity", -- name of the argument
- Default => 20, -- default limit value
- Help => "Greatest complexity not flagged in output listing");
- Max.Append_Argument_Help( -- append help to this argument
- Proc => Mc_Cabe, -- process
- Name => "max_complexity", -- name of the argument
- Help => "(range: 1 .. 99, default: 20).");
-
- Parse_Line(Mc_Cabe); -- parse the command line
-
- Source_File := File.Get_Argument( -- get the first argument
- Proc => Mc_Cabe,
- Name => "source_file");
-
- Output_File := File.Get_Argument( -- get the second argument
- Proc => Mc_Cabe,
- Name => "output_file");
-
- MD.Max_Complexity := Max.Get_Argument( -- get the last argument
- Proc => Mc_Cabe,
- Name => "max_complexity");
-
- Define_Output( -- define paginated output
- Proc => Mc_Cabe, -- process
- File_Name => SP.Value(Output_File), -- file name
- Header_Size => 5
- );
-
- Define_Header(
- Line => 2,
- Text => "MCCABE CYCLOMATIC COMPLEXITY: SOURCE_FILE "
- & SP.Value (Source_File)
- & " - with MAX_COMPLEXITY "
- & integer'image (MD.Max_Complexity)
- );
-
- Define_Header(
- Line => 4,
- Text => " COMPLEXITY NUMBER OF"
- );
-
- Define_Header(
- Line => 5,
- Text => " CYCLOMATIC EDGES NODES SUBPROGRAM NAME"
- );
-
- declare
- -- determines cyclomatic and essential complexities and
- -- produces a report
-
- Units : mcc_ParserDeclarations.ParseStackElement;
- Input_File : Text_io.File_Type;
-
- begin
-
-
- -- initialize global variables
-
- Label_Stack := STL.Create;
- Subunit := ST.Create;
-
- -- run parser
-
- -- Lex.Initilization;
-
- Text_io.Open(Input_File, Text_io.In_File, SP.Value(Source_File));
- Text_io.Set_Input(Input_File);
-
- Units := mcc_Parser.Parse;
- Report_Total_Complexity;
-
- end;
-
-
- PO.Close_Paginated_File;
-
- return HOST_LIB.RETURN_CODE(HOST_LIB.SUCCESS); -- Return successfully
-
- exception
-
- when Process_Help =>
- --
- -- Help message was printed
- --
- return Host_Lib.Return_Code(Host_Lib.INFORMATION);
-
- when Abort_Process =>
- --
- -- Parse error
- --
- return Host_Lib.Return_Code(Host_Lib.ERROR);
-
- when Paginated_Output.File_Already_Open =>
- --
- -- Process output file error
- --
- return Host_Lib.Return_Code(Host_Lib.ERROR);
-
- when Paginated_Output.File_Error =>
- --
- -- Process output file error
- --
- return Host_Lib.Return_Code(Host_Lib.ERROR);
-
- when TEXT_IO.STATUS_ERROR | TEXT_IO.NAME_ERROR | TEXT_IO.USE_ERROR =>
- HOST_LIB.SET_ERROR;
- TEXT_IO.PUT_LINE("Error opening input file " &
- SP.Value(Source_File));
- return Host_Lib.Return_Code(Host_Lib.ERROR);
-
- end MCCABE;
-