home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-05-03 | 384.0 KB | 9,251 lines |
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsgrmcon.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- package RQS_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 RQS_Grammar_Constants;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsptbls.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with Host_Dependencies; -- host dependent constants for the compiler.
- with RQS_Grammar_Constants; -- constants generated by parser generator
- use RQS_Grammar_Constants;
-
- package RQS_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 RQS_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 RQS_ParseTables;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqslexidv.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with RQS_ParseTables; -- tables from parser generator
-
- package RQS_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 RQS_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 RQS_Lex_Identifier_Token_Value;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqspdecls.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- -----------------------------------------------------------------------
-
- with Host_Dependencies; -- host dependent constants
- with RQS_ParseTables; -- constants and state tables
- use RQS_ParseTables;
-
- with RQS_Grammar_Constants;
- use RQS_Grammar_Constants;
-
- package RQS_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 RQS_ParseTables;
- package GC renames RQS_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 RQS_ParserDeclarations;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqslex.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_ParserDeclarations; -- declarations for the Parser
- with Host_Dependencies; -- Host dependents constants
-
- package RQS_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 RQS_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 RQS_Lex;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqslex.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with Host_Dependencies; -- Host dependents constants
- with RQS_Lex_Identifier_Token_Value;
- -- contains data structures and subprogram
- -- to distinguish identifiers from
- -- reserved words
- with Lexical_Error_Message; -- outputs error messages.
- with RQS_ParseTables; -- tables from parser generator
- use RQS_ParseTables;
- with RQS_Grammar_Constants; -- constants from the parser generator
- use RQS_Grammar_Constants;
- with TEXT_IO;
-
-
- package body RQS_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 RQS_ParserDeclarations;
- package LEM renames Lexical_Error_Message;
- package PT renames RQS_ParseTables;
- package GC renames RQS_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
- RQS_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 RQS_Lex;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqswritel.sub
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ----------------------------------------------------------------------
-
- separate (RQS_Lex)
- procedure Write_Line is
- begin
- null;
- end Write_Line;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsptbls.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --+ PTBLS.BDY +--
-
- package body RQS_ParseTables is
- ----------------------------------------------------------------------
- -- The rest of the constants used to define the Parse Tables
- ----------------------------------------------------------------------
-
- DefaultValue : constant := 1 ; -- default for aggregates.
-
- ActionTableOneLength : constant GC.ParserInteger :=
- 8286 ;
- --| Length (number of entries) in map ActionTableOne.
- subtype ActionTableOneRange is GC.ParserInteger
- range 1..ActionTableOneLength;
-
- ActionTableTwoLength : constant GC.ParserInteger :=
- 8286 ;
- --| Length (number of entries) in map ActionTableTwo.
- subtype ActionTableTwoRange is GC.ParserInteger
- range 1..ActionTableTwoLength;
-
- DefaultMapLength : constant GC.ParserInteger :=
- 942 ;
- --| Length (number of entries) in map Defaults.
- subtype DefaultMapRange is GC.ParserInteger range 1..DefaultMapLength;
-
- FollowMapLength : constant GC.ParserInteger :=
- 219 ;
- --| Length (number of entries) in the FollowMap.
-
- GrammarSymbolCountPlusOne : constant GC.ParserInteger :=
- 316 ;
- --| 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, 3074, 3075, 3122
- , 3123, 3152, 3153, 3161, 3162, 3173, 3174, 3199, 3200, 3227
- , 3228, 3245, 3246, 3257, 3258, 3271, 3272, 3286, 3287, 3319
- , 3320, 3355, 3356, 3374, 3375, 3398, 3399, 3421, 3422, 3447
- , 3448, 3457, 3458, 3461, 3462, 3483, 3484, 3499, 3500, 3520
- , 3521, 3542, 3543, 3564, 3565, 3580, 3581, 3598, 3599, 3617
- , 3618, 3640, 3641, 3659, 3660, 3690, 3691, 3707, 3708, 3734
- , 3735, 3748, 3749, 3770, 3771, 3786, 3787, 3804, 3805, 3828
- , 3829, 3854, 3855, 3872, 3873, 3889, 3890, 3910, 3911, 3934
- , 3935, 3941, 3942, 3959, 3960, 3972, 3973, 3988, 3989, 4002
- , 4003, 4027, 4028, 4034, 4035, 4059, 4060, 4077, 4078, 4088
- , 4089, 4104, 4105, 4123, 4124, 4140, 4141, 4161, 4162, 4180
- , 4181, 4211, 4212, 4240, 4241, 4263, 4264, 4281, 4282, 4300
- , 4301, 4322, 4323, 4374, 4375, 4398, 4399, 4422, 4423, 4435
- , 4436, 4468, 4469, 4482, 4483, 4510, 4511, 4528, 4529, 4544
- , 4545, 4560, 4561, 4573, 4574, 4586, 4587, 4608, 4609, 4623
- ) ;
-
- 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'
- ,'_','_','s','e','q','u','e','n','c','e'
- ,'_','o','f','_','s','t','a','t','e','m'
- ,'e','n','t','s','{','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','{'
- ,'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','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','}','e','x','c','e','p','t','i'
- ,'o','n','_','h','a','n','d','l','e','r'
- ,'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','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, 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, 244, 244, 234, 234, 248, 248, 248
- , 250, 249, 249, 235, 235, 224, 224, 224, 224, 225
- , 225, 226, 106, 253, 253, 253, 253, 256, 256, 254
- , 257, 257, 258, 258, 258, 173, 231, 107, 260, 260
- , 261, 174, 174, 262, 121, 121, 121, 121, 169, 112
- , 112, 112, 112, 108, 264, 264, 264, 264, 175, 267
- , 269, 236, 236, 227, 237, 237, 237, 271, 274, 274
- , 276, 276, 276, 277, 278, 279, 272, 273, 228, 98
- , 283, 284, 284, 284, 286, 286, 286, 286, 286, 286
- , 286, 285, 290, 172, 172, 172, 287, 110, 293, 291
- , 291, 229, 229, 109, 294, 294, 295, 297, 297, 297
- , 297, 298, 298, 298, 298, 298, 298, 298, 298, 111
- , 111, 111, 111, 111, 111, 300, 303, 303, 304, 168
- , 168, 168, 168, 305, 306, 308, 308, 311, 310, 307
- , 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, 312, 312, 312, 188, 188, 189
- , 190, 190, 313, 313, 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, 239
- , 240, 240, 241, 241, 245, 245, 246, 246, 247, 247
- , 252, 252, 251, 314, 314, 255, 255, 259, 259, 259
- , 263, 263, 265, 265, 266, 266, 268, 268, 268, 268
- , 270, 270, 270, 270, 275, 275, 280, 280, 281, 281
- , 282, 282, 288, 288, 315, 315, 289, 289, 292, 292
- , 296, 296, 299, 299, 299, 301, 301, 302, 302, 309
- , 309) ;
- --| 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, 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
- , 7, 1, 9, 5, 4, 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, 5, 1
- , 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, 3
- , 0, 5, 0, 2, 0, 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, 401, 644, 0, 0, 0, 0, 0, 0, 0
- , 0, 468, 0, 0, 469, 0, 0, 0, 0, 159
- , 0, 0, 515, 516, 0, 0, 102, 39, 40, 41
- , 0, 0, 42, 0, 0, 43, 0, 44, 517, 0
- , 0, 6917, 0, 6921, 621, 622, 0, 0, 34, 0
- , 519, 0, 217, 124, 6923, 6925, 122, 0, 0, 403
- , 404, 207, 208, 209, 210, 211, 942, 6927, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 521, 0, 0
- , 35, 36, 37, 0, 0, 0, 6929, 6931, 37, 6933
- , 6935, 101, 0, 0, 0, 376, 6937, 0, 0, 262
- , 0, 0, 127, 217, 0, 580, 0, 0, 0, 0
- , 6939, 6942, 6944, 41, 0, 0, 6946, 39, 6948, 6950
- , 37, 44, 6954, 6956, 0, 43, 0, 44, 6958, 0
- , 0, 523, 524, 525, 526, 6960, 528, 6962, 50, 51
- , 0, 530, 531, 6966, 35, 36, 6970, 0, 6972, 39
- , 6974, 6977, 6981, 37, 6984, 0, 0, 6986, 0, 44
- , 61, 62, 63, 64, 0, 65, 66, 67, 6988, 69
- , 0, 409, 70, 0, 102, 39, 6991, 41, 0, 0
- , 42, 102, 6993, 6996, 7000, 7002, 0, 42, 0, 104
- , 97, 0, 98, 102, 151, 40, 41, 242, 0, 0
- , 7004, 0, 0, 0, 468, 0, 0, 469, 0, 0
- , 169, 0, 106, 0, 0, 7006, 7008, 37, 0, 0
- , 0, 7010, 7013, 51, 677, 0, 654, 7015, 7018, 51
- , 0, 472, 7020, 52, 7023, 41, 109, 0, 110, 0
- , 0, 166, 55, 7027, 7029, 7032, 7036, 7040, 41, 65
- , 7044, 7046, 7051, 7053, 7055, 7057, 7059, 67, 7063, 7065
- , 7067, 51, 70, 0, 0, 7069, 0, 421, 0, 0
- , 475, 0, 99, 0, 7071, 56, 57, 7073, 59, 7075
- , 0, 0, 61, 62, 7077, 7079, 7083, 7086, 66, 67
- , 7089, 7091, 7093, 7095, 7097, 44, 0, 7099, 52, 0
- , 55, 56, 57, 58, 7101, 7103, 51, 112, 61, 7106
- , 63, 64, 0, 7108, 66, 7110, 7113, 7116, 7118, 0
- , 7120, 66, 67, 68, 69, 0, 0, 477, 0, 7123
- , 0, 0, 0, 0, 0, 0, 329, 0, 576, 0
- , 0, 0, 805, 49, 7125, 7127, 0, 0, 0, 827
- , 0, 0, 0, 0, 0, 300, 49, 7129, 7131, 7133
- , 7135, 0, 52, 0, 34, 0, 118, 119, 7137, 85
- , 167, 55, 56, 57, 58, 59, 60, 0, 0, 61
- , 62, 63, 64, 788, 65, 7139, 7141, 7143, 69, 0
- , 0, 70, 0, 0, 680, 7146, 7149, 7152, 7155, 0
- , 0, 52, 0, 7157, 0, 0, 0, 0, 0, 0
- , 55, 56, 57, 58, 7160, 7162, 0, 0, 61, 62
- , 63, 64, 0, 65, 66, 67, 7164, 7166, 40, 41
- , 70, 0, 42, 899, 629, 7168, 0, 44, 0, 0
- , 0, 0, 0, 683, 684, 7170, 686, 624, 0, 0
- , 0, 0, 0, 0, 699, 0, 168, 0, 0, 577
- , 0, 0, 493, 0, 16, 849, 0, 0, 0, 0
- , 0, 0, 0, 0, 121, 122, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 123, 0, 0, 0
- , 0, 0, 0, 0, 0, 357, 0, 838, 0, 243
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 151, 0, 0, 7173, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 358, 0, 49, 7175, 51
- , 655, 0, 776, 52, 0, 0, 0, 0, 0, 0
- , 744, 0, 0, 0, 0, 0, 761, 0, 0, 762
- , 61, 62, 63, 64, 0, 65, 66, 7177, 7179, 69
- , 35, 36, 7181, 0, 0, 0, 612, 0, 0, 454
- , 0, 0, 0, 0, 0, 0, 0, 217, 316, 0
- , 0, 912, 0, 96, 0, 0, 0, 0, 4, 5
- , 7183, 7185, 7187, 7189, 8, 0, 42, 0, 0, 43
- , 0, 44, 0, 0, 0, 0, 0, 807, 0, 0
- , 0, 7191, 595, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 700, 0, 0
- , 0, 0, 7193, 0, 0, 0, 0, 0, 0, 0
- , 920, 0, 0, 0, 0, 301, 808, 0, 701, 605
- , 0, 302, 7195, 262, 0, 814, 0, 0, 723, 0
- , 34, 631, 7197, 126, 7199, 0, 73, 0, 0, 127
- , 0, 702, 0, 0, 0, 0, 0, 9, 0, 0
- , 0, 378, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 7201, 7203, 7205, 37, 0, 777, 52, 0, 921
- , 0, 0, 0, 0, 0, 0, 55, 56, 57, 58
- , 59, 60, 0, 0, 61, 62, 63, 64, 0, 65
- , 66, 67, 7207, 7210, 40, 41, 70, 0, 42, 0
- , 0, 7212, 0, 44, 0, 0, 0, 0, 687, 0
- , 0, 578, 0, 625, 0, 0, 0, 0, 0, 407
- , 0, 0, 0, 335, 913, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 7214, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 1365
- , 0, 359, 0, 1365, 0, 7216, 0, 0, 0, 778
- , 0, 0, 0, 0, 1361, 0, 151, 0, 0, 488
- , 0, 0, 1361, 0, 0, 0, 0, 0, 0, 0
- , 7218, 0, 409, 0, 0, 0, 0, 35, 7221, 37
- , 410, 0, 1364, 7223, 50, 51, 7226, 0, 0, 52
- , 0, 7228, 412, 1360, 0, 0, 7230, 7232, 0, 0
- , 0, 1360, 761, 0, 0, 7234, 61, 7237, 7239, 7242
- , 41, 7244, 66, 7246, 7248, 69, 43, 0, 7251, 417
- , 0, 418, 0, 664, 0, 0, 0, 0, 0, 35
- , 7253, 37, 0, 419, 0, 40, 41, 0, 0, 0
- , 0, 839, 34, 0, 0, 0, 132, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 7255
- , 7257, 40, 7259, 0, 0, 42, 0, 764, 421, 0
- , 0, 133, 0, 0, 35, 36, 37, 0, 0, 0
- , 262, 0, 0, 0, 0, 0, 922, 0, 0, 0
- , 0, 151, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 102, 39, 40, 41, 0, 0
- , 42, 0, 0, 43, 0, 44, 0, 7261, 7263, 7265
- , 51, 0, 172, 13, 7267, 0, 0, 0, 0, 665
- , 220, 0, 0, 55, 56, 57, 58, 59, 60, 7269
- , 246, 7271, 7273, 7275, 7278, 50, 7280, 7282, 67, 68
- , 69, 0, 175, 7284, 0, 0, 177, 178, 0, 536
- , 308, 0, 159, 316, 537, 0, 7286, 0, 0, 0
- , 7288, 50, 7291, 0, 943, 1039, 52, 262, 0, 0
- , 0, 0, 0, 1039, 423, 1039, 0, 424, 7293, 426
- , 7296, 428, 429, 430, 7298, 7301, 7304, 434, 7306, 7309
- , 7313, 7317, 7320, 7323, 7325, 7327, 7330, 7334, 7336, 7338
- , 7342, 1039, 1039, 1039, 7344, 49, 7346, 7348, 7351, 1039
- , 7353, 7355, 1039, 1039, 0, 1039, 1039, 1039, 0, 0
- , 349, 0, 0, 0, 0, 34, 0, 0, 61, 7357
- , 7359, 7361, 613, 65, 7363, 7366, 7368, 69, 0, 0
- , 70, 0, 96, 0, 0, 0, 0, 0, 0, 0
- , 283, 0, 169, 0, 195, 196, 197, 35, 36, 37
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 815, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 747, 39, 40
- , 7370, 361, 851, 7372, 0, 7374, 43, 450, 44, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 761, 699
- , 0, 762, 0, 0, 0, 0, 0, 235, 666, 7376
- , 134, 0, 35, 36, 37, 0, 0, 101, 688, 409
- , 0, 0, 726, 0, 0, 278, 0, 0, 0, 748
- , 7378, 0, 0, 0, 0, 0, 0, 25, 26, 0
- , 0, 199, 102, 39, 40, 41, 0, 0, 42, 0
- , 262, 43, 0, 44, 0, 0, 0, 0, 902, 0
- , 0, 151, 0, 765, 0, 0, 0, 0, 0, 0
- , 0, 30, 7380, 306, 0, 0, 511, 0, 98, 0
- , 0, 657, 200, 201, 202, 7382, 0, 0, 49, 50
- , 51, 0, 0, 462, 7384, 0, 0, 0, 0, 225
- , 7386, 1396, 463, 7388, 56, 7390, 58, 59, 60, 0
- , 0, 61, 62, 7392, 64, 104, 7395, 7398, 67, 7400
- , 69, 710, 34, 70, 380, 0, 105, 0, 1396, 7403
- , 0, 0, 0, 0, 0, 0, 0, 1396, 7405, 0
- , 0, 0, 0, 816, 0, 0, 0, 0, 0, 0
- , 0, 538, 0, 49, 7407, 7410, 37, 0, 277, 7412
- , 7414, 7416, 7418, 0, 333, 0, 749, 0, 55, 56
- , 7420, 58, 59, 60, 0, 0, 61, 62, 63, 64
- , 0, 65, 66, 67, 7422, 7424, 7426, 7430, 7432, 0
- , 42, 0, 35, 7434, 37, 44, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 579, 126
- , 0, 0, 34, 0, 0, 127, 102, 39, 7436, 41
- , 0, 154, 7439, 39, 40, 7441, 581, 44, 7443, 0
- , 0, 43, 0, 44, 0, 0, 46, 0, 0, 0
- , 0, 155, 680, 0, 35, 36, 7445, 0, 0, 0
- , 0, 682, 362, 0, 0, 0, 0, 7447, 246, 0
- , 83, 156, 304, 0, 0, 0, 0, 0, 48, 7449
- , 167, 0, 0, 0, 495, 39, 496, 41, 0, 0
- , 42, 0, 0, 43, 711, 44, 0, 0, 247, 455
- , 0, 865, 684, 685, 686, 7451, 7453, 51, 314, 0
- , 105, 52, 0, 0, 0, 0, 7455, 53, 7457, 0
- , 55, 56, 7459, 58, 59, 60, 0, 0, 61, 62
- , 63, 64, 0, 65, 7462, 67, 7464, 7466, 7469, 7471
- , 7473, 0, 0, 7476, 50, 51, 0, 0, 0, 52
- , 0, 0, 0, 0, 0, 0, 0, 7478, 0, 0
- , 61, 62, 63, 64, 0, 65, 7481, 7484, 7487, 7493
- , 7497, 7499, 7501, 67, 7504, 69, 0, 43, 7506, 44
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 464
- , 0, 0, 0, 0, 0, 49, 50, 51, 0, 0
- , 923, 52, 0, 0, 0, 0, 0, 0, 467, 0
- , 55, 56, 57, 58, 7508, 7510, 0, 0, 61, 62
- , 63, 64, 0, 65, 66, 67, 68, 69, 0, 0
- , 70, 249, 0, 689, 0, 0, 0, 0, 0, 0
- , 0, 7512, 0, 0, 7514, 0, 0, 35, 36, 37
- , 0, 253, 151, 0, 0, 0, 0, 0, 0, 0
- , 668, 0, 0, 0, 828, 0, 0, 0, 0, 0
- , 0, 7516, 0, 0, 0, 0, 0, 102, 39, 7518
- , 7520, 51, 0, 42, 381, 52, 43, 607, 44, 0
- , 0, 0, 0, 0, 540, 0, 0, 0, 0, 0
- , 0, 0, 61, 62, 63, 64, 0, 65, 66, 67
- , 7524, 69, 7526, 7528, 7530, 0, 0, 0, 0, 498
- , 541, 499, 7532, 501, 0, 0, 0, 0, 0, 0
- , 0, 7534, 0, 0, 285, 640, 0, 0, 7536, 0
- , 98, 0, 102, 39, 40, 41, 0, 0, 42, 0
- , 241, 43, 0, 44, 0, 0, 316, 0, 0, 866
- , 0, 650, 829, 0, 652, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 157, 0, 0, 0, 158
- , 0, 159, 0, 0, 0, 0, 0, 933, 49, 7538
- , 51, 0, 0, 0, 7541, 467, 0, 340, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 852
- , 0, 7543, 62, 7545, 64, 262, 65, 66, 67, 68
- , 7547, 817, 0, 70, 257, 0, 151, 0, 0, 160
- , 0, 0, 0, 903, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 614, 0, 316, 0, 0
- , 317, 0, 0, 49, 50, 51, 376, 126, 0, 52
- , 0, 0, 0, 127, 0, 0, 0, 0, 55, 56
- , 57, 58, 59, 7549, 0, 0, 61, 62, 63, 7551
- , 363, 7554, 7556, 67, 68, 69, 0, 0, 70, 0
- , 0, 0, 0, 0, 0, 0, 0, 713, 0, 34
- , 714, 0, 0, 0, 0, 0, 596, 0, 0, 136
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 96
- , 124, 35, 36, 37, 0, 0, 0, 0, 0, 703
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 125, 126, 0, 0, 0, 0, 0
- , 127, 7558, 7560, 40, 41, 0, 382, 42, 0, 0
- , 43, 0, 7562, 0, 0, 0, 0, 0, 0, 0
- , 217, 0, 0, 515, 516, 0, 0, 0, 0, 0
- , 0, 468, 0, 0, 469, 0, 465, 752, 98, 0
- , 0, 0, 7564, 516, 0, 0, 0, 0, 791, 0
- , 0, 0, 0, 7566, 124, 0, 0, 0, 7569, 0
- , 0, 518, 0, 0, 0, 0, 0, 0, 0, 0
- , 854, 0, 0, 124, 7571, 0, 0, 0, 548, 0
- , 0, 0, 0, 0, 0, 151, 0, 0, 0, 0
- , 0, 0, 0, 0, 286, 0, 0, 521, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 376
- , 126, 0, 7573, 50, 51, 0, 127, 0, 7575, 0
- , 0, 0, 0, 0, 0, 0, 34, 55, 56, 57
- , 58, 7577, 60, 0, 0, 61, 62, 7579, 64, 0
- , 7581, 66, 7583, 7586, 7588, 659, 0, 70, 7590, 533
- , 0, 7592, 524, 525, 526, 527, 7594, 529, 35, 36
- , 37, 530, 531, 532, 0, 0, 0, 308, 533, 0
- , 534, 479, 0, 0, 80, 0, 0, 0, 669, 0
- , 0, 0, 0, 0, 34, 0, 0, 0, 102, 39
- , 40, 41, 0, 0, 42, 0, 0, 7596, 0, 44
- , 0, 0, 888, 0, 0, 0, 0, 0, 137, 0
- , 238, 0, 0, 0, 0, 0, 35, 7598, 37, 878
- , 0, 0, 0, 81, 0, 0, 0, 0, 411, 558
- , 0, 0, 221, 0, 0, 7600, 0, 0, 0, 0
- , 7602, 0, 0, 714, 0, 0, 102, 39, 40, 41
- , 0, 0, 42, 0, 0, 43, 169, 44, 0, 335
- , 336, 262, 0, 0, 0, 0, 0, 0, 0, 0
- , 677, 0, 151, 0, 678, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 83, 0, 0, 0, 0, 0, 0, 0, 7604, 7606
- , 7609, 51, 169, 0, 0, 7611, 0, 0, 0, 0
- , 0, 0, 316, 421, 7613, 7615, 57, 7617, 59, 7619
- , 34, 0, 7621, 62, 63, 64, 17, 65, 66, 67
- , 7623, 69, 0, 34, 70, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 35, 36, 37, 0, 889, 49, 50, 7625
- , 0, 0, 384, 52, 0, 35, 7627, 37, 0, 0
- , 101, 385, 55, 56, 57, 7629, 59, 60, 18, 19
- , 61, 7631, 7633, 7636, 40, 7639, 7641, 67, 7643, 69
- , 735, 43, 70, 7645, 0, 102, 39, 40, 41, 0
- , 0, 42, 0, 0, 43, 0, 44, 0, 0, 0
- , 34, 0, 0, 0, 0, 0, 34, 0, 0, 163
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 46, 0, 0, 0, 0, 0
- , 7647, 0, 7649, 36, 7651, 22, 7653, 103, 7655, 7658
- , 37, 0, 0, 0, 0, 47, 0, 0, 0, 1039
- , 0, 0, 0, 0, 0, 0, 48, 0, 104, 0
- , 0, 0, 38, 39, 7661, 41, 0, 513, 7663, 7665
- , 7667, 7669, 7671, 44, 42, 7673, 1039, 43, 7675, 7677
- , 684, 7679, 686, 49, 50, 51, 0, 0, 0, 52
- , 0, 1039, 0, 0, 0, 0, 7682, 7687, 7690, 7693
- , 57, 7695, 7697, 7699, 0, 109, 7702, 7704, 63, 64
- , 0, 7706, 7709, 7712, 7715, 7720, 7724, 1039, 7726, 7728
- , 7730, 63, 7735, 7738, 7741, 7744, 7747, 7749, 7752, 7755
- , 36, 7760, 7763, 7765, 0, 7767, 0, 44, 0, 935
- , 0, 262, 0, 0, 0, 0, 7769, 49, 7771, 7773
- , 0, 0, 151, 0, 0, 0, 30, 31, 0, 102
- , 39, 40, 41, 0, 0, 42, 0, 716, 0, 0
- , 0, 0, 0, 49, 50, 51, 0, 0, 628, 7775
- , 50, 51, 0, 0, 0, 7777, 54, 0, 55, 56
- , 57, 58, 59, 60, 55, 56, 7779, 7781, 7783, 7786
- , 0, 65, 7789, 7791, 7793, 7796, 467, 65, 7798, 67
- , 7800, 69, 0, 0, 70, 0, 0, 0, 0, 7802
- , 0, 0, 755, 0, 364, 178, 0, 0, 0, 0
- , 0, 49, 50, 51, 0, 225, 0, 49, 7805, 51
- , 0, 32, 766, 7807, 408, 819, 409, 0, 0, 0
- , 0, 0, 1364, 0, 410, 0, 7809, 411, 0, 0
- , 61, 62, 63, 64, 0, 65, 7811, 7813, 68, 69
- , 7815, 7818, 7820, 0, 225, 1360, 52, 0, 0, 415
- , 0, 0, 793, 0, 0, 0, 0, 0, 416, 0
- , 34, 0, 0, 417, 0, 418, 64, 0, 7824, 7826
- , 67, 68, 69, 0, 1360, 0, 0, 419, 0, 7828
- , 41, 0, 0, 0, 936, 0, 0, 0, 0, 0
- , 0, 316, 35, 36, 7830, 0, 102, 0, 40, 7832
- , 0, 0, 0, 0, 7834, 34, 0, 0, 0, 890
- , 7836, 0, 0, 0, 0, 0, 0, 408, 0, 409
- , 0, 0, 38, 7838, 7840, 7842, 0, 410, 7844, 1364
- , 411, 43, 0, 44, 1110, 7846, 1110, 35, 7849, 7851
- , 1360, 0, 0, 413, 414, 0, 0, 0, 1360, 0
- , 0, 0, 7853, 0, 1110, 0, 661, 0, 1041, 0
- , 0, 7855, 1041, 0, 1041, 0, 417, 7857, 7859, 40
- , 7861, 0, 0, 42, 46, 0, 7863, 7865, 44, 0
- , 7867, 0, 40, 41, 0, 0, 0, 0, 49, 50
- , 7869, 0, 1041, 0, 0, 47, 0, 1041, 1041, 1041
- , 1041, 1041, 7871, 7873, 7875, 1041, 7877, 7880, 50, 7883
- , 1041, 1041, 0, 1261, 767, 1041, 0, 7885, 1041, 7887
- , 469, 0, 937, 0, 587, 0, 0, 0, 7889, 471
- , 386, 584, 7891, 7894, 7896, 7899, 429, 430, 7902, 7905
- , 7907, 7909, 435, 7911, 7913, 7915, 7917, 7919, 7921, 7923
- , 7925, 7927, 59, 7929, 0, 0, 7931, 62, 7933, 7936
- , 35, 7938, 7941, 67, 7944, 69, 0, 140, 70, 141
- , 0, 0, 925, 0, 0, 0, 0, 0, 49, 50
- , 51, 0, 0, 7947, 7949, 448, 515, 516, 0, 83
- , 102, 7953, 7956, 7958, 56, 57, 7961, 59, 7965, 43
- , 0, 7967, 62, 63, 64, 104, 7969, 7971, 67, 68
- , 69, 0, 34, 70, 0, 0, 105, 124, 0, 0
- , 547, 225, 0, 0, 7973, 0, 0, 0, 7975, 0
- , 0, 691, 0, 0, 424, 425, 426, 7977, 428, 429
- , 7980, 7982, 7984, 7987, 7989, 7994, 7998, 437, 8000, 8002
- , 440, 8004, 8006, 443, 339, 0, 0, 479, 55, 56
- , 57, 8008, 59, 8010, 0, 98, 61, 8013, 8016, 8018
- , 36, 8021, 8023, 67, 8025, 8028, 8030, 8033, 8035, 0
- , 42, 101, 0, 43, 0, 44, 446, 447, 448, 34
- , 0, 0, 0, 0, 0, 0, 0, 390, 0, 8037
- , 39, 8039, 8041, 8043, 0, 8046, 8048, 8050, 8053, 41
- , 44, 0, 8056, 0, 534, 8058, 350, 8060, 0, 0
- , 0, 35, 36, 37, 61, 62, 63, 64, 0, 65
- , 66, 67, 8062, 69, 0, 0, 70, 0, 89, 0
- , 0, 0, 0, 0, 0, 8064, 0, 8066, 0, 0
- , 0, 495, 39, 496, 8069, 0, 0, 8071, 151, 0
- , 8073, 0, 44, 0, 880, 0, 0, 0, 367, 0
- , 505, 0, 241, 0, 0, 0, 0, 0, 0, 455
- , 0, 0, 0, 650, 856, 49, 8075, 51, 0, 0
- , 105, 52, 35, 36, 37, 0, 0, 277, 0, 0
- , 263, 0, 106, 497, 0, 0, 0, 892, 61, 62
- , 8077, 8080, 51, 8083, 66, 8085, 8087, 8089, 50, 51
- , 70, 905, 102, 8091, 8095, 8098, 459, 0, 8100, 591
- , 0, 43, 0, 8102, 62, 8104, 64, 0, 65, 66
- , 8106, 8108, 8110, 8112, 34, 8114, 8116, 8118, 68, 69
- , 0, 0, 70, 127, 0, 0, 35, 36, 8120, 0
- , 0, 0, 49, 50, 51, 0, 0, 0, 52, 0
- , 170, 0, 0, 0, 561, 0, 35, 8122, 8124, 57
- , 58, 8126, 8130, 368, 631, 8132, 8134, 8137, 8141, 41
- , 65, 66, 8144, 8146, 8148, 8150, 0, 8152, 0, 0
- , 0, 0, 0, 0, 0, 83, 8154, 39, 40, 41
- , 0, 734, 42, 0, 85, 8156, 0, 44, 0, 0
- , 0, 34, 0, 0, 0, 0, 0, 737, 34, 0
- , 0, 0, 0, 49, 8158, 51, 0, 0, 223, 52
- , 0, 481, 169, 0, 264, 0, 0, 0, 55, 56
- , 57, 8160, 8162, 8164, 8168, 8170, 8172, 8174, 63, 8176
- , 35, 8178, 8180, 8182, 68, 8185, 8187, 36, 8189, 0
- , 650, 869, 0, 652, 27, 0, 0, 0, 0, 8191
- , 0, 0, 0, 8193, 39, 8195, 8197, 0, 499, 8199
- , 8201, 39, 8204, 8206, 44, 0, 8208, 8210, 8212, 8214
- , 0, 8218, 42, 52, 0, 43, 0, 44, 0, 0
- , 111, 0, 0, 0, 0, 0, 0, 49, 50, 51
- , 8220, 8222, 63, 8225, 0, 65, 66, 8227, 68, 69
- , 0, 8229, 8231, 0, 795, 0, 0, 0, 0, 0
- , 61, 62, 63, 64, 0, 65, 66, 67, 68, 69
- , 0, 0, 70, 0, 0, 0, 8234, 0, 0, 0
- , 0, 0, 247, 262, 8236, 0, 0, 706, 651, 632
- , 652, 0, 0, 0, 151, 0, 34, 0, 0, 0
- , 8238, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 8240, 50, 51, 893, 0, 370
- , 52, 49, 50, 51, 0, 225, 0, 8242, 8244, 8247
- , 37, 0, 0, 52, 0, 0, 265, 61, 62, 63
- , 64, 0, 65, 66, 8249, 8251, 8253, 64, 0, 8255
- , 8257, 8259, 8261, 8263, 0, 65, 8265, 67, 8267, 8270
- , 40, 41, 70, 0, 8272, 0, 467, 8274, 169, 8276
- , 83, 0, 0, 0, 0, 0, 0, 0, 453, 85
- , 167, 0, 0, 0, 0, 124, 0, 0, 0, 0
- , 0, 0, 0, 0, 340, 0, 0, 8278, 39, 40
- , 41, 0, 0, 42, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 249, 0, 0, 0, 34
- , 0, 0, 0, 0, 0, 170, 0, 0, 0, 102
- , 0, 8280, 41, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 151, 0, 0, 0, 0, 0, 0, 0
- , 0, 8282, 8284, 8286, 0, 0, 821, 0, 483, 0
- , 0, 0, 0, 738, 34, 0, 168, 0, 0, 49
- , 8288, 51, 0, 645, 0, 52, 0, 0, 0, 320
- , 0, 8291, 39, 8294, 41, 0, 0, 42, 609, 0
- , 43, 0, 8296, 62, 63, 8298, 8300, 8302, 8304, 67
- , 68, 69, 35, 8306, 8308, 225, 0, 0, 49, 50
- , 51, 0, 0, 484, 52, 45, 0, 0, 0, 0
- , 0, 769, 0, 0, 0, 0, 102, 39, 8310, 8312
- , 37, 0, 8314, 8316, 8319, 8321, 0, 44, 8323, 68
- , 8325, 8327, 51, 44, 0, 0, 844, 0, 0, 0
- , 0, 0, 0, 917, 8329, 0, 0, 857, 102, 39
- , 40, 41, 0, 0, 8331, 48, 0, 43, 637, 44
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 615, 0, 0, 290, 0, 8333, 36, 37, 755
- , 756, 0, 49, 50, 51, 0, 0, 0, 52, 262
- , 0, 0, 0, 0, 53, 8335, 0, 55, 56, 57
- , 8337, 59, 60, 0, 0, 61, 8339, 8342, 8344, 41
- , 65, 66, 8347, 68, 69, 43, 0, 8349, 0, 0
- , 0, 460, 0, 0, 0, 0, 673, 49, 50, 51
- , 0, 0, 8351, 8353, 50, 51, 0, 0, 0, 52
- , 35, 36, 8355, 0, 0, 0, 0, 0, 0, 0
- , 61, 62, 8357, 64, 0, 65, 8359, 8361, 8363, 8365
- , 8368, 8370, 8372, 67, 8374, 8376, 0, 0, 70, 0
- , 747, 39, 40, 41, 938, 639, 42, 0, 0, 8378
- , 0, 44, 61, 62, 63, 64, 0, 65, 66, 67
- , 8381, 8383, 0, 0, 70, 0, 102, 0, 40, 41
- , 0, 0, 0, 0, 0, 0, 488, 0, 125, 126
- , 0, 0, 0, 0, 0, 127, 0, 49, 8385, 51
- , 0, 0, 0, 52, 0, 0, 0, 0, 217, 0
- , 0, 0, 0, 783, 0, 0, 797, 0, 148, 0
- , 61, 62, 63, 8388, 0, 65, 66, 67, 68, 69
- , 8390, 0, 70, 0, 650, 845, 0, 652, 0, 555
- , 674, 0, 0, 0, 0, 0, 0, 0, 292, 739
- , 34, 0, 0, 0, 0, 0, 0, 0, 0, 8392
- , 720, 49, 50, 51, 0, 0, 225, 8394, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 757, 8396, 36, 8398, 62, 8400, 8402, 8404, 8406
- , 8409, 67, 68, 8411, 0, 0, 8413, 634, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 321
- , 0, 0, 102, 39, 8415, 8418, 37, 0, 42, 610
- , 0, 43, 0, 44, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 149, 0, 0, 0, 0, 846
- , 0, 8420, 115, 116, 8422, 8425, 8427, 8429, 0, 118
- , 8431, 120, 467, 8433, 0, 8435, 0, 1364, 411, 0
- , 0, 882, 1390, 0, 1390, 0, 0, 412, 1360, 0
- , 8437, 413, 414, 0, 310, 0, 1360, 0, 0, 34
- , 415, 0, 1390, 0, 0, 262, 169, 0, 0, 416
- , 870, 0, 0, 0, 417, 0, 8439, 49, 8441, 51
- , 0, 335, 8443, 0, 0, 1360, 0, 0, 419, 0
- , 40, 8445, 8447, 37, 0, 0, 0, 461, 0, 0
- , 0, 0, 721, 49, 50, 51, 0, 0, 8449, 52
- , 0, 0, 0, 0, 692, 420, 0, 0, 267, 8451
- , 0, 102, 8453, 8455, 41, 784, 61, 8457, 63, 64
- , 43, 65, 8459, 8461, 68, 8463, 50, 8465, 8467, 0
- , 96, 52, 0, 0, 0, 0, 0, 616, 0, 8469
- , 0, 0, 0, 0, 0, 0, 488, 0, 61, 62
- , 63, 8471, 0, 65, 66, 67, 68, 69, 0, 0
- , 70, 0, 8473, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 908, 0, 0, 833, 0, 0, 0
- , 0, 0, 0, 0, 240, 0, 0, 0, 0, 49
- , 50, 51, 0, 0, 0, 151, 0, 0, 0, 0
- , 0, 486, 0, 0, 0, 310, 0, 0, 895, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 508, 49, 50, 51, 0, 0, 0, 52, 423
- , 0, 0, 8475, 425, 8477, 8479, 8481, 429, 430, 431
- , 432, 8483, 434, 8485, 8487, 8489, 8491, 8493, 8495, 441
- , 8497, 8499, 67, 8502, 69, 73, 0, 70, 0, 8504
- , 227, 0, 0, 0, 0, 445, 0, 0, 35, 36
- , 37, 0, 0, 0, 0, 0, 0, 0, 0, 8507
- , 0, 0, 0, 0, 446, 447, 448, 0, 0, 0
- , 0, 0, 0, 124, 0, 0, 0, 0, 102, 39
- , 40, 41, 0, 0, 8509, 0, 0, 43, 0, 44
- , 0, 0, 0, 0, 169, 940, 125, 126, 0, 0
- , 0, 0, 0, 127, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 169, 0, 0
- , 0, 0, 0, 635, 0, 0, 0, 0, 0, 0
- , 311, 599, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 8511, 0, 98, 323, 0, 0, 0, 0, 0
- , 0, 8515, 151, 0, 34, 0, 0, 0, 217, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 89, 0, 0, 170, 0, 722, 0, 301, 49
- , 50, 51, 0, 0, 302, 52, 8517, 8519, 37, 0
- , 16, 0, 0, 0, 268, 0, 0, 0, 0, 0
- , 883, 0, 61, 62, 63, 8521, 0, 65, 66, 67
- , 68, 69, 0, 0, 8523, 0, 102, 39, 8525, 41
- , 98, 0, 42, 277, 909, 43, 0, 44, 0, 0
- , 0, 0, 0, 0, 0, 159, 0, 35, 8527, 37
- , 37, 0, 929, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 230, 0
- , 0, 96, 0, 487, 0, 0, 0, 102, 8529, 8532
- , 8534, 41, 0, 42, 42, 0, 43, 0, 44, 0
- , 0, 0, 0, 481, 0, 0, 0, 0, 411, 262
- , 0, 0, 0, 8536, 0, 40, 41, 0, 0, 0
- , 8538, 0, 0, 0, 0, 0, 0, 0, 0, 34
- , 0, 0, 0, 0, 0, 0, 169, 0, 0, 0
- , 772, 0, 34, 0, 0, 0, 0, 49, 50, 51
- , 0, 0, 0, 52, 0, 0, 0, 376, 126, 0
- , 8541, 35, 8544, 8546, 8549, 58, 8551, 8553, 0, 0
- , 61, 8555, 8557, 64, 35, 8559, 8561, 67, 8563, 69
- , 0, 0, 70, 930, 0, 0, 834, 0, 0, 0
- , 0, 38, 39, 8565, 41, 0, 0, 8567, 49, 8569
- , 8572, 8576, 44, 0, 8578, 8581, 40, 41, 0, 0
- , 8583, 0, 0, 8585, 0, 44, 0, 0, 91, 0
- , 0, 61, 62, 63, 8587, 8589, 8594, 66, 67, 8597
- , 8600, 8604, 41, 70, 1299, 8607, 13, 14, 43, 0
- , 44, 0, 0, 8609, 0, 0, 260, 0, 0, 0
- , 0, 0, 173, 0, 174, 16, 0, 662, 0, 0
- , 0, 0, 217, 0, 8611, 8613, 176, 0, 0, 8615
- , 178, 0, 0, 0, 0, 8617, 0, 262, 0, 0
- , 0, 159, 0, 1008, 0, 0, 0, 1299, 151, 0
- , 0, 0, 0, 0, 96, 0, 35, 36, 37, 0
- , 0, 0, 8619, 50, 51, 0, 0, 0, 52, 0
- , 0, 179, 180, 8621, 8624, 8626, 8629, 8631, 8634, 8636
- , 8638, 8641, 8644, 191, 0, 8648, 8650, 8652, 8654, 8656
- , 8659, 8662, 8664, 68, 69, 43, 169, 8666, 61, 62
- , 8668, 8670, 51, 8672, 66, 67, 8674, 69, 0, 0
- , 70, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 8678, 0, 8680, 62, 63, 64, 570, 65, 66
- , 67, 8682, 69, 0, 345, 70, 0, 195, 8684, 197
- , 0, 714, 0, 0, 0, 0, 0, 0, 0, 0
- , 75, 0, 0, 170, 0, 0, 0, 0, 0, 8687
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 312
- , 151, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 8689, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 872, 873, 49, 8691, 51
- , 0, 0, 0, 8693, 294, 0, 488, 0, 0, 0
- , 0, 0, 55, 56, 57, 58, 59, 60, 0, 0
- , 61, 62, 63, 8695, 0, 65, 66, 8697, 68, 69
- , 8699, 26, 70, 489, 199, 77, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 897
- , 0, 0, 0, 0, 8702, 0, 0, 836, 637, 0
- , 0, 0, 0, 694, 30, 31, 0, 0, 0, 0
- , 0, 0, 0, 8704, 0, 200, 201, 202, 203, 0
- , 707, 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, 172, 13, 14, 0, 0, 0, 0, 0, 0
- , 0, 837, 0, 0, 0, 0, 0, 0, 204, 0
- , 823, 16, 0, 663, 0, 0, 512, 0, 295, 0
- , 40, 8706, 205, 0, 0, 177, 178, 0, 593, 0
- , 824, 159, 0, 34, 0, 0, 594, 96, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 695, 0, 0, 0, 638, 639, 0, 0, 0, 0
- , 0, 0, 0, 0, 325, 35, 36, 8709, 180, 181
- , 182, 183, 184, 185, 186, 187, 188, 189, 8711, 191
- , 0, 0, 0, 0, 759, 192, 8713, 8716, 326, 0
- , 0, 34, 169, 0, 0, 102, 39, 40, 41, 0
- , 0, 42, 296, 0, 8718, 0, 8720, 0, 96, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 8722, 36, 37, 0, 1039, 0, 49
- , 50, 8724, 0, 195, 196, 197, 0, 207, 208, 209
- , 210, 211, 0, 0, 0, 0, 0, 96, 0, 170
- , 1039, 0, 0, 102, 8726, 40, 8728, 0, 0, 8730
- , 0, 0, 43, 0, 44, 862, 0, 1039, 618, 1039
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 151
- , 0, 34, 0, 0, 1039, 490, 277, 0, 0, 1039
- , 1039, 8732, 1039, 1039, 8735, 1285, 1039, 1039, 1039, 1285
- , 0, 1039, 1039, 8737, 8739, 0, 8741, 8743, 51, 1039
- , 8745, 1039, 52, 8747, 8749, 37, 98, 0, 0, 212
- , 0, 0, 0, 0, 0, 229, 8751, 26, 8753, 61
- , 8756, 8759, 64, 213, 65, 66, 67, 8761, 8763, 0
- , 8766, 70, 0, 102, 39, 40, 41, 0, 0, 42
- , 0, 0, 43, 0, 8768, 0, 0, 572, 0, 0
- , 30, 31, 0, 327, 49, 50, 51, 0, 0, 0
- , 52, 200, 8770, 202, 203, 0, 0, 0, 0, 0
- , 0, 0, 640, 0, 0, 8772, 0, 61, 62, 63
- , 64, 0, 8774, 66, 67, 68, 8776, 800, 0, 70
- , 0, 0, 0, 215, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 244, 0, 8778, 0
- , 0, 346, 0, 34, 0, 0, 0, 151, 0, 0
- , 0, 0, 0, 0, 298, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 95, 0, 49, 8780, 8783, 37, 643, 602
- , 52, 0, 34, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 375, 170, 0, 61, 62, 63
- , 64, 0, 65, 66, 67, 8786, 8788, 40, 41, 70
- , 0, 42, 0, 0, 8790, 36, 8792, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 316, 0, 0, 773
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 102, 39, 40, 41, 0, 0
- , 42, 0, 0, 43, 941, 8794, 539, 567, 0, 573
- , 0, 0, 653, 0, 0, 347, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 513, 0, 0, 8796, 0
- , 0, 874, 0, 159, 0, 0, 0, 0, 0, 151
- , 0, 0, 0, 0, 0, 0, 8798, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 83, 0, 0
- , 0, 0, 0, 0, 0, 0, 8800, 8802, 51, 112
- , 620, 0, 8805, 0, 0, 113, 0, 0, 8807, 0
- , 467, 8810, 56, 57, 58, 59, 60, 0, 0, 61
- , 62, 8812, 8814, 0, 65, 66, 67, 8816, 8818, 0
- , 0, 8820, 0, 1338, 0, 8822, 50, 51, 0, 0
- , 0, 8824, 676, 396, 1338, 0, 16, 0, 0, 0
- , 8826, 8828, 8830, 8832, 8835, 8837, 0, 205, 8839, 8841
- , 8843, 8845, 760, 65, 66, 67, 8848, 69, 0, 0
- , 70, 0, 217, 0, 0, 34, 0, 801, 0, 328
- , 0, 0, 0, 696, 0, 96, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 159, 0, 0, 8850, 8853, 8855
- , 400, 278, 708, 518, 279, 884, 98, 34, 520, 402
- , 121, 802, 123, 34, 35, 36, 603, 376, 354, 126
- , 355, 126, 127, 803, 151, 102, 804, 39, 34, 40
- , 102, 42, 35, 40, 36, 41, 43, 34, 42, 476
- , 277, 96, 522, 83, 848, 527, 911, 529, 49, 299
- , 774, 532, 405, 52, 37, 76, 495, 533, 496, 534
- , 25, 41, 479, 26, 35, 27, 348, 36, 42, 199
- , 43, 213, 623, 68, 280, 40, 343, 918, 411, 39
- , 43, 34, 241, 40, 30, 41, 44, 31, 497, 105
- , 470, 35, 471, 36, 262, 49, 124, 34, 50, 825
- , 49, 52, 678, 50, 151, 102, 107, 743, 40, 108
- , 218, 473, 56, 57, 61, 125, 58, 102, 62, 126
- , 474, 59, 39, 63, 262, 60, 40, 64, 61, 66
- , 217, 62, 42, 67, 127, 63, 68, 64, 69, 43
- , 35, 65, 36, 66, 44, 37, 70, 151, 68, 49
- , 69, 50, 406, 52, 151, 875, 55, 876, 58, 60
- , 575, 63, 102, 64, 697, 49, 39, 826, 50, 40
- , 65, 51, 41, 68, 42, 69, 52, 775, 49, 43
- , 50, 70, 51, 709, 611, 49, 59, 50, 710, 60
- , 62, 232, 65, 113, 863, 476, 67, 679, 68, 62
- , 69, 153, 262, 64, 70, 65, 129, 478, 151, 479
- , 50, 806, 51, 50, 262, 51, 114, 115, 2, 83
- , 116, 120, 151, 499, 66, 500, 67, 501, 68, 159
- , 885, 377, 49, 813, 50, 35, 169, 51, 36, 681
- , 37, 682, 604, 356, 59, 3, 698, 60, 68, 102
- , 69, 39, 481, 43, 685, 535, 89, 488, 340, 34
- , 50, 96, 67, 776, 68, 37, 70, 102, 6, 39
- , 7, 864, 40, 169, 41, 919, 763, 330, 233, 316
- , 281, 376, 163, 151, 72, 886, 49, 50, 35, 51
- , 36, 777, 68, 102, 69, 39, 43, 130, 900, 724
- , 34, 244, 877, 231, 408, 36, 1364, 411, 282, 49
- , 850, 656, 745, 1361, 746, 413, 414, 34, 762, 415
- , 219, 495, 62, 39, 63, 234, 496, 64, 169, 65
- , 42, 67, 416, 68, 131, 44, 70, 1360, 36, 497
- , 102, 420, 39, 169, 41, 422, 303, 49, 379, 421
- , 50, 52, 14, 173, 245, 61, 314, 62, 16, 63
- , 151, 1039, 64, 49, 65, 51, 914, 66, 70, 176
- , 901, 1039, 49, 247, 1039, 51, 1039, 425, 151, 248
- , 427, 81, 431, 62, 42, 725, 432, 272, 433, 64
- , 435, 179, 65, 172, 436, 180, 66, 437, 181, 67
- , 1039, 438, 182, 68, 439, 183, 69, 440, 184, 441
- , 185, 442, 186, 1039, 225, 443, 187, 1039, 188, 1039
- , 189, 1039, 626, 190, 360, 1039, 191, 1039, 444, 1039
- , 192, 50, 193, 51, 1039, 194, 1039, 445, 1326, 52
- , 1326, 446, 62, 447, 63, 448, 64, 499, 494, 66
- , 500, 67, 501, 68, 41, 34, 42, 249, 449, 250
- , 96, 251, 411, 198, 677, 31, 667, 203, 52, 331
- , 809, 1396, 810, 55, 57, 556, 63, 733, 96, 65
- , 236, 1396, 66, 2, 68, 284, 1396, 169, 100, 159
- , 106, 34, 50, 35, 51, 36, 200, 52, 34, 201
- , 202, 606, 203, 332, 57, 1213, 68, 38, 69, 39
- , 278, 421, 35, 40, 36, 41, 37, 70, 36, 43
- , 580, 40, 252, 102, 42, 41, 43, 42, 539, 750
- , 37, 245, 47, 932, 85, 789, 49, 34, 50, 151
- , 248, 751, 54, 505, 456, 57, 727, 66, 497, 68
- , 887, 49, 69, 50, 35, 51, 36, 712, 37, 70
- , 49, 52, 698, 81, 262, 61, 66, 315, 62, 67
- , 5, 63, 151, 68, 102, 135, 10, 64, 69, 39
- , 7, 451, 40, 65, 41, 66, 70, 8, 68, 42
- , 70, 362, 387, 59, 34, 60, 334, 71, 225, 237
- , 96, 11, 40, 49, 41, 34, 50, 12, 68, 254
- , 35, 255, 36, 256, 37, 70, 542, 500, 790, 627
- , 641, 511, 50, 779, 658, 52, 457, 643, 61, 63
- , 96, 69, 277, 557, 60, 840, 582, 64, 583, 65
- , 66, 98, 830, 102, 39, 277, 44, 543, 515, 544
- , 567, 217, 161, 853, 734, 520, 262, 867, 49, 52
- , 277, 124, 59, 63, 162, 65, 549, 476, 67, 550
- , 68, 551, 69, 552, 855, 307, 523, 534, 934, 528
- , 43, 81, 409, 36, 841, 318, 780, 690, 497, 13
- , 49, 85, 14, 50, 167, 831, 52, 55, 15, 818
- , 56, 58, 16, 262, 60, 61, 383, 151, 68, 51
- , 170, 488, 36, 58, 96, 62, 20, 915, 63, 38
- , 64, 39, 21, 65, 41, 66, 168, 68, 42, 545
- , 44, 680, 159, 704, 35, 98, 37, 102, 23, 35
- , 728, 40, 682, 36, 41, 34, 40, 102, 42, 39
- , 105, 879, 40, 41, 43, 169, 1039, 715, 96, 1039
- , 278, 683, 44, 685, 1039, 106, 35, 753, 502, 258
- , 49, 36, 34, 50, 37, 55, 51, 792, 56, 58
- , 107, 59, 52, 309, 60, 108, 1039, 61, 62, 110
- , 1039, 65, 55, 1039, 66, 56, 1039, 67, 57, 277
- , 1039, 46, 68, 58, 1039, 69, 59, 24, 1039, 60
- , 1039, 70, 1039, 61, 567, 660, 1039, 102, 62, 40
- , 64, 25, 1039, 41, 26, 1039, 65, 27, 1039, 458
- , 66, 102, 67, 39, 1260, 68, 904, 40, 69, 41
- , 421, 1039, 35, 82, 1039, 37, 70, 42, 1039, 1039
- , 452, 43, 47, 48, 138, 50, 28, 51, 29, 49
- , 52, 52, 53, 57, 61, 58, 62, 59, 63, 466
- , 842, 60, 64, 61, 66, 62, 67, 63, 559, 68
- , 64, 69, 66, 70, 151, 68, 670, 287, 259, 50
- , 671, 52, 151, 916, 1364, 66, 412, 67, 1360, 832
- , 413, 49, 414, 50, 70, 169, 488, 51, 273, 260
- , 546, 66, 40, 71, 924, 37, 41, 170, 420, 222
- , 820, 344, 39, 288, 919, 40, 1364, 41, 42, 225
- , 1110, 1041, 164, 36, 1110, 37, 412, 415, 239, 416
- , 422, 102, 1041, 39, 418, 41, 34, 43, 1110, 1360
- , 1041, 720, 419, 169, 51, 1041, 35, 1041, 36, 1041
- , 37, 48, 1041, 560, 49, 420, 101, 51, 1041, 1041
- , 468, 567, 1041, 470, 34, 588, 585, 102, 49, 39
- , 50, 427, 40, 51, 428, 41, 431, 42, 33, 52
- , 432, 262, 433, 434, 43, 436, 44, 437, 472, 53
- , 438, 54, 439, 170, 440, 55, 441, 56, 442, 57
- , 586, 151, 58, 717, 60, 61, 473, 868, 63, 444
- , 64, 474, 65, 589, 36, 66, 37, 139, 422, 68
- , 445, 446, 475, 891, 52, 447, 337, 49, 387, 39
- , 50, 40, 55, 51, 41, 58, 96, 388, 42, 60
- , 84, 61, 44, 65, 389, 781, 66, 815, 672, 476
- , 106, 34, 427, 629, 430, 477, 431, 548, 721, 432
- , 478, 433, 49, 754, 434, 34, 50, 35, 736, 435
- , 51, 36, 436, 37, 438, 96, 439, 52, 441, 365
- , 442, 338, 444, 58, 511, 262, 60, 445, 62, 261
- , 794, 63, 35, 71, 64, 37, 65, 172, 66, 151
- , 68, 102, 69, 39, 35, 319, 40, 36, 41, 37
- , 70, 102, 391, 40, 49, 41, 50, 549, 51, 142
- , 42, 550, 551, 102, 552, 39, 52, 43, 503, 40
- , 533, 42, 43, 392, 44, 98, 68, 96, 277, 96
- , 590, 504, 262, 41, 366, 42, 16, 43, 34, 652
- , 50, 49, 480, 63, 50, 843, 64, 169, 65, 726
- , 67, 52, 68, 49, 69, 782, 718, 39, 52, 34
- , 262, 40, 214, 41, 42, 339, 61, 44, 63, 151
- , 67, 61, 68, 62, 69, 63, 64, 143, 70, 65
- , 125, 66, 126, 67, 37, 144, 55, 36, 56, 37
- , 630, 59, 506, 289, 60, 145, 61, 209, 102, 62
- , 210, 39, 63, 211, 146, 926, 40, 64, 42, 67
- , 68, 159, 69, 165, 43, 262, 44, 70, 151, 102
- , 43, 86, 34, 50, 58, 482, 200, 59, 201, 35
- , 608, 60, 202, 36, 203, 37, 61, 376, 62, 126
- , 241, 64, 65, 36, 66, 37, 67, 127, 155, 69
- , 369, 35, 553, 37, 70, 213, 262, 102, 156, 768
- , 40, 41, 597, 42, 500, 501, 151, 102, 43, 40
- , 214, 41, 102, 42, 49, 39, 50, 40, 51, 41
- , 170, 43, 44, 87, 61, 376, 62, 126, 147, 64
- , 52, 67, 127, 245, 166, 70, 246, 351, 729, 241
- , 705, 592, 151, 248, 316, 49, 49, 52, 50, 35
- , 371, 51, 36, 67, 61, 68, 62, 69, 63, 70
- , 65, 61, 66, 62, 67, 63, 68, 64, 69, 66
- , 70, 906, 68, 102, 69, 39, 217, 42, 43, 35
- , 44, 37, 927, 102, 562, 40, 796, 35, 216, 36
- , 554, 37, 34, 50, 166, 646, 151, 38, 881, 40
- , 61, 44, 894, 64, 34, 35, 65, 36, 66, 37
- , 36, 341, 37, 70, 35, 40, 36, 41, 102, 42
- , 730, 39, 46, 40, 274, 41, 43, 42, 67, 49
- , 69, 43, 50, 34, 47, 217, 42, 35, 291, 633
- , 54, 151, 58, 151, 102, 62, 39, 63, 34, 40
- , 64, 42, 67, 44, 70, 822, 151, 49, 52, 37
- , 266, 719, 63, 61, 66, 62, 67, 63, 68, 64
- , 49, 69, 563, 50, 65, 51, 66, 70, 68, 96
- , 69, 52, 43, 564, 507, 151, 68, 124, 69, 278
- , 50, 71, 241, 64, 907, 485, 645, 224, 52, 647
- , 34, 35, 61, 37, 63, 102, 64, 49, 50, 40
- , 65, 51, 41, 66, 112, 69, 565, 70, 113, 35
- , 322, 40, 36, 41, 169, 114, 858, 102, 150, 408
- , 39, 40, 117, 409, 41, 42, 119, 1364, 43, 410
- , 44, 393, 293, 418, 151, 170, 50, 939, 96, 41
- , 35, 488, 36, 151, 298, 798, 598, 770, 39, 421
- , 40, 62, 42, 66, 44, 731, 67, 49, 69, 51
- , 121, 70, 122, 123, 88, 847, 64, 871, 422, 424
- , 225, 426, 648, 427, 740, 428, 34, 433, 316, 435
- , 771, 436, 758, 437, 61, 438, 62, 439, 63, 440
- , 64, 442, 65, 443, 620, 66, 68, 72, 444, 77
- , 226, 859, 566, 96, 42, 928, 170, 511, 262, 96
- , 128, 35, 372, 36, 90, 34, 64, 70, 74, 511
- , 40, 36, 35, 39, 567, 102, 40, 39, 41, 40
- , 102, 785, 277, 151, 96, 455, 316, 509, 55, 36
- , 693, 56, 37, 127, 57, 59, 228, 34, 60, 105
- , 62, 63, 151, 65, 36, 66, 37, 68, 394, 421
- , 40, 811, 42, 50, 35, 49, 51, 36, 43, 50
- , 37, 51, 52, 860, 102, 39, 52, 568, 42, 569
- , 43, 64, 49, 50, 636, 324, 152, 92, 65, 51
- , 26, 68, 102, 67, 69, 39, 649, 68, 40, 171
- , 69, 42, 172, 1008, 46, 34, 47, 169, 175, 352
- , 177, 48, 159, 455, 49, 105, 373, 181, 53, 182
- , 54, 49, 183, 50, 184, 55, 51, 185, 56, 186
- , 57, 187, 680, 58, 188, 59, 52, 189, 170, 374
- , 60, 190, 861, 61, 102, 62, 39, 63, 40, 64
- , 41, 278, 192, 65, 269, 193, 66, 194, 42, 67
- , 44, 70, 49, 63, 50, 64, 510, 65, 52, 617
- , 68, 93, 511, 275, 61, 98, 896, 68, 786, 567
- , 196, 262, 342, 313, 76, 50, 71, 52, 277, 64
- , 198, 67, 225, 675, 600, 25, 835, 395, 42, 270
- , 169, 41, 175, 37, 179, 170, 190, 732, 601, 193
- , 799, 194, 43, 511, 44, 98, 35, 571, 297, 206
- , 1039, 39, 1039, 41, 1039, 42, 1039, 225, 94, 1039
- , 491, 1039, 376, 126, 225, 1039, 49, 1039, 50, 1039
- , 127, 35, 741, 36, 276, 241, 25, 169, 230, 27
- , 62, 271, 199, 63, 78, 650, 68, 282, 651, 69
- , 652, 100, 931, 44, 837, 201, 641, 170, 65, 214
- , 69, 277, 637, 169, 50, 35, 619, 51, 36, 642
- , 68, 102, 69, 39, 43, 35, 44, 37, 639, 44
- , 787, 262, 574, 1338, 49, 85, 50, 167, 262, 52
- , 492, 812, 151, 1338, 55, 278, 63, 742, 64, 353
- , 68, 13, 69, 14, 70, 216, 49, 305, 52, 1338
- , 55, 114, 56, 115, 57, 116, 58, 1016, 79, 59
- , 1016, 60, 231, 61, 118, 62, 119, 63, 120, 898
- , 64, 178, 68, 514, 910, 397, 35, 398, 36, 399
- , 37, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 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,99019,165032, 0, 0, 0, 0, 0, 0, 0
- , 0,121033, 0, 0,121036, 0, 0, 0, 0,231061
- , 0, 0,121044,121045, 0, 0,82541,82542,82543,82544
- , 0, 0,82547, 0, 0,82550, 0,82552,121060, 0
- , 0, 0, 0, 0,159573,159574, 0, 0,38555, 0
- ,121072, 0,27557,121075, 0, 0,33062, 0, 0,99077
- ,99078,99079,99080,99081,99082,99083,297120, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,121099, 0, 0
- ,38587,38588,38589, 0, 0, 0, 0, 0,159617, 0
- , 0,159620, 0, 0, 0,214634, 0, 0, 0,82614
- , 0, 0,214641,187137, 0,214644, 0, 0, 0, 0
- , 0, 0, 0,38620, 0, 0, 0,159646, 0, 0
- ,225661,38628, 0, 0, 0,159654, 0,159656, 0, 0
- , 0,121153,121154,121155,121156, 0,121158, 0,82653,82654
- , 0,121163,121164, 0,170675,170676, 0, 0, 0,225690
- , 0, 0, 0,22157, 0, 0, 0, 0, 0,225700
- ,82675,82676,82677,82678, 0,82680,82681,82682, 0,82684
- , 0,181704,82687, 0,170705,170706, 0,170708, 0, 0
- ,170711,22185, 0, 0, 0, 0, 0,22191, 0,159718
- ,11192, 0,11194,264241,38701,264243,264244,38704, 0, 0
- , 0, 0, 0, 0,247749, 0, 0,247752, 0, 0
- ,181743, 0,159741, 0, 0, 0, 0,154245, 0, 0
- , 0, 0, 0,38730,181757, 0,170757, 0, 0,159758
- , 0,247776, 0,159762, 0,181768,159765, 0,159767, 0
- , 0,99259,159771, 0, 0, 0, 0, 0,154276,38756
- , 0, 0, 0, 0, 0, 0, 0,159786, 0, 0
- , 0,225802,159791, 0, 0, 0, 0,181800, 0, 0
- ,247815, 0,11274, 0, 0,225816,225817, 0,225819, 0
- , 0, 0,225823,225824, 0, 0, 0, 0,225829,225830
- , 0, 0, 0, 0, 0,71808, 0, 0,22302, 0
- ,170831,170832,170833,170834, 0, 0,264354,82822,170839, 0
- ,170841,170842, 0, 0,170845, 0, 0, 0, 0, 0
- , 0,22325,22326,22327,22328, 0, 0,247872, 0, 0
- , 0, 0, 0, 0, 0, 0,71849, 0,132362, 0
- , 0, 0,231384,181876, 0, 0, 0, 0, 0,242393
- , 0, 0, 0, 0, 0,55365,154384, 0, 0, 0
- , 0, 0,154390, 0,38871, 0,82881,82882, 0,99387
- ,99388,154399,154400,154401,154402,154403,154404, 0, 0,154407
- ,154408,154409,154410,225924,154412, 0, 0, 0,154416, 0
- , 0,154419, 0, 0,181927, 0, 0, 0, 0, 0
- , 0,71914, 0, 0, 0, 0, 0, 0, 0, 0
- ,71923,71924,71925,71926, 0, 0, 0, 0,71931,71932
- ,71933,71934, 0,71936,71937,71938, 0, 0,38935,38936
- ,71943, 0,38939,275483,198470, 0, 0,38944, 0, 0
- , 0, 0, 0,181976,181977, 0,181979,159976, 0, 0
- , 0, 0, 0, 0,187488, 0,99474, 0, 0,132483
- , 0, 0,115983, 0,49973,253511, 0, 0, 0, 0
- , 0, 0, 0, 0,82989,82990, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,83001, 0, 0, 0
- , 0, 0, 0, 0, 0,88511, 0,248042, 0,39006
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,39017, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,88551, 0,39044, 0,39046
- ,171071, 0,275592,39050, 0, 0, 0, 0, 0, 0
- ,209588, 0, 0, 0, 0, 0,215095, 0, 0,215098
- ,39067,39068,39069,39070, 0,39072,39073, 0, 0,39076
- ,72083,72084, 0, 0, 0, 0,154604, 0, 0,105098
- , 0, 0, 0, 0, 0, 0, 0,99605,281139, 0
- , 0,281142, 0,220633, 0, 0, 0, 0, 598, 599
- , 0, 0, 0, 0, 604, 0,72119, 0, 0,72122
- , 0,72124, 0, 0, 0, 0, 0,231659, 0, 0
- , 0, 0,143648, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,187681, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,286712, 0, 0, 0, 0,55675,231708, 0,187702,149196
- , 0,55681, 0,72186, 0,237218, 0, 0,198714, 0
- ,39187,198717, 0,176715, 0, 0,28191, 0, 0,176721
- , 0,187725, 0, 0, 0, 0, 0, 697, 0, 0
- , 0,94218, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,39221, 0,275766,72230, 0,286771
- , 0, 0, 0, 0, 0, 0,72239,72240,72241,72242
- ,72243,72244, 0, 0,72247,72248,72249,72250, 0,72252
- ,72253,72254, 0, 0,39251,39252,72259, 0,39255, 0
- , 0, 0, 0,39260, 0, 0, 0, 0,182291, 0
- , 0,132785, 0,160292, 0, 0, 0, 0, 0,99787
- , 0, 0, 0,281324,281325, 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,182342
- , 0,88827, 0,182346, 0, 0, 0, 0, 0,220859
- , 0, 0, 0, 0,182357, 0,39333, 0, 0,171360
- , 0, 0,182365, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,99860, 0, 0, 0, 0,154875, 0,154877
- ,99868, 0,99870, 0,39361,39362, 0, 0, 0,39366
- , 0, 0,99880,99881, 0, 0, 0, 0, 0, 0
- , 0,99889,215411, 0, 0, 0,39383, 0, 0, 0
- ,154908, 0,39389, 0, 0,39392,154914, 0, 0,99907
- , 0,99909, 0,176925, 0, 0, 0, 0, 0,44907
- , 0,44909, 0,99921, 0,99923,99924, 0, 0, 0
- , 0,248456,83427, 0, 0, 0,17419, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,44939, 0, 0, 0,44943, 0,215476,99956, 0
- , 0,17444, 0, 0,83459,83460,83461, 0, 0, 0
- ,154978, 0, 0, 0, 0, 0,287008, 0, 0, 0
- , 0,154989, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,83489,83490,83491,83492, 0, 0
- ,83495, 0, 0,83498, 0,83500, 0, 0, 0, 0
- ,155018, 0,94509,94510, 0, 0, 0, 0, 0,177031
- ,28505, 0, 0,155031,155032,155033,155034,155035,155036, 0
- ,39517, 0, 0, 0, 0,100033, 0, 0,155046,155047
- ,155048, 0,94539, 0, 0, 0,94543,94544, 0,122051
- ,67042, 0,94549,276083,122056, 0, 0, 0, 0, 0
- , 0,45049, 0, 0, 1044,12047,45054,83562, 0, 0
- , 0, 0, 0,12055,100072,12057, 0,100075, 0,100077
- , 0,100079,100080,100081, 0, 0, 0,100085, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,12083,12084,12085, 0,83600, 0, 0, 0,12091
- , 0, 0,12094,12095, 0,12097,12098,12099, 0, 0
- ,83615, 0, 0, 0, 0,210143, 0, 0,83623, 0
- , 0, 0,155140,83628, 0, 0, 0,83632, 0, 0
- ,83635, 0,171653, 0, 0, 0, 0, 0, 0, 0
- ,50639, 0,237675, 0,94651,94652,94653,210175,210176,210177
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,237693, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,210205,210206,210207
- , 0,89187,254218, 0, 0, 0,210214,100195,210216, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,215727,237732
- , 0,215730, 0, 0, 0, 0, 0,34203,177230, 0
- ,17703, 0,72715,72716,72717, 0, 0,72720,182741,259756
- , 0, 0,199248, 0, 0,210253, 0, 0, 0,210257
- , 0, 0, 0, 0, 0, 0, 0,94744,94745, 0
- , 0,94748,72745,72746,72747,72748, 0, 0,72751, 0
- ,210278,72754, 0,72756, 0, 0, 0, 0,276298, 0
- , 0,210289, 0,215792, 0, 0, 0, 0, 0, 0
- , 0,94778, 0,61774, 0, 0,276316, 0,276318, 0
- , 0,171802,94789,94790,94791, 0, 0, 0,210316,210317
- ,210318, 0, 0,111303, 0, 0, 0, 0, 0,111309
- , 0, 1291,111312, 0,210332, 0,210334,210335,210336, 0
- , 0,210339,210340, 0,210342,72818, 0, 0,210346, 0
- ,210348,204848,39819,210351,94831, 0,72829, 0, 1318, 0
- , 0, 0, 0, 0, 0, 0, 0, 1327, 0, 0
- , 0, 0, 0,237876, 0, 0, 0, 0, 0, 0
- , 0,122363, 0,72856, 0, 0,39853, 0,276398, 0
- , 0, 0, 0, 0,72867, 0,210394, 0,72871,72872
- , 0,72874,72875,72876, 0, 0,72879,72880,72881,72882
- , 0,72884,72885,72886, 0, 0, 0, 0, 0, 0
- ,39887, 0,226923, 0,226925,39892, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,133422,133423
- , 0, 0,116923, 0, 0,133429,105925,105926, 0,105928
- , 0,23415, 0,226954,226955, 0,133440,105936, 0, 0
- , 0,226962, 0,226964, 0, 0,39933, 0, 0, 0
- , 0,23435,259979, 0,116955,116956, 0, 0, 0, 0
- , 0,259988,89458, 0, 0, 0, 0, 0,182981, 0
- ,67462,23455,56462, 0, 0, 0, 0, 0,39965, 0
- ,67472, 0, 0, 0,116985,116986,116987,116988, 0, 0
- ,116991, 0, 0,116994,194009,116996, 0, 0,183011,105998
- , 0,260028,260029,260030,260031, 0, 0,39994,128011, 0
- ,106009,39998, 0, 0, 0, 0, 0,40004, 0, 0
- ,40007,40008, 0,40010,40011,40012, 0, 0,40015,40016
- ,40017,40018, 0,40020, 0,40022, 0, 0, 0, 0
- , 0, 0, 0, 0,227065,227066, 0, 0, 0,227070
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,106059,106060,106061,106062, 0,106064, 0, 0, 0, 0
- , 0, 0, 0,227094, 0,227096, 0,73070, 0,73072
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,111589
- , 0, 0, 0, 0, 0,117096,117097,117098, 0, 0
- ,287632,117102, 0, 0, 0, 0, 0, 0,287640, 0
- ,117111,117112,117113,117114, 0, 0, 0, 0,117119,117120
- ,117121,117122, 0,117124,117125,117126,117127,117128, 0, 0
- ,117131,183144, 0,183146, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,243671,243672,243673
- , 0,40138,73145, 0, 0, 0, 0, 0, 0, 0
- ,177672, 0, 0, 0,243688, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,243701,243702, 0
- , 0,73174, 0,243707,95181,73178,243710,150194,243712, 0
- , 0, 0, 0, 0,122696, 0, 0, 0, 0, 0
- , 0, 0,73195,73196,73197,73198, 0,73200,73201,73202
- , 0,73204, 0, 0, 0, 0, 0, 0, 0,117220
- ,122722,117222, 0,117224, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,51223,254761, 0, 0, 0, 0
- ,122742, 0,106241,106242,106243,106244, 0, 0,106247, 0
- ,243774,106250, 0,106252, 0, 0,260283, 0, 0,260286
- , 0,243785,243786, 0,243788, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,23759, 0, 0, 0,23763
- , 0,23765, 0, 0, 0, 0, 0,293320,243812, 0
- ,243814, 0, 0, 0, 0,293328, 0,144803, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,254835
- , 0, 0,243836, 0,243838,106314,243840,243841,243842,243843
- , 0,238344, 0,243847,40311, 0,106325, 0, 0,23813
- , 0, 0, 0,276863, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,155853, 0,67839, 0, 0
- ,67842, 0, 0,106352,106353,106354,276886,276887, 0,106358
- , 0, 0, 0,276893, 0, 0, 0, 0,106367,106368
- ,106369,106370,106371, 0, 0, 0,106375,106376,106377, 0
- ,89876, 0, 0,106382,106383,106384, 0, 0,106387, 0
- , 0, 0, 0, 0, 0, 0, 0,194412, 0,177911
- ,194415, 0, 0, 0, 0, 0,144912, 0, 0,18392
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,111929
- ,205447,177943,177944,177945, 0, 0, 0, 0, 0,188953
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,205470,205471, 0, 0, 0, 0, 0
- ,205477, 0, 0,177975,177976, 0,95463,177979, 0, 0
- ,177982, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,271509, 0, 0,161492,161493, 0, 0, 0, 0, 0
- , 0,255017, 0, 0,255020, 0,111996,211015,111998, 0
- , 0, 0, 0,255029, 0, 0, 0, 0,227529, 0
- , 0, 0, 0, 0,161523, 0, 0, 0, 0, 0
- , 0,255047, 0, 0, 0, 0, 0, 0, 0, 0
- ,255056, 0, 0,255059, 0, 0, 0, 0,161547, 0
- , 0, 0, 0, 0, 0,178057, 0, 0, 0, 0
- , 0, 0, 0, 0,51543, 0, 0,255083, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,227590
- ,227591, 0, 0,178085,178086, 0,227597, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,183599,178099,178100,178101
- ,178102, 0,178104, 0, 0,178107,178108, 0,178110, 0
- , 0,178113, 0, 0, 0,172616, 0,178119, 0,161618
- , 0, 0,255138,255139,255140,255141, 0,255143,183631,183632
- ,183633,255147,255148,255149, 0, 0, 0,62618,255154, 0
- ,255156,255157, 0, 0, 7615, 0, 0, 0,178150, 0
- , 0, 0, 0, 0,194659, 0, 0, 0,183661,183662
- ,183663,183664, 0, 0,183667, 0, 0, 0, 0,183672
- , 0, 0,271691, 0, 0, 0, 0, 0,18651, 0
- ,35156, 0, 0, 0, 0, 0,194691, 0,194693,266207
- , 0, 0, 0, 7664, 0, 0, 0, 0,260715,128692
- , 0, 0,29677, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,222223, 0, 0,194721,194722,194723,194724
- , 0, 0,194727, 0, 0,194730,260743,194732, 0,73712
- ,73713,183734, 0, 0, 0, 0, 0, 0, 0, 0
- ,260757, 0,183745, 0,260761, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,156258, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,183774,29747, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,238795,260800, 0, 0,183789, 0,183791, 0
- ,40767, 0, 0,183796,183797,183798, 2266,183800,183801,183802
- , 0,183804, 0,13275,183807, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,40799,40800,40801, 0,271845,194832,194833, 0
- , 0, 0,95819,194838, 0,13307, 0,13309, 0, 0
- ,13312,95828,194847,194848,194849, 0,194851,194852, 2318, 2319
- ,194855, 0, 0, 0,40831, 0, 0,194862, 0,194864
- ,205867,40838,194867, 0, 0,13337,13338,13339,13340, 0
- , 0,13343, 0, 0,13346, 0,13348, 0, 0, 0
- ,117871, 0, 0, 0, 0, 0,238899, 0, 0,24363
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,40881, 0, 0, 0, 0, 0
- , 0, 0, 0,117904, 0, 2385, 0,13389, 0, 0
- ,238933, 0, 0, 0, 0,40902, 0, 0, 0,156427
- , 0, 0, 0, 0, 0, 0,40913, 0,13410, 0
- , 0, 0,117933,117934, 0,117936, 0,161946, 0, 0
- , 0, 0, 0,117944,238967, 0,156454,238970, 0, 0
- ,260977, 0,260979,40940,40941,40942, 0, 0, 0,40946
- , 0,156469, 0, 0, 0, 0, 0, 0, 0, 0
- ,40957, 0, 0, 0, 0,13457, 0, 0,40965,40966
- , 0, 0, 0, 0, 0, 0, 0,156495, 0, 0
- , 0,13473, 0, 0, 0, 0, 0, 0, 0, 0
- ,46488, 0, 0, 0, 0, 0, 0,250032, 0,294042
- , 0,239034, 0, 0, 0, 0, 0,173028, 0, 0
- , 0, 0,239045, 0, 0, 0, 2506, 2507, 0,46517
- ,46518,46519,46520, 0, 0,46523, 0,195052, 0, 0
- , 0, 0, 0,118044,118045,118046, 0, 0,162057, 0
- ,239073,239074, 0, 0, 0, 0,118057, 0,118059,118060
- ,118061,118062,118063,118064,239087,239088, 0, 0, 0, 0
- , 0,118072, 0, 0, 0, 0,112576,239100, 0,239102
- , 0,239104, 0, 0,239107, 0, 0, 0, 0, 0
- , 0, 0,217111, 0,90590,30080, 0, 0, 0, 0
- , 0,129104,129105,129106, 0,178617, 0,250132, 0,250134
- , 0, 2591,217131, 0,134618,239138,134620, 0, 0, 0
- , 0, 0,134626, 0,134628, 0, 0,134631, 0, 0
- ,250155,250156,250157,250158, 0,250160, 0, 0,250163,250164
- , 0, 0, 0, 0,96141,134649,46634, 0, 0,134653
- , 0, 0,228173, 0, 0, 0, 0, 0,134662, 0
- ,173171, 0, 0,134667, 0,134669,46654, 0, 0, 0
- ,46658,46659,46660, 0,134678, 0, 0,134681, 0, 0
- ,134684, 0, 0, 0,294217, 0, 0, 0, 0, 0
- , 0,288723,173203,173204, 0, 0,228217, 0,228219, 0
- , 0, 0, 0, 0, 0,211723, 0, 0, 0,272238
- , 0, 0, 0, 0, 0, 0, 0,184230, 0,184232
- , 0, 0,173233, 0, 0, 0, 0,184240, 0,184242
- ,184243,173242, 0,173244,184247, 0,184249,211755, 0, 0
- ,184253, 0, 0,184256,184257, 0, 0, 0,184261, 0
- , 0, 0, 0, 0,184267, 0,173267, 0,156766, 0
- , 0, 0,156770, 0,156772, 0,184279, 0, 0,211787
- , 0, 0, 0,211791,173285, 0, 0, 0,211796, 0
- , 0, 0,184295,184296, 0, 0, 0, 0,134792,134793
- , 0, 0,156800, 0, 0,173306, 0,156805,156806,156807
- ,156808,156809, 0, 0, 0,156813, 0, 0,228329, 0
- ,156818,156819, 0,156821,217333,156823, 0, 0,156826, 0
- ,112820, 0,294355, 0,140329, 0, 0, 0, 0,112829
- ,96327,134835, 0, 0, 0, 0,134840,134841, 0, 0
- , 0, 0,134846, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,173363, 0, 0, 0, 0,173368, 0, 0
- ,85355, 0, 0,173374, 0,173376, 0,19350,173379,19352
- , 0, 0,288904, 0, 0, 0, 0, 0,211896,211897
- ,211898, 0, 0, 0, 0,134889,123888,123889, 0, 8370
- ,85385, 0, 0, 0,211912,211913, 0,211915, 0,85394
- , 0, 0,211920,211921,211922,74398, 0, 0,211926,211927
- ,211928, 0,41399,211931, 0, 0,74409,123919, 0, 0
- ,123922,178933, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,184444, 0, 0,184447,184448,184449, 0,184451,184452
- , 0, 0, 0, 0, 0, 0, 0,184460, 0, 0
- ,184463, 0, 0,184466,74447, 0, 0,112957,74451,74452
- ,74453, 0,74455, 0, 0,206482,74459, 0, 0, 0
- ,255996, 0, 0,74466, 0, 0, 0, 0, 0, 0
- ,41467,107480, 0,41470, 0,41472,184499,184500,184501,145995
- , 0, 0, 0, 0, 0, 0, 0,96494, 0, 0
- ,256026, 0, 0, 0, 0, 0, 0, 0, 0,107508
- ,256036, 0, 0, 0,124016, 0,85511, 0, 0, 0
- , 0,146027,146028,146029,85519,85520,85521,85522, 0,85524
- ,85525,85526, 0,85528, 0, 0,85531, 0,91034, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,146057,146058,146059, 0, 0, 0, 0,41545, 0
- , 0, 0,146068, 0,267092, 0, 0, 0,91064, 0
- ,118571, 0,256098, 0, 0, 0, 0, 0, 0,107578
- , 0, 0, 0,256109,256110,41572, 0,41574, 0, 0
- ,107589,41578,129595,129596,129597, 0, 0,96594, 0, 0
- ,41587, 0,107601,146109, 0, 0, 0,272636,41595,41596
- , 0, 0,256138, 0,41601, 0, 0, 0,107617,107618
- ,41607,278151,129625, 0, 0, 0,107625, 0, 0,140634
- , 0,129634, 0, 0,256160, 0,256162, 0,256164,256165
- , 0, 0, 0, 0,85639, 0, 0, 0,107647,107648
- , 0, 0,107651,223173, 0, 0,261683,261684, 0, 0
- , 0, 0,146168,146169,146170, 0, 0, 0,146174, 0
- ,102168, 0, 0, 0,129677, 0,85671, 0, 0,146185
- ,146186, 0, 0,91179,162693, 0, 0, 0, 0,261716
- ,146196,146197, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 8686, 0,85702,85703,85704
- , 0,223231,85707, 0, 8695, 0, 0,85712, 0, 0
- , 0,190235, 0, 0, 0, 0, 0,206744,41715, 0
- , 0, 0, 0,129736, 0,129738, 0, 0,30723,129742
- , 0,113241,96739, 0,41731, 0, 0, 0,129751,129752
- ,129753, 0, 0, 0, 0, 0, 0, 0,129761, 0
- ,41747, 0, 0, 0,129767, 0, 0,162776, 0, 0
- ,261797,261798, 0,261800,91270, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,190298, 0, 0, 0,146294, 0
- , 0,41778, 0, 0,190308, 0, 0, 0, 0, 0
- , 0, 0,162811,261830, 0,162814, 0,162816, 0, 0
- ,14292, 0, 0, 0, 0, 0, 0,85812,85813,85814
- , 0, 0,261849, 0, 0,261852,261853, 0,261855,261856
- , 0, 0, 0, 0,228855, 0, 0, 0, 0, 0
- ,85835,85836,85837,85838, 0,85840,85841,85842,85843,85844
- , 0, 0,85847, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,118863,41850, 0, 0, 0,190381,190382,162878
- ,190384, 0, 0, 0,41861, 0,129879, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,190409,190410,272926, 0,91395
- ,190414,41888,41889,41890, 0,91401, 0, 0, 0, 0
- ,129913, 0, 0,162922, 0, 0,41903,190431,190432,190433
- ,190434, 0,190436,190437, 0, 0, 0,41914, 0, 0
- , 0, 0, 0, 0, 0,162944, 0,162946, 0, 0
- ,129943,129944,162951, 0, 0, 0,278476, 0,195963, 0
- ,25434, 0, 0, 0, 0, 0, 0, 0,102456,25443
- ,25444, 0, 0, 0, 0,168475, 0, 0, 0, 0
- , 0, 0, 0, 0,74967, 0, 0, 0,47466,47467
- ,47468, 0, 0,47471, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,118996, 0, 0, 0, 3479
- , 0, 0, 0, 0, 0,196020, 0, 0, 0,113509
- , 0, 0,113512, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,130025, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,240059, 0,113538, 0
- , 0, 0, 0,207060,42031, 0,25530, 0, 0,130052
- , 0,130054, 0,168563, 0,130058, 0, 0, 0,69551
- , 0, 0, 3542, 0, 3544, 0, 0, 3547,152075, 0
- , 3550, 0, 0,130076,130077, 0, 0, 0, 0,130082
- ,130083,130084,163091, 0, 0,245609, 0, 0,47576,47577
- ,47578, 0, 0,113593,47582, 3575, 0, 0, 0, 0
- , 0,218120, 0, 0, 0, 0,42093,42094, 0, 0
- ,108109, 0, 0, 0, 0, 0, 0,42104, 0,47607
- , 0, 0,113622,163132, 0, 0,251151, 0, 0, 0
- , 0, 0, 0,284164, 0, 0, 0,256663,108137,108138
- ,108139,108140, 0, 0, 0, 3625, 0,108146,295181,108148
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,157669, 0, 0,53153, 0, 0,119168,119169,212687
- ,212688, 0, 3652, 3653, 3654, 0, 0, 0, 3658,42166
- , 0, 0, 0, 0, 3664, 0, 0, 3667, 3668, 3669
- , 0, 3671, 3672, 0, 0, 3675, 0, 0, 0,119200
- , 3680, 3681, 0, 3683, 3684,119206, 0, 0, 0, 0
- , 0,108210, 0, 0, 0, 0,179728,42204,42205,42206
- , 0, 0, 0, 0,163233,163234, 0, 0, 0,163238
- ,251255,251256, 0, 0, 0, 0, 0, 0, 0, 0
- ,42227,42228, 0,42230, 0,42232, 0, 0, 0, 0
- , 0, 0, 0,163262, 0, 0, 0, 0,163267, 0
- ,251285,251286,251287,251288,295297,295298,251291, 0, 0, 0
- , 0,251296,108271,108272,108273,108274, 0,108276,108277,108278
- , 0, 0, 0, 0,108283, 0,196301, 0,196303,196304
- , 0, 0, 0, 0, 0, 0,223816, 0,47786,47787
- , 0, 0, 0, 0, 0,47793, 0,119308, 0,119310
- , 0, 0, 0,119314, 0, 0, 0, 0,262345, 0
- , 0, 0, 0,223843, 0, 0,229347, 0,20311, 0
- ,119331,119332,119333, 0, 0,119336,119337,119338,119339,119340
- , 0, 0,119343, 0,251369,251370, 0,251372, 0,124851
- ,179862, 0, 0, 0, 0, 0, 0, 0,53347,207376
- ,42347, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,196385,251396,251397,251398, 0, 0,31361, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,212909, 0,42380, 0,251420, 0, 0, 0, 0
- , 0,251426,251427, 0, 0, 0, 0,163416, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,69911
- , 0, 0,42409,42410, 0, 0,108425, 0,42415,152436
- , 0,42418, 0,42420, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,20427, 0, 0, 0, 0,251474
- , 0, 0,14934,14935, 0, 0, 0, 0, 0,14941
- , 0,14943,256988, 0, 0, 0, 0,240490,240491, 0
- , 0,267999,240495, 0,240497, 0, 0,240500,240501, 0
- , 0,240504,240505, 0,64475, 0,240509, 0, 0,36975
- ,240513, 0,240515, 0, 0,42482,240519, 0, 0,240522
- ,262527, 0, 0, 0,240527, 0, 0,97504, 0,97506
- , 0,295544, 0, 0, 0,240538, 0, 0,240541, 0
- ,240543, 0, 0,37009, 0, 0, 0,108526, 0, 0
- , 0, 0,196547,42520,42521,42522, 0, 0, 0,42526
- , 0, 0, 0, 0,185557,240568, 0, 0,42535, 0
- , 0,37037, 0, 0,37040,224075,42543, 0,42545,42546
- ,37046,42548, 0, 0,42551, 0,108565, 0, 0, 0
- ,130573,108570, 0, 0, 0, 0, 0,158085, 0, 0
- , 0, 0, 0, 0, 0, 0,279116, 0,108587,108588
- ,108589, 0, 0,108592,108593,108594,108595,108596, 0, 0
- ,108599, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,279143, 0, 0,246140, 0, 0, 0
- , 0, 0, 0, 0,37110, 0, 0, 0, 0,240652
- ,240653,240654, 0, 0, 0,37121, 0, 0, 0, 0
- , 0,114141, 0, 0, 0,125147, 0, 0,273677, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0,119662,37148,37149,37150, 0, 0, 0,37154,240692
- , 0, 0, 0,240696, 0, 0, 0,240700,240701,240702
- ,240703, 0,240705, 0, 0, 0, 0, 0, 0,240712
- , 0, 0,37178, 0,37180, 4175, 0,37183, 0, 0
- ,31685, 0, 0, 0, 0,240728, 0, 0,42695,42696
- ,42697, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,240747,240748,240749, 0, 0, 0
- , 0, 0, 0,15215, 0, 0, 0, 0,42725,42726
- ,42727,42728, 0, 0, 0, 0, 0,42734, 0,42736
- , 0, 0, 0, 0,229775,295788,15238,15239, 0, 0
- , 0, 0, 0,15245, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,26271, 0, 0
- , 0, 0, 0,163802, 0, 0, 0, 0, 0, 0
- ,64791,147307, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,163822,70306, 0, 0, 0, 0, 0
- , 0, 0,42809, 0,130827, 0, 0, 0,119829, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 9822, 0, 0,26328, 0,196861, 0,64839,42836
- ,42837,42838, 0, 0,64845,42842, 0, 0,130861, 0
- , 9841, 0, 0, 0,42851, 0, 0, 0, 0, 0
- ,268398, 0,42859,42860,42861, 0, 0,42864,42865,42866
- ,42867,42868, 0, 0, 0, 0,130889,130890, 0,130892
- ,268418, 0,130895,163902,279424,130898, 0,130900, 0, 0
- , 0, 0, 0, 0, 0,224425, 0,290439, 0,290441
- ,20893, 0,290444, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,196943, 0
- , 0,169441, 0,114433, 0, 0, 0,290469, 0, 0
- , 0,20924, 0,290475,20927, 0,290478, 0,290480, 0
- , 0, 0, 0,224473, 0, 0, 0, 0,273987,130962
- , 0, 0, 0, 0, 0,235487,235488, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,70471
- , 0, 0, 0, 0, 0, 0,274015, 0, 0, 0
- ,219009, 0,42979, 0, 0, 0, 0,131000,131001,131002
- , 0, 0, 0,131006, 0, 0, 0,153014,153015, 0
- , 0,70503, 0, 0, 0,131018, 0, 0, 0, 0
- ,131023, 0, 0,131026,43011, 0, 0,131030, 0,131032
- , 0, 0,131035,290565, 0, 0,246560, 0, 0, 0
- , 0,70533,70534, 0,70536, 0, 0, 0,290580, 0
- , 0, 0,70544, 0, 0, 0,43043,43044, 0, 0
- , 0, 0, 0, 0, 0,43052, 0, 0,10049, 0
- , 0,290603,290604,290605, 0, 0, 0,290609,290610, 0
- , 0, 0,257608,290615,268612, 0,26570,26571,257614, 0
- ,257616, 0, 0, 0, 0, 0,109095, 0, 0, 0
- , 0, 0,26586, 0,26588,26589, 0,175118, 0, 0
- , 0, 0,54101, 0, 0, 0,26600, 0, 0, 0
- ,26604, 0, 0, 0, 0, 0, 0,43114, 0, 0
- , 0,147637, 0,268661, 0, 0, 0,268665,43125, 0
- , 0, 0, 0, 0,120145, 0,186159,186160,186161, 0
- , 0, 0, 0,70645,70646, 0, 0, 0,70650, 0
- , 0,26645,26646, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,26657, 0, 0, 0, 0, 0, 0
- , 0, 0, 0,70675,70676,186198,252211, 0,43175,43176
- , 0, 0,257718, 0,43181,43182, 0,43184, 0, 0
- ,43187, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,257740,257741,257742,131220,257744,257745
- ,257746, 0,257748, 0,81718,257751, 0,26711, 0,26713
- , 0,224751, 0, 0, 0, 0, 0, 0, 0, 0
- , 4720, 0, 0,252268, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,65250
- ,186273, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,263312,263313,186300, 0,186302
- , 0, 0, 0, 0,54283, 0,114796, 0, 0, 0
- , 0, 0,186315,186316,186317,186318,186319,186320, 0, 0
- ,186323,186324,186325, 0, 0,186328,186329, 0,186331,186332
- , 0,26805,186335,114823,26808, 4805, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,274368
- , 0, 0, 0, 0, 0, 0, 0,246871,164357, 0
- , 0, 0, 0,186366,26838,26839, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,26849,26850,26851,26852, 0
- ,191884, 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,26885,26886,26887, 0, 0, 0, 0, 0, 0
- , 0,285442, 0, 0, 0, 0, 0, 0,26902, 0
- ,241443,26905, 0,175434, 0, 0,120427, 0,54417, 0
- ,54419, 0,26916, 0, 0,26919,26920, 0,142443, 0
- ,241463,26925, 0,158951, 0, 0,142451,147953, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- ,186473, 0, 0, 0,164473,164474, 0, 0, 0, 0
- , 0, 0, 0, 0,70966,158983,158984, 0,26962,26963
- ,26964,26965,26966,26967,26968,26969,26970,26971, 0,26973
- , 0, 0, 0, 0,214012,26979, 0, 0,70990, 0
- , 0,170011,252527, 0, 0,159013,159014,159015,159016, 0
- , 0,159019,54501, 0, 0, 0, 0, 0,131521, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,170044,170045, 0,236059, 0,54528
- ,54529, 0, 0,27027,27028,27029, 0,27031,27032,27033
- ,27034,27035, 0, 0, 0, 0, 0,49045, 0,252584
- ,236082, 0, 0,170073, 0,170075, 0, 0, 0, 0
- , 0, 0,170082, 0,170084,258101, 0,236099,159086,236101
- , 0, 0, 0, 0, 0, 0, 0, 0, 0,159097
- , 0,247115, 0, 0,236116,115095,148102, 0, 0,236121
- ,236122, 0,236124,236125, 0,236127,236128,236129,236130,236131
- , 0,236133,236134, 0, 0, 0, 0, 0,159126,236141
- , 0,236143,159130, 0, 0,247149,49114, 0, 0,27113
- , 0, 0, 0, 0, 0,32620, 0,27121, 0,159147
- , 0, 0,159150,27127,159152,159153,159154, 0, 0, 0
- , 0,159159, 0,247177,247178,247179,247180, 0, 0,247183
- , 0, 0,247186, 0, 0, 0, 0,131670, 0, 0
- ,27154,27155, 0,71165,170184,170185,170186, 0, 0, 0
- ,170190,27165, 0,27167,27168, 0, 0, 0, 0, 0
- , 0, 0,164701, 0, 0, 0, 0,170207,170208,170209
- ,170210, 0, 0,170213,170214,170215, 0,230728, 0,170219
- , 0, 0, 0,27197, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,247250, 0, 0, 0
- , 0,82225, 0,214251, 0, 0, 0,247261, 0, 0
- , 0, 0, 0, 0,54733, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0,10743, 0,247288, 0, 0,214285,164777,148275
- ,247294, 0,131775, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,93280,175796, 0,247311,247312,247313
- ,247314, 0,247316,247317,247318, 0, 0,214315,214316,247323
- , 0,214319, 0, 0, 0,131808, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0,219835, 0, 0,219838
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,131837,131838,131839,131840, 0, 0
- ,131843, 0, 0,131846,296877, 0,148352,214365, 0,131852
- , 0, 0,170362, 0, 0,82349, 0, 0, 0, 0
- , 0, 0, 0, 0, 0,120866, 0, 0, 0, 0
- , 0,263898, 0,49361, 0, 0, 0, 0, 0,214397
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,186910, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0,214426,32894
- ,159418, 0, 0, 0, 0,32900, 0, 0, 0, 0
- ,115420, 0,214440,214441,214442,214443,214444, 0, 0,214447
- ,214448, 0, 0, 0,214452,214453,214454, 0, 0, 0
- , 0, 0, 0,32928, 0, 0,131949,131950, 0, 0
- , 0, 0,181464,98950,32939, 0,98953, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0,98964, 0, 0
- , 0, 0,214490,131976,131977,131978, 0,131980, 0, 0
- ,131983, 0,220001, 0, 0,82479, 0,231008, 0,71481
- , 0, 0, 0,187006, 0,192509, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0,286045, 0, 0, 0, 0, 0
- ,99017,286093,192576,121063,49550,269592,192578,159583,121076,99073
- ,33061,231109,33073,225627,159615,159616,148614,93606,88105,93607
- ,88106,214635,93613,231152,82625,38617,231153,38618,170643,38619
- ,159645,38623,225659,159647,225660,159648,38626,22123,159651,121144
- ,192658,11125,121150,55138,253181,121157,280688,121159,82652,55147
- ,220183,121165,99161,82658,170677,115667,225689,121170,225691,121172
- ,99168,225692,121173,99169,22155,99170,82667,22156,225695,99172
- ,225698,99175,159697,82683,49677,170707,77190,286234,181715,22186
- ,170714,154211,38690,22187,99202,22188,170716,99203,225741,159729
- ,247760,154243,247761,154244,225762,38728,33227,71735,38729,242271
- ,159756,38734,181761,159757,225773,181765,159761,209272,181767,159763
- ,27739,247788,159772,159773,38751,33250,159774,154273,38752,33251
- ,247791,159775,154274,38753,170778,159776,154275,38754,159779,38757
- ,275301,159780,154279,38758,33257,159781,38759,159782,38760,154282
- ,71767,159784,71768,159785,154284,71769,38763,170789,159787,225800
- ,159788,225801,99278,225806,22269,264322,225815,264325,225818,225820
- ,132303,225825,71797,225826,187319,170816,71798,242330,170817,71799
- ,225828,170818,71800,225831,71803,225832,170822,220332,22296,71806
- ,22297,225835,22298,192832,154325,264352,170835,264353,192840,170836
- ,170840,33315,170844,82828,258862,247860,170846,181849,170847,22320
- ,170848,22321,154346,22322,170851,22324,16823,247874,154357,247889
- ,181877,231387,181878,154385,71870,154386,82873,82874, 359,99378
- ,82875,82883,71881,225926,154413,225927,154414,225928,154415,121409
- ,269944,93912,71908,236939,71909,38903,187431,71910,38904,181931
- ,38905,181936,148930,88419,71927, 414,187449,71928,71939,38933
- ,71940,38934,121457,38942,181978,121467,49954,171044,143539,72051
- ,39045,275617,39074,220608,39075,72085,39079,72113, 600,72114
- , 601,259149,72115,286655,72116,286673,215160,72165,33658,237215
- ,50181,176714,94199,72197,28189,270260,72224,72225,39219,72226
- ,39220,220782,72255,39249,72256,39250,39258,17254,275843,198829
- ,154843,39322,264888,143866,99858,154876,99866,99871,50362,39360
- ,253902,171387,209899,182394,209904,99884,99885,44875,215414,99893
- ,28380,154905,39384,154906,39385,33884,154907,39386,99899,39388
- ,154911,39390,99902,39391,17387,154916,39395,99918,44908,154957
- ,44937,99948,44938,259479,44940,100005,55997,155016,94505,259536
- ,155017,155022,94511,94526,39516,155039,67023,155040,94529,155041
- ,45021,12015,155042,100032,155044,100034,281568,155045,155051,94540
- ,276086,12038,45048,39547,12042,45050,12044,100076,83573,39565
- ,100078,67072,100082,45072,39571,199101,100083,45073,100084,45074
- ,100086,94585,45076,199105,100087,94586,45077,100088,94587,45078
- ,12072,100089,94588,45079,100090,94589,45080,100091,94590,100092
- ,94591,100093,94592,12077,160605,100094,94593,12078,94594,12079
- ,94595,12080,160608,94596,89095,12081,94597,12082,100102,12086
- ,94603,83601,94604,83602,12089,94605,12090,100108,12092,83606
- ,12093,100127,83624,100128,83625,100129,83626,155142,116635,83629
- ,155143,83630,155144,83631,210208,72683,210211,39680,100193,39682
- ,276249,39706,259767,94737,259809,94779,177307,94792,210322,72797
- ,232332, 1290,232335,210331,210333,127818,210341,204840,56313,210344
- ,34312, 1306,210345, 1307,210347,50818, 1309,243363,12321,270877
- ,72841,105863,72857,39851,72858,39852,199385,72862,226891,199386
- ,199387,149878,199388,72865,72873, 1360,72887,39881,72888,39882
- ,270925,243420,105895,39883,105896,39884,105897,72891,226924,39890
- ,133432,105927,39915,226953,105931,226956,105934,226959,122440,210474
- ,116957,182980,39954,293012,67471,227026,39992,72999,39993,227037
- ,183029,210536,40005,183035,106021,40009,199550,40021,117037,40023
- ,271066,106036,40024,106037,73031,106038,73032,194055,73033,40027
- ,227064,106042,221577,128060,117058,227087,106065,67558,227088,106066
- , 1547,227089,117069,106067,73061,18051, 1548,227090,106068,73062
- , 1549,100568,73063,227092,73064,227093,106071, 1552,227095,73067
- ,227099,111578,122616,117115,243639,117116,73134,40128,205161,34630
- ,122673, 1651,243703,73172,243704,106179,73173, 1660,73203,40197
- ,106211,40199,106212,40200,106213,73207,122724,117223,227252,161240
- ,254764,122740,243813,221809,172300,243818,106293,254837,243835,243837
- ,89809,243844,122822,128376,106372,249404,133883,106378,133885,106380
- ,106381,89878,243985,177973,177974,89958,177984,122974,255028,123004
- ,178025,68005,23997,255044,205535,255060,178046,260599,178084,178090
- ,112078,266119,178103,178109,24081,178112,161609,255128,178114,161611
- ,178115,161612,178116,161613,255134,62599,255137,161620,293649,255142
- ,183670,62648,260704,194692,249720,68187,222220,183713,194773, 2238
- ,183772,156267, 2239,183773,156268,244289,183778,183787, 2254,238798
- ,183788,183790, 2257,194794,183792,183795,95779,194805,183803,194834
- ,29804,123328,13308,194850,189349,194856, 2321,282873,194857,40829
- ,194858,40830, 2323,194860,40832,194861,156354,194863,40835,123355
- ,40840,260927,51889,189416,117903,189418,117905,172917, 2386,238931
- ,200424,172919,260936,238932,172920,249959,117935,238961,117939,238962
- ,13421,266468,238963,238964,117942,183955,156450,194960,90441,156456
- ,51937,260976,238972,260978,156459,13433,249991,211484,117967,40953
- ,13448,249992,46455,13449,249993,40955,13450,227990,40956,40958
- ,13453,40959,13454,62964,40960,13455,156484,40963,40964,13459
- ,156489,40968,13463,156490,40969,13464,156491,40970,13465,189498
- ,156492,117985,40971,13466,156493,40972,13467, 2465,156494,13468
- ,156496,40975,156497,13471,239013,173001,156498,128993,13472,128995
- ,13474, 2472,156501,128996, 2473,156502,13476, 2474,156503,106994
- ,13477,250021,13478,250022,156505,13479,277528,250023,13480,250024
- ,184012,156507,46487, 7980,156509,46489,13483,250027,156510,156511
- ,101501,250030,118006,118017,18999,173029, 2498,173030, 2499,239072
- ,118050,239078,118056,239089,118067,239090,118068,239091,118069,112568
- ,250094,239092,118070,239095,118073,239096,118074,239097,129077,118075
- ,239098,118076,239101,118079,250105,239103,178601,52078,41076,250133
- ,178620,250138,46601,283157,134630,250161,134640,250162,134641,244664
- ,134644,46628,134645,46629,250167,162151,123644,46630,46656,41155
- ,123671,46657,134683,118180,288726,173205,228220,162208,134708,30189
- ,239233,79704,173234,52212,294257,173235,184238,173236,173239,52217
- ,184248,156743,24719,211756,184251,211757,184252,184265,35738,184274
- ,134765,211785,156775,211786,184281,211788,74263,211794,184289,184290
- ,156785,228301,184293,250315,134794,156810,74295,156811,74296,156812
- ,74297,173317,156814,129309,228328,184320,74300,228330,156817,156825
- ,112817,211837,156827,112828,85323,140337,134836,74325,173344,74326
- ,173345,134838,74327,173346,134839,74328,134842,74331, 2818,173350
- ,134843,211858,134844,134845,74334,134847,74336,134848,112844,173356
- ,134849,173357,134850,250372,134851,173359,134852,173360,134853,173361
- ,134854,211869,173362,195368,173364,173367,112856,261385,173369,134862
- ,173370,112859,173372,140366,85356,173373,85357,19345,184377,173375
- ,134868,134887,112883,272413,211902,134888,74377,184404,96388,85386
- ,184405,85387,211911,184406,85388,211914,206413,96393,85391,211916
- , 8379,211919,85396,211924,96403,222927,211925,272453,178936,112928
- ,74421,255963,184450,162446,184453,112940,184454,123943,228463,184455
- ,112942,184456,74436,211962,184457,107443,74437,41431,206462,184458
- ,74438,41432,184459,41433,184461,96445,184462,74442,184464,90947
- ,184465,74445,184474,74454,206480,85458,74456,184480,74460,41454
- ,228489,74461,255995,173480,74462,255997,74464,228493,74465,85469
- ,74467,41461,74468,41462,107475,68968,41463,107476,41464,107477
- ,74471,256025,96496,256027,85496,256028,85497,124005,85498,19486
- ,256031,124007,124008,107505,124009,107506,85502,256034,118509,107507
- ,124014,107511,107514,96512,107516,96514,85527,52521,206562,25029
- ,140552,118548,41534,146060,91050,146063,91053,146066,129563,256112
- ,41573,256136,113110,41597,256137,250636,41598,102111,41600,228636
- ,41602,256142,41603,107616,41604,223143,195638,129626,107622,261651
- ,146130,129627,140630,129628,129631,107627,256159,129636,256161,146141
- ,256166,107639,256167,107640,256168,107641,107642,19626,256171,107644
- ,223166,107645,223167,107646,261685,19641,146183,85672,146184,85673
- ,162690,146187,118682,52670,146188,19665,146191,91181,261713,146192
- ,91182,261714,146193,91183,19670,289220,261715,146194,261719,146198
- ,146199,113193,146200,25178,261722,129698,261724,146203,129709,85701
- ,85710, 8696,162743,129737,129754,113251,228773,129755,228774,190267
- ,151760,129756,228775,190268,228776,190269,129759,124258,129760,124259
- ,261786,129762,129764,41748,129765,41749,129766,124265,69255,129768
- ,91261,162775,124268,162777,129771,91275,85774,190297,69275,217804
- ,190299,190300,146292,190303,146295,146296,85785,41777,190306,41779
- ,52782,41780,162805,41783,261824,162806,261825,162807,261826,162808
- ,96796,41786,41788, 8782,261847,256346,261848,256347,19804,261850
- ,85818,261854,256353,118832,25315,261859,118833,85827,201372,190370
- ,190378,140869,162889,118881,272923,190408,162916,41894,162917,129911
- ,91404,162918,129912,190438,41911,190439,41912,190440,41913,190443
- ,41916,162939,41917,162940,41918,162941,41919,162942,41920,162945
- ,41923,278468,162947,129941,162948,129942,250969,129947,129950,47435
- ,129952,47437,289509,47465,130014,113511,229052, 3511,53021, 3512
- ,124535, 3513,163059,130053,97047,168571,47549, 3541,267591, 3543
- ,130075, 3552,273104,130078,108075,42063,130080,42064,130081,42065
- ,163092,75076,163093,130087,108107,42095,108108,42096,163121,42099
- ,201629,163122, 3593,163123,47602,163124,42102,163127,47606,113620
- ,47608,163130,113621,119135, 3614,229165,108143,119167,53155,163194
- , 3665,42177, 3670,163205,119197, 3676,119198, 3677,251223,119199
- , 3678,119203, 3682,119208, 3687,240245,108221,163232,42210,251257
- ,42219,196257,42229,163255,42233,163256,42234,163257,42235,163258
- ,108248,42236,130253,108249,163260,108250,163261,42239,163263,130257
- ,163264,108254,251294,130272,119270,119281,108279,168791,108280,251333
- ,119309, 3788,251358,119334,278870,113840,168879,31354,251402,168887
- ,108391,42379,251419,42381,251421,97393,251422,196412,196413,97395
- ,251424,196414,97396,251425,14882,251428,130406,251431,14888,108423
- ,69916,42411,108424,42412,201967,14933,256980,108453,20437,240478
- ,108454,108455,14938,240480,108456,108459,14942,240486,108462,240488
- ,108464,97477,53469,240529,42493,202024,97505,295545,119513,240544
- ,37007,147028,37008,108537,64529,229570,147055,218571,37038,240576
- ,37039,42544,37043,42549,37048,202079,42550,108564,42552,108566
- ,15049,42555,15050,15061, 9560,251616,108590,262629,240625,240695
- ,207689,240697,169184,240698,207692,240699,42663,240704,213199,240706
- ,218702,240707,213202,240708,37171,240709,37172,240710,37173,240711
- ,37174,240713,37176,240714,196706,37177,37179, 4173,240722,125201
- ,31684,257245,130722,163753,42731,290343,229832,163820,42798,268349
- ,15303,130859,92352,130860, 9838,290407,42862,42871, 4364,268416
- ,130891,290440,20891,290470,130941,20921,290471,20922,290472,20923
- ,235485,224483,268498,130973,86965,290542,186023,120011,131015,70504
- ,186026,131016,70505,153021,131017,131019,32001,257543,131020,290553
- ,131024,131025,21005,131028,43012,131029,43013,131031,98025,274072
- ,70535,235569,70539,290581,257575,21032,290582,257576,70542,21033
- ,257577,21034,290586,257580,43041,43042,21038,131063,43047,131066
- ,43050,290606,235596,235597,164084,70567,21058,10056,290608,235598
- ,10057,290611,257605,21062,290612,257606,169590,21063,257607,26565
- ,21064,257611,26569,268621,70585,186127,70606,268643,26599,87114
- ,26603,70617,26609,257678,70644,257689,92659,26647,70656,26648
- ,70657,43152,26649,43153,26650,70659,43154,26651,70660,26652
- ,70661,26653,274199,70662,26654,70663,43158,26655,268700,92668
- ,70664,26656,257701,70667,186189,70668,186190,70669,186191,70670
- ,186192,147685,26663,70672,43167,26664,70673,26665,186195,70674
- ,186200,70679,257716,43177,257717,43178,120194,43180,257722,158704
- ,43183,10177,120212,48699,257739,120214,274250,257747,224748,186241
- ,26712,186262,76242,65262, 4751,186301,70780,186306,120294,186326
- ,26797,186330,180829,180832,147826,26804,246868,98341,70855,43350
- ,268959,54420,26915,158985,26961,269016,26972,203012,148002,26980
- ,230518,26981,159022,148020,159024,148022,170043,131536,54530,27025
- ,236086,170074,236088,170076,236091,170079,236123,115101,10582,236126
- ,115104,236135,208630,208631,87609,236138,159124,236139,159125,236142
- ,208637,247147,208640,247148,49112,170146,27120,98635,32623,27122
- ,159148,43627,27124,159149, 5121,170157,159155,236170,170158,159156
- ,170160,109649,291196,247188,247206,27166,164704,98692,170212,27186
- ,170216,49194,296761,175739,247289,214283,159273,247290,214284,164775
- ,247319,214313,247320,214314,214322,131807,214324,131809,296878,131848
- ,225388,214386,131889,32871,214424,186919,214425,186920,131910,214430
- ,115412,236440,131921,32903,214439,49409,214449,208948,214450,87927
- ,214455,98934,214456,98935,214459,27425,131948,60435,131954,32936
- ,131963,32945,131964,32946,131965,32947,131966,32948, 5443,131967
- ,32949,131968,32950,131971,32953,131972,32954,131973,32955,275000
- ,131974,98968,131979,120977,280547,99014,82511,99015,82512,99016
- ,82513, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 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 :=
- ( 1396, 0, 0, 0, 0, 1394, 0, 1225, 1214, 1395
- , 0, 1216, 0, 1404, 0, 0, 0, 1218, 1219, 1220
- , 1221, 1222, 1223, 0, 0, 1275, 1275, 1217, 1224, 0
- , 0, 0, 1275, 1097, 0, 1098, 1080, 0, 1079, 1041
- , 1040, 0, 1095, 1096, 0, 1318, 1338, 1081, 1042, 1043
- , 1044, 1084, 1063, 1324, 1066, 1067, 1068, 1069, 1070, 1071
- , 1074, 1075, 1342, 1347, 1345, 0, 1085, 1082, 1083, 0
- , 1321, 1161, 1162, 0, 1240, 0, 0, 1157, 0, 1275
- , 1156, 1171, 1306, 0, 1022, 0, 1362, 1237, 0, 0
- , 1238, 1239, 1400, 1398, 1397, 1288, 1106, 978, 1287, 0
- , 0, 1039, 0, 0, 1081, 1304, 0, 1315, 1313, 1062
- , 0, 1340, 0, 1088, 1086, 1090, 0, 1087, 1091, 1089
- , 1072, 0, 0, 0, 0, 0, 0, 1320, 0, 1065
- , 0, 0, 0, 0, 0, 0, 0, 0, 1094, 1092
- , 1093, 0, 1101, 1102, 1099, 1100, 0, 1103, 1076, 0
- , 1081, 1077, 1343, 0, 0, 0, 0, 0, 1285, 0
- , 1405, 0, 1174, 0, 0, 0, 0, 1371, 0, 1276
- , 1362, 0, 0, 1275, 0, 0, 0, 0, 946, 1024
- , 947, 948, 949, 950, 951, 952, 953, 954, 955, 956
- , 0, 963, 964, 965, 1275, 1025, 1026, 0, 0, 1263
- , 1264, 1265, 1266, 0, 0, 1275, 1034, 1035, 1036, 1037
- , 1038, 0, 1275, 1279, 1362, 1144, 1363, 0, 0, 0
- , 0, 1275, 0, 0, 0, 0, 0, 0, 1078, 0
- , 0, 1018, 0, 1056, 0, 1057, 1315, 1215, 1341, 1319
- , 1005, 1073, 1339, 984, 1054, 1053, 1055, 1052, 1051, 1104
- , 1105, 0, 1047, 1048, 1050, 1049, 1046, 1324, 1322, 0
- , 0, 1338, 1328, 0, 1330, 1332, 1329, 1331, 1333, 0
- , 0, 1344, 1346, 1348, 0, 1159, 1287, 0, 1369, 0
- , 1406, 962, 1166, 0, 1177, 0, 1369, 0, 0, 1372
- , 1373, 0, 0, 1172, 1039, 0, 1044, 0, 0, 0
- , 0, 1188, 0, 1374, 0, 1307, 0, 0, 1187, 0
- , 0, 1308, 1023, 1275, 1362, 0, 0, 0, 1176, 1174
- , 0, 1226, 1399, 0, 1109, 1108, 1289, 1327, 1323, 1317
- , 1310, 1313, 1061, 1017, 0, 0, 1311, 1313, 1316, 0
- , 1060, 0, 0, 1045, 1064, 1326, 1325, 1334, 1336, 1335
- , 1337, 0, 1166, 0, 1164, 0, 0, 0, 0, 0
- , 0, 1167, 1283, 0, 0, 0, 0, 1230, 0, 0
- , 1257, 1169, 0, 945, 0, 0, 0, 0, 1362, 0
- , 1189, 1275, 0, 0, 1020, 0, 0, 0, 0, 1283
- , 1283, 976, 0, 0, 0, 0, 1028, 1029, 1030, 1031
- , 1033, 1027, 1032, 1275, 0, 0, 0, 0, 0, 0
- , 0, 0, 0, 0, 0, 0, 0, 1279, 1039, 0
- , 1280, 0, 1279, 1111, 1112, 0, 1115, 1116, 1117, 1118
- , 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128
- , 1129, 1130, 1351, 0, 0, 1198, 1199, 1200, 1145, 1281
- , 1175, 1401, 1107, 1315, 1016, 1305, 1312, 1315, 1314, 1006
- , 985, 0, 1255, 1165, 1283, 0, 0, 0, 0, 0
- , 0, 0, 1250, 0, 0, 998, 1251, 1252, 997, 0
- , 0, 1300, 1408, 1407, 1244, 1286, 1168, 0, 0, 0
- , 1253, 1158, 0, 1275, 0, 0, 1262, 1409, 1259, 0
- , 1411, 0, 0, 1275, 0, 0, 0, 0, 1173, 0
- , 976, 1275, 1376, 1378, 0, 0, 0, 0, 0, 1275
- , 0, 0, 968, 969, 970, 971, 972, 973, 974, 990
- , 991, 992, 1292, 1292, 1300, 0, 1182, 0, 0, 0
- , 1283, 1283, 0, 1231, 0, 0, 0, 0, 977, 979
- , 980, 981, 1186, 1177, 1193, 1309, 1227, 1192, 1392, 1384
- , 0, 0, 0, 1149, 0, 0, 1135, 1354, 0, 1132
- , 1235, 0, 1153, 0, 0, 1388, 0, 0, 0, 1170
- , 0, 1349, 0, 1113, 1114, 1352, 0, 1279, 0, 0
- , 1275, 1362, 0, 0, 1059, 1058, 1409, 1163, 0, 1370
- , 1019, 0, 1248, 1247, 1249, 1246, 0, 1242, 0, 0
- , 1284, 1241, 1409, 0, 0, 0, 0, 0, 0, 1413
- , 0, 1275, 0, 1268, 1267, 1185, 975, 1378, 0, 0
- , 1275, 996, 994, 0, 983, 1180, 0, 0, 1298, 988
- , 989, 1290, 987, 966, 1293, 993, 995, 0, 1375, 1081
- , 1296, 1004, 0, 0, 0, 0, 0, 957, 959, 0
- , 0, 0, 0, 0, 0, 0, 1281, 1197, 0, 0
- , 1151, 1155, 1356, 1279, 1236, 1154, 0, 0, 0, 1279
- , 1279, 1279, 1203, 1204, 1205, 1206, 1356, 1131, 0, 0
- , 1279, 0, 0, 1141, 1279, 1362, 0, 0, 1282, 1367
- , 1366, 1146, 0, 1160, 1294, 1081, 1245, 1283, 0, 0
- , 0, 1193, 0, 0, 1412, 944, 1273, 0, 0, 0
- , 1275, 0, 0, 1380, 1362, 1275, 1377, 1178, 1275, 0
- , 0, 0, 0, 1003, 0, 1000, 961, 958, 960, 1184
- , 1183, 982, 1228, 1229, 0, 1212, 0, 0, 1369, 1279
- , 1195, 0, 1150, 0, 1279, 0, 0, 1353, 1279, 0
- , 0, 1391, 1208, 0, 1207, 1279, 0, 1274, 1133, 1350
- , 0, 0, 0, 0, 1148, 1234, 1233, 1402, 1368, 0
- , 0, 0, 1012, 0, 1301, 0, 1258, 1410, 0, 0
- , 0, 1414, 0, 1362, 0, 0, 1190, 1379, 1010, 1007
- , 0, 0, 1275, 1275, 986, 0, 0, 1021, 1002, 0
- , 1393, 1386, 0, 0, 0, 1358, 1152, 1357, 0, 0
- , 1209, 0, 1279, 1279, 0, 1389, 0, 0, 1142, 1362
- , 0, 1147, 0, 1256, 0, 0, 1001, 0, 1254, 1272
- , 1269, 0, 0, 1191, 0, 1369, 1194, 0, 0, 0
- , 1009, 1291, 0, 0, 0, 1297, 0, 1385, 1362, 0
- , 1304, 0, 1279, 0, 1202, 0, 0, 0, 1143, 0
- , 1362, 0, 1279, 0, 1295, 0, 1243, 0, 1270, 1382
- , 0, 1277, 1283, 0, 1181, 967, 1369, 0, 1279, 0
- , 0, 1359, 1355, 1134, 0, 0, 1201, 1139, 0, 1403
- , 1232, 999, 0, 1271, 0, 1381, 0, 0, 1179, 0
- , 1196, 1138, 1279, 0, 0, 0, 1140, 1369, 0, 1278
- , 1302, 1011, 1387, 1137, 1136, 1210, 0, 0, 0, 1304
- , 0, 1211, 1383, 1275, 0, 0, 1303, 1015, 1275, 0
- , 1014, 1013) ;
- --| 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, 1900, 1901, 1903, 1904, 1904
- , 1905, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1917
- , 1918, 1918, 1919, 1919, 1920, 1922, 1923, 1925, 1926, 1926
- , 1927, 1928, 1929, 1931, 1932, 1933, 1934, 1935, 1936, 1938
- , 1939, 1939, 1940, 1940, 1941, 1941, 1942, 1942, 1943, 1955
- , 1956, 1968, 1969, 1970, 1971, 1971, 1972, 1974, 1975, 1976
- , 1977, 1988, 1989, 1989, 1990, 1993, 1994, 1995, 1996, 2022
- , 2023, 2049, 2050, 2076, 2077, 2079, 2080, 2082, 2083, 2085
- , 2086, 2088, 2089, 2091, 2092, 2094, 2095, 2097, 2098, 2099
- , 2100, 2107, 2108, 2109, 2110, 2117, 2118, 2122, 2123, 2130
- , 2131, 2138, 2139, 2144, 2145, 2146, 2147, 2154, 2155, 2156
- , 2157, 2158, 2159, 2160, 2161, 2161, 2162, 2164, 2165, 2170
- , 2171, 2176, 2177, 2177, 2178, 2178, 2179, 2180, 2181, 2182
- , 2183, 2184, 2185, 2185, 2186, 2187, 2188, 2201, 2202, 2215
- , 2216, 2229, 2230, 2243, 2244, 2247, 2248, 2252, 2253, 2257
- , 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2270) ;
-
- 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, 19, 20, 21
- , 19, 20, 21, 21, 33, 58, 80, 85, 43, 61
- , 21, 61, 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, 84, 85, 84, 85, 21, 61
- , 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, 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, 473
- , 474, 484, 485, 484, 485, 486, 487, 486, 487, 498
- , 499, 498, 499, 499, 500, 499, 500, 499, 500, 499
- , 500, 500, 501, 500, 501, 500, 501, 501, 502, 501
- , 502, 501, 502, 501, 502, 501, 502, 501, 502, 501
- , 502, 501, 502, 502, 503, 502, 503, 502, 503, 502
- , 503, 502, 503, 502, 503, 502, 503, 502, 503, 503
- , 504, 514, 515, 522, 523, 522, 523, 533, 534, 533
- , 534, 533, 534, 533, 534, 533, 534, 533, 534, 544
- , 545, 555, 556, 555, 556, 555, 556, 555, 556, 556
- , 557, 556, 557, 557, 558, 558, 559, 558, 559, 560
- , 561, 561, 562, 562, 563, 563, 564, 564, 565, 564
- , 565, 565, 566, 565, 566, 569, 570, 572, 573, 572
- , 573, 572, 573, 573, 574, 575, 576, 575, 576, 576
- , 577, 579, 580, 580, 581, 582, 583, 593, 594, 594
- , 595, 595, 596, 596, 597, 599, 600, 600, 601, 604
- , 605, 605, 606, 606, 607, 609, 610, 609, 610, 610
- , 611, 611, 612, 612, 613, 618, 619, 620, 621, 621
- , 622, 642, 643, 644, 645, 645, 646, 645, 646, 645
- , 646, 646, 647, 646, 647, 647, 648, 648, 649, 648
- , 649, 648, 649, 648, 649, 648, 649, 648, 649, 648
- , 649, 648, 649, 648, 649, 648, 649, 648, 649, 659
- , 660, 670, 671, 670, 671, 670, 671, 670, 671, 682
- , 683, 682, 683, 693, 694, 704, 705, 704, 705, 705
- , 706, 705, 706, 705, 706, 705, 706, 705, 706, 705
- , 706, 705, 706, 708, 709, 710, 711, 711, 712, 711
- , 712, 713, 714, 721, 722, 722, 723, 726, 727, 727
- , 728, 728, 729, 729, 730, 730, 731, 733, 734, 735
- , 736, 736, 737, 737, 738, 737, 738, 738, 739, 749
- , 750, 749, 750, 749, 750, 760, 761, 760, 761, 763
- , 764, 767, 768, 778, 779, 779, 780, 780, 781, 781
- , 782, 782, 783, 782, 783, 792, 793, 793, 794, 793
- , 794, 795, 796, 796, 797, 799, 800, 801, 802, 802
- , 803, 803, 804, 808, 809, 812, 813, 813, 814, 814
- , 815, 816, 817, 816, 817, 816, 817, 816, 817, 816
- , 817, 816, 817, 816, 817, 816, 817, 816, 817, 818
- , 819, 819, 820, 820, 821, 823, 824, 824, 825, 835
- , 836, 846, 847, 849, 850, 850, 851, 861, 862, 862
- , 863, 864, 865, 876, 877, 876, 877, 877, 878, 878
- , 879, 878, 879, 883, 884, 883, 884, 883, 884, 883
- , 884, 903, 904, 903, 904, 903, 904, 903, 904, 903
- , 904, 903, 904, 903, 904, 903, 904, 903, 904, 903
- , 904, 903, 904, 903, 904, 903, 904, 903, 904, 903
- , 904, 903, 904, 903, 904, 903, 904, 906, 907, 908
- , 909, 908, 909, 908, 909, 908, 909, 908, 909, 908
- , 909, 908, 909, 908, 909, 908, 909, 909, 910, 910
- , 911, 910, 911, 910, 911, 911, 912, 911, 912, 911
- , 912, 911, 912, 922, 923, 922, 923, 922, 923, 923
- , 924, 924, 925, 925, 926, 926, 927, 927, 928, 928
- , 929, 929, 930, 930, 931, 930, 931, 931, 932, 932
- , 933, 932, 933, 932, 933, 932, 933, 932, 933, 933
- , 934, 934, 935, 934, 935, 934, 935, 937, 938, 937
- , 938, 937, 938, 937, 938, 948, 949, 949, 950, 960
- , 961, 960, 961, 960, 961, 961, 962, 961, 962, 986
- , 987, 1011, 1012, 1011, 1012, 1011, 1012, 1011, 1012, 1012
- , 1013, 1012, 1013, 1013, 1014, 1024, 1025, 1025, 1026, 1037
- , 1038, 1038, 1039, 1039, 1040, 1041, 1042, 1041, 1042, 1042
- , 1043, 1046, 1047, 1046, 1047, 1047, 1048, 1048, 1049, 1059
- , 1060, 1070, 1071, 1071, 1072, 1072, 1073, 1073, 1074, 1074
- , 1075, 1076, 1077, 1077, 1078, 1077, 1078, 1077, 1078, 1077
- , 1078, 1077, 1078, 1077, 1078, 1077, 1078, 1077, 1078, 1077
- , 1078, 1077, 1078, 1077, 1078, 1078, 1079, 1079, 1080, 1079
- , 1080, 1080, 1081, 1080, 1081, 1091, 1092, 1092, 1093, 1103
- , 1104, 1104, 1105, 1105, 1106, 1106, 1107, 1106, 1107, 1107
- , 1108, 1108, 1109, 1111, 1112, 1122, 1123, 1122, 1123, 1122
- , 1123, 1122, 1123, 1122, 1123, 1122, 1123, 1123, 1124, 1124
- , 1125, 1125, 1126, 1125, 1126, 1125, 1126, 1128, 1129, 1129
- , 1130, 1130, 1131, 1131, 1132, 1142, 1143, 1142, 1143, 1145
- , 1146, 1147, 1148, 1147, 1148, 1147, 1148, 1148, 1149, 1148
- , 1149, 1148, 1149, 1150, 1151, 1150, 1151, 1151, 1152, 1159
- , 1160, 1159, 1160, 1164, 1165, 1165, 1166, 1170, 1171, 1170
- , 1171, 1181, 1182, 1182, 1183, 1208, 1209, 1208, 1209, 1208
- , 1209, 1208, 1209, 1209, 1210, 1209, 1210, 1220, 1221, 1221
- , 1222, 1221, 1222, 1222, 1223, 1224, 1225, 1225, 1226, 1225
- , 1226, 1225, 1226, 1225, 1226, 1225, 1226, 1226, 1227, 1226
- , 1227, 1226, 1227, 1237, 1238, 1237, 1238, 1237, 1238, 1237
- , 1238, 1237, 1238, 1238, 1239, 1238, 1239, 1239, 1240, 1241
- , 1242, 1241, 1242, 1241, 1242, 1241, 1242, 1242, 1243, 1244
- , 1245, 1255, 1256, 1256, 1257, 1257, 1258, 1258, 1259, 1259
- , 1260, 1263, 1264, 1263, 1264, 1264, 1265, 1264, 1265, 1264
- , 1265, 1264, 1265, 1264, 1265, 1265, 1266, 1266, 1267, 1268
- , 1269, 1268, 1269, 1268, 1269, 1268, 1269, 1269, 1270, 1269
- , 1270, 1269, 1270, 1270, 1271, 1271, 1272, 1272, 1273, 1272
- , 1273, 1272, 1273, 1272, 1273, 1272, 1273, 1272, 1273, 1272
- , 1273, 1272, 1273, 1272, 1273, 1274, 1275, 1275, 1276, 1279
- , 1280, 1279, 1280, 1279, 1280, 1280, 1281, 1281, 1282, 1282
- , 1283, 1283, 1284, 1285, 1286, 1285, 1286, 1285, 1286, 1289
- , 1290, 1290, 1291, 1291, 1292, 1292, 1293, 1294, 1295, 1305
- , 1306, 1307, 1308, 1307, 1308, 1307, 1308, 1308, 1309, 1319
- , 1320, 1319, 1320, 1319, 1320, 1321, 1322, 1321, 1322, 1321
- , 1322, 1321, 1322, 1322, 1323, 1333, 1334, 1337, 1338, 1337
- , 1338, 1337, 1338, 1337, 1338, 1337, 1338, 1337, 1338, 1337
- , 1338, 1337, 1338, 1339, 1340, 1339, 1340, 1340, 1341, 1341
- , 1342, 1341, 1342, 1342, 1343, 1343, 1344, 1343, 1344, 1343
- , 1344, 1344, 1345, 1345, 1346, 1347, 1348, 1347, 1348, 1347
- , 1348, 1348, 1349, 1348, 1349, 1350, 1351, 1350, 1351, 1350
- , 1351, 1354, 1355, 1354, 1355, 1355, 1356, 1356, 1357, 1357
- , 1358, 1359, 1360, 1359, 1360, 1360, 1361, 1371, 1372, 1371
- , 1372, 1371, 1372, 1371, 1372, 1382, 1383, 1383, 1384, 1387
- , 1388, 1387, 1388, 1391, 1392, 1393, 1394, 1394, 1395, 1395
- , 1396, 1395, 1396, 1396, 1397, 1396, 1397, 1396, 1397, 1397
- , 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1403, 1404, 1405
- , 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1405
- , 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1408
- , 1409, 1408, 1409, 1435, 1436, 1436, 1437, 1436, 1437, 1436
- , 1437, 1436, 1437, 1438, 1439, 1438, 1439, 1439, 1440, 1439
- , 1440, 1450, 1451, 1451, 1452, 1451, 1452, 1451, 1452, 1452
- , 1453, 1476, 1477, 1476, 1477, 1476, 1477, 1478, 1479, 1478
- , 1479, 1478, 1479, 1479, 1480, 1479, 1480, 1479, 1480, 1480
- , 1481, 1492, 1493, 1493, 1494, 1494, 1495, 1495, 1496, 1495
- , 1496, 1495, 1496, 1496, 1497, 1496, 1497, 1496, 1497, 1497
- , 1498, 1499, 1500, 1511, 1512, 1511, 1512, 1519, 1520, 1519
- , 1520, 1520, 1521, 1520, 1521, 1520, 1521, 1521, 1522, 1522
- , 1523, 1533, 1534, 1534, 1535, 1535, 1536, 1536, 1537, 1547
- , 1548, 1548, 1549, 1548, 1549, 1549, 1550, 1550, 1551, 1550
- , 1551, 1551, 1552, 1552, 1553, 1552, 1553, 1552, 1553, 1552
- , 1553, 1554, 1555, 1564, 1565, 1564, 1565, 1564, 1565, 1575
- , 1576, 1578, 1579, 1579, 1580, 1581, 1582, 1582, 1583, 1594
- , 1595, 1594, 1595, 1594, 1595, 1594, 1595, 1595, 1596, 1596
- , 1597, 1597, 1598, 1600, 1601, 1600, 1601, 1600, 1601, 1605
- , 1606, 1605, 1606, 1606, 1607, 1617, 1618, 1617, 1618, 1618
- , 1619, 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, 1645, 1646, 1645, 1646, 1646, 1647, 1646
- , 1647, 1647, 1648, 1649, 1650, 1650, 1651, 1650, 1651, 1651
- , 1652, 1652, 1653, 1654, 1655, 1654, 1655, 1655, 1656, 1655
- , 1656, 1659, 1660, 1659, 1660, 1660, 1661, 1660, 1661, 1661
- , 1662, 1663, 1664, 1663, 1664, 1664, 1665, 1665, 1666, 1665
- , 1666, 1665, 1666, 1665, 1666, 1666, 1667, 1666, 1667, 1668
- , 1669, 1669, 1670, 1669, 1670, 1669, 1670, 1669, 1670, 1670
- , 1671, 1671, 1672, 1671, 1672, 1671, 1672, 1672, 1673, 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, 1680, 1681, 1681
- , 1682, 1682, 1683, 1682, 1683, 1682, 1683, 1694, 1695, 1694
- , 1695, 1694, 1695, 1694, 1695, 1694, 1695, 1694, 1695, 1694
- , 1695, 1694, 1695, 1695, 1696, 1697, 1698, 1698, 1699, 1698
- , 1699, 1700, 1701, 1700, 1701, 1700, 1701, 1701, 1702, 1703
- , 1704, 1704, 1705, 1704, 1705, 1704, 1705, 1705, 1706, 1706
- , 1707, 1706, 1707, 1706) ;
-
- Action_Token_Map : constant Action_Token_Array :=
- ( 43, 65, 27, 54, 63, 26, 42, 43, 45, 71
- , 80, 54, 26, 27, 42, 45, 63, 3, 66, 68
- , 71, 74, 35, 36, 37, 65, 67, 76, 67, 65
- , 65, 11, 65, 71, 31, 80, 80, 80, 26, 45
- , 42, 65, 65, 39, 47, 49, 75, 76, 77, 83
- , 86, 87, 89, 90, 91, 7, 30, 34, 36, 64
- , 69, 70, 71, 72, 73, 74, 78, 81, 82, 84
- , 85, 3, 35, 37, 40, 65, 66, 67, 68, 71
- , 74, 76, 36, 72, 82, 83, 89, 91, 30, 36
- , 81, 86, 90, 47, 70, 71, 77, 75, 39, 64
- , 7, 7, 39, 64, 7, 39, 74, 76, 69, 34
- , 49, 73, 78, 87, 37, 68, 71, 35, 65, 66
- , 67, 37, 65, 71, 3, 35, 36, 66, 67, 68
- , 31, 51, 71, 59, 63, 65, 65, 31, 71, 65
- , 35, 43, 26, 27, 42, 44, 45, 56, 60, 21
- , 25, 55, 59, 65, 25, 26, 27, 42, 45, 56
- , 59, 60, 65, 55, 21, 10, 65, 67, 65, 65
- , 43, 60, 71, 77, 70, 85, 84, 85, 72, 75
- , 30, 36, 64, 75, 7, 39, 72, 81, 82, 83
- , 84, 85, 86, 89, 90, 91, 47, 70, 71, 77
- , 72, 75, 80, 30, 3, 37, 65, 68, 74, 35
- , 36, 66, 67, 71, 76, 3, 35, 36, 37, 68
- , 76, 65, 66, 67, 71, 74, 3, 67, 68, 71
- , 76, 35, 36, 37, 65, 66, 74, 3, 37, 67
- , 68, 71, 76, 35, 36, 65, 66, 74, 17, 16
- , 47, 65, 71, 3, 37, 71, 76, 35, 36, 65
- , 66, 67, 68, 74, 6, 65, 67, 68, 3, 35
- , 36, 37, 67, 74, 65, 66, 68, 71, 76, 75
- , 3, 71, 74, 76, 35, 36, 37, 58, 65, 66
- , 67, 68, 3, 19, 35, 66, 36, 37, 65, 67
- , 68, 71, 74, 76, 3, 65, 66, 76, 35, 36
- , 37, 67, 68, 71, 74, 3, 36, 65, 66, 71
- , 74, 76, 35, 37, 67, 68, 35, 36, 37, 65
- , 66, 67, 68, 74, 76, 3, 71, 3, 35, 67
- , 68, 76, 36, 37, 65, 66, 71, 74, 58, 19
- , 35, 37, 67, 71, 3, 36, 65, 66, 68, 36
- , 65, 66, 67, 68, 71, 3, 35, 37, 66, 67
- , 68, 71, 35, 37, 65, 70, 71, 77, 35, 65
- , 65, 65, 45, 26, 79, 31, 35, 65, 72, 77
- , 65, 10, 65, 67, 65, 65, 65, 67, 68, 65
- , 65, 59, 65, 65, 65, 79, 50, 31, 80, 80
- , 11, 65, 11, 59, 65, 50, 31, 80, 65, 80
- , 51, 71, 31, 75, 80, 3, 35, 65, 66, 68
- , 76, 36, 37, 67, 71, 74, 71, 65, 65, 76
- , 3, 35, 36, 37, 65, 66, 67, 68, 71, 74
- , 35, 36, 71, 74, 76, 3, 37, 65, 66, 67
- , 68, 35, 36, 37, 40, 65, 66, 67, 68, 71
- , 74, 76, 3, 74, 76, 3, 35, 36, 37, 65
- , 66, 67, 68, 71, 84, 85, 3, 35, 36, 37
- , 40, 65, 66, 67, 68, 71, 74, 76, 75, 86
- , 86, 72, 65, 65, 66, 67, 68, 71, 74, 76
- , 3, 35, 36, 37, 30, 89, 90, 36, 81, 82
- , 83, 91, 3, 35, 36, 37, 65, 66, 67, 68
- , 71, 74, 76, 35, 65, 74, 3, 36, 37, 66
- , 67, 68, 71, 76, 3, 35, 66, 67, 68, 71
- , 76, 36, 37, 65, 74, 65, 77, 79, 31, 71
- , 31, 75, 30, 65, 65, 26, 56, 42, 45, 71
- , 77, 80, 80, 71, 80, 60, 70, 71, 77, 60
- , 50, 31, 25, 26, 55, 59, 60, 65, 21, 27
- , 42, 45, 56, 31, 65, 31, 71, 80, 31, 77
- , 8, 13, 23, 65, 43, 35, 65, 67, 68, 65
- , 65, 43, 42, 45, 56, 26, 27, 60, 35, 54
- , 65, 4, 12, 14, 24, 25, 33, 51, 53, 65
- , 67, 68, 2, 10, 15, 28, 29, 37, 43, 46
- , 62, 92, 23, 21, 80, 65, 43, 72, 65, 66
- , 68, 76, 3, 35, 36, 37, 67, 71, 74, 65
- , 66, 67, 68, 71, 74, 76, 3, 35, 36, 37
- , 40, 68, 3, 35, 36, 37, 65, 66, 67, 71
- , 74, 76, 37, 65, 66, 67, 68, 74, 76, 3
- , 35, 36, 71, 37, 3, 35, 36, 65, 66, 67
- , 68, 71, 74, 76, 75, 71, 77, 80, 41, 30
- , 65, 80, 72, 8, 17, 5, 16, 32, 44, 47
- , 71, 65, 65, 68, 94, 67, 80, 65, 41, 88
- , 71, 77, 80, 80, 72, 11, 11, 31, 3, 35
- , 36, 65, 66, 67, 68, 71, 74, 76, 37, 3
- , 36, 65, 66, 68, 76, 35, 37, 67, 71, 74
- , 71, 9, 48, 47, 16, 17, 65, 36, 37, 68
- , 74, 3, 35, 65, 66, 67, 71, 76, 65, 65
- , 65, 31, 5, 8, 16, 17, 32, 44, 47, 71
- , 35, 48, 65, 75, 80, 71, 88, 8, 65, 50
- , 80, 88, 88, 16, 17, 47, 50, 71, 70, 71
- , 77, 80, 31, 31, 11, 65, 31, 80, 80, 80
- , 65, 67, 68, 65, 35, 36, 37, 65, 74, 3
- , 66, 67, 68, 71, 76, 3, 37, 67, 68, 35
- , 36, 65, 66, 71, 74, 76, 61, 65, 80, 65
- , 3, 37, 65, 66, 68, 71, 74, 76, 35, 36
- , 67, 80, 65, 80, 3, 36, 65, 66, 67, 68
- , 71, 74, 80, 35, 37, 76, 79, 65, 70, 71
- , 77, 88, 80, 2, 4, 10, 12, 15, 33, 37
- , 46, 51, 53, 62, 65, 68, 14, 24, 25, 28
- , 29, 67, 92, 25, 33, 62, 14, 10, 75, 86
- , 75, 3, 35, 36, 37, 65, 66, 67, 76, 68
- , 71, 74, 88, 51, 65, 65, 71, 94, 94, 44
- , 94, 94, 80, 79, 70, 71, 77, 37, 68, 3
- , 35, 36, 65, 66, 67, 71, 74, 76, 80, 35
- , 37, 68, 74, 3, 36, 65, 66, 67, 71, 76
- , 65, 7, 34, 49, 75, 30, 36, 39, 64, 69
- , 70, 71, 72, 73, 74, 76, 77, 78, 81, 82
- , 83, 85, 87, 89, 90, 91, 30, 34, 36, 64
- , 69, 70, 71, 72, 73, 77, 82, 83, 85, 87
- , 90, 7, 39, 49, 74, 75, 76, 78, 81, 89
- , 91, 85, 72, 3, 35, 36, 65, 66, 67, 68
- , 71, 37, 74, 76, 9, 37, 40, 66, 74, 76
- , 3, 35, 36, 65, 67, 68, 71, 80, 80, 77
- , 80, 80, 16, 17, 47, 71, 43, 22, 36, 71
- , 74, 76, 3, 35, 37, 65, 66, 67, 68, 35
- , 76, 3, 36, 37, 65, 66, 67, 68, 71, 74
- , 44, 65, 80, 37, 65, 68, 80, 47, 47, 65
- , 3, 36, 37, 65, 67, 74, 76, 35, 66, 68
- , 71, 38, 35, 36, 65, 66, 68, 71, 3, 37
- , 67, 74, 76, 88, 88, 65, 80, 80, 65, 67
- , 68, 3, 35, 36, 65, 74, 76, 37, 66, 67
- , 68, 71, 54, 54, 43, 71, 77, 70, 71, 31
- , 80, 3, 35, 36, 37, 67, 68, 71, 74, 65
- , 66, 76, 77, 61, 80, 77, 80, 58, 77, 80
- , 80, 4, 43, 57, 68, 15, 61, 65, 67, 10
- , 14, 25, 33, 62, 93, 17, 47, 16, 65, 71
- , 3, 35, 36, 37, 65, 66, 67, 68, 71, 76
- , 74, 43, 2, 4, 12, 14, 15, 19, 21, 25
- , 28, 29, 33, 39, 51, 67, 68, 10, 20, 23
- , 24, 37, 46, 53, 61, 62, 65, 92, 65, 35
- , 36, 37, 74, 3, 65, 66, 67, 68, 71, 76
- , 33, 65, 43, 61, 21, 65, 3, 66, 76, 35
- , 36, 37, 65, 67, 68, 71, 74, 72, 65, 72
- , 80, 31, 72, 75, 3, 35, 37, 65, 66, 67
- , 68, 71, 74, 76, 36, 80, 80, 34, 43, 65
- , 67, 68, 21, 75, 22, 65, 21, 25, 80, 80
- , 21, 43, 80, 72, 77, 47, 70, 71, 77, 65
- , 80, 80, 80, 77, 80, 70, 71, 77, 80, 72
- , 80, 80, 75, 80, 3, 35, 36, 37, 65, 66
- , 67, 74, 76, 68, 71, 18, 80, 80, 3, 35
- , 67, 71, 76, 36, 37, 65, 66, 68, 74, 19
- , 20, 80, 3, 37, 67, 68, 71, 35, 36, 65
- , 66, 74, 76, 70, 77, 80, 71, 19, 39, 80
- , 80, 30, 21, 65, 80, 65, 40, 61, 75, 72
- , 77, 47, 70, 71, 88, 31, 65, 75, 72, 80
- , 37, 66, 76, 3, 35, 36, 65, 67, 68, 71
- , 74, 35, 37, 66, 67, 74, 76, 3, 36, 65
- , 68, 71, 48, 9, 70, 71, 77, 21, 65, 67
- , 68, 21, 25, 71, 65, 43, 48, 65, 12, 72
- , 75, 31, 80, 72, 75, 67, 68, 65, 7, 30
- , 47, 49, 64, 69, 70, 72, 73, 75, 76, 77
- , 78, 79, 81, 82, 89, 91, 34, 36, 39, 71
- , 74, 83, 86, 87, 90, 72, 43, 61, 80, 3
- , 37, 71, 74, 35, 36, 65, 66, 67, 68, 76
- , 21, 85, 14, 15, 19, 21, 24, 25, 28, 29
- , 33, 37, 39, 43, 46, 51, 62, 65, 67, 92
- , 2, 4, 10, 12, 53, 68, 19, 39, 21, 43
- , 35, 36, 37, 52, 65, 66, 71, 74, 76, 3
- , 67, 68, 33, 21, 80, 77, 80, 75, 72, 3
- , 37, 65, 66, 67, 68, 71, 74, 35, 36, 76
- , 94, 5, 8, 32, 71, 16, 17, 44, 47, 80
- , 80, 80, 76, 3, 35, 36, 37, 65, 66, 67
- , 68, 71, 74, 43, 48, 65, 35, 36, 65, 66
- , 67, 68, 71, 76, 3, 37, 74, 80, 43, 43
- , 65, 79, 65, 68, 5, 8, 17, 35, 44, 47
- , 71, 16, 32, 48, 36, 66, 76, 3, 35, 37
- , 65, 67, 68, 71, 74, 70, 71, 77, 71, 80
- , 72, 21, 68, 74, 76, 3, 35, 36, 37, 40
- , 65, 66, 67, 71, 58, 29, 43, 4, 15, 57
- , 15, 43, 57, 61, 4, 53, 35, 36, 68, 3
- , 37, 65, 66, 67, 71, 74, 76, 65, 33, 84
- , 85, 38, 65, 67, 68, 80, 47, 80, 72, 31
- , 65, 12, 61, 65, 21, 43, 43, 44, 80, 80
- , 65, 65, 85, 21, 61, 80, 21, 15, 43, 80
- , 80, 65, 40, 65, 65, 47, 70, 71, 77, 80
- , 71, 80, 72, 88, 80, 80, 84, 85, 12, 53
- , 21, 80, 94, 65, 43, 61, 80, 72, 80, 80
- , 80, 53, 35, 37, 40, 65, 71, 74, 76, 3
- , 36, 66, 67, 68, 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, 427
- , 428, 431, 432, 432, 433, 435, 436, 436, 437, 437
- , 438, 438, 439, 439, 440, 440, 441, 446, 447, 446
- , 447, 446, 447, 446, 447, 447, 448, 452, 453, 456
- , 457, 457, 458, 458, 459, 459, 460, 460, 461, 461
- , 462, 464, 465, 467, 468, 469, 470, 472, 473, 473
- , 474, 476, 477, 477, 478, 482, 483, 490, 491, 498
- , 499, 501, 502, 517, 518, 518, 519, 519, 520, 520
- , 521, 521, 522, 523, 524, 526, 527, 528, 529, 529
- , 530, 530, 531, 531, 532, 533, 534, 534, 535, 536
- , 537, 537, 538, 545, 546, 546, 547, 547, 548, 554
- , 555, 556, 557, 558, 559, 576, 577, 578, 579, 579
- , 580, 580, 581, 581, 582, 583, 584, 584, 585, 585
- , 586, 587, 588, 588, 589, 589, 590, 604, 605, 609
- , 610, 610, 611, 612, 613, 615, 616, 630, 631, 631
- , 632, 632, 633, 633, 634, 634, 635, 636, 637, 637
- , 638, 641, 642, 644, 645, 647, 648, 649, 650, 651
- , 652, 652, 653, 653, 654, 655, 656, 658, 659, 659
- , 660, 661, 662, 662, 663, 664, 665, 666, 667, 667
- , 668, 668, 669, 669, 670, 671, 672, 672, 673, 673
- , 674, 674, 675, 679, 680, 680, 681, 684, 685, 688
- , 689, 691, 692, 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, 777, 778, 779, 780, 781
- , 782, 782, 783, 783, 784, 784, 785, 785, 786, 786
- , 787, 787, 788, 789, 790, 790, 791, 791, 792, 792
- , 793, 794, 795, 795, 796, 796, 797, 797, 798, 798
- , 799, 800, 801, 801, 802, 803, 804, 804, 805, 805
- , 806, 807, 808, 813, 814, 815, 816, 817, 818, 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, 908, 909, 909, 910, 911, 912, 912, 913, 913
- , 914, 914, 915, 915, 916, 917, 918, 918, 919, 922
- , 923, 925, 926, 926, 927, 927, 928, 929, 930, 930
- , 931, 931, 932, 932, 933, 933, 934, 935, 936, 936
- , 937, 937, 938, 939, 940, 940, 941, 941, 942, 942
- ) ;
-
- Shift_State_Map : constant Shift_State_Array :=
- ( 1, 408, 34, 409, 468, 253, 131, 134, 137, 387
- , 469, 503, 619, 791, 214, 76, 310, 311, 493, 410
- , 801, 914, 940, 388, 591, 411, 245, 470, 515, 246
- , 471, 516, 750, 264, 271, 755, 823, 756, 171, 215
- , 379, 449, 702, 719, 725, 730, 772, 793, 794, 820
- , 827, 831, 859, 891, 895, 916, 936, 629, 389, 450
- , 412, 172, 587, 13, 89, 14, 413, 414, 864, 112
- , 239, 362, 771, 80, 154, 163, 285, 307, 314, 320
- , 357, 359, 380, 382, 383, 494, 512, 554, 555, 667
- , 712, 784, 807, 882, 472, 517, 853, 588, 695, 830
- , 871, 143, 718, 35, 166, 275, 286, 518, 36, 113
- , 37, 415, 637, 653, 874, 132, 135, 138, 766, 824
- , 101, 776, 860, 929, 464, 487, 15, 90, 173, 204
- , 366, 396, 2, 169, 174, 473, 519, 605, 634, 854
- , 884, 16, 416, 124, 247, 474, 782, 903, 504, 520
- , 790, 800, 843, 144, 308, 378, 543, 547, 155, 417
- , 599, 828, 418, 868, 915, 927, 17, 406, 662, 663
- , 175, 176, 205, 367, 677, 261, 270, 674, 863, 157
- , 177, 301, 178, 375, 377, 563, 670, 678, 698, 815
- , 919, 589, 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
- , 346, 381, 394, 395, 419, 452, 486, 495, 560, 578
- , 614, 640, 692, 724, 747, 848, 39, 40, 73, 255
- , 291, 496, 41, 256, 641, 139, 125, 224, 376, 579
- , 11, 42, 79, 126, 156, 164, 223, 358, 370, 373
- , 384, 462, 475, 490, 505, 521, 538, 548, 602, 665
- , 795, 857, 905, 111, 229, 234, 288, 344, 453, 466
- , 492, 617, 707, 709, 713, 733, 742, 780, 786, 805
- , 809, 812, 835, 858, 880, 906, 923, 933, 145, 43
- , 140, 129, 230, 235, 260, 321, 340, 361, 536, 714
- , 745, 806, 810, 836, 44, 141, 127, 225, 146, 283
- , 305, 353, 577, 609, 849, 12, 81, 82, 88, 238
- , 309, 319, 322, 371, 372, 374, 385, 451, 463, 467
- , 485, 491, 537, 544, 553, 557, 558, 564, 570, 571
- , 573, 580, 608, 612, 624, 625, 626, 627, 636, 644
- , 658, 659, 668, 671, 672, 675, 676, 710, 716, 717
- , 728, 729, 737, 738, 739, 740, 741, 743, 744, 746
- , 751, 753, 759, 768, 769, 775, 787, 808, 817, 832
- , 834, 839, 840, 841, 847, 877, 879, 885, 886, 894
- , 897, 898, 904, 909, 911, 917, 922, 925, 926, 932
- , 942, 114, 115, 116, 226, 335, 872, 227, 228, 336
- , 616, 822, 873, 889, 913, 934, 939, 117, 231, 342
- , 343, 148, 488, 540, 581, 118, 119, 120, 420, 688
- , 483, 603, 604, 606, 607, 837, 3, 45, 252, 324
- , 502, 661, 170, 421, 699, 920, 179, 180, 181, 182
- , 183, 18, 184, 397, 19, 185, 398, 186, 399, 20
- , 187, 400, 188, 21, 189, 401, 190, 160, 191, 278
- , 481, 802, 390, 510, 541, 601, 635, 736, 883, 902
- , 489, 545, 546, 598, 655, 656, 783, 908, 391, 476
- , 542, 46, 103, 329, 330, 331, 337, 457, 497, 561
- , 567, 574, 611, 623, 654, 690, 748, 282, 192, 193
- , 194, 522, 855, 482, 535, 785, 610, 648, 523, 524
- , 525, 477, 526, 527, 478, 528, 529, 97, 276, 363
- , 392, 465, 511, 704, 708, 549, 98, 128, 232, 530
- , 550, 645, 734, 878, 531, 551, 532, 552, 47, 104
- , 240, 241, 243, 244, 262, 334, 455, 460, 461, 507
- , 562, 618, 632, 633, 789, 842, 642, 852, 732, 643
- , 533, 646, 647, 534, 479, 705, 875, 781, 539, 48
- , 105, 151, 296, 393, 422, 484, 559, 650, 660, 679
- , 706, 720, 811, 876, 651, 829, 845, 856, 869, 735
- , 242, 652, 638, 938, 941, 83, 94, 306, 312, 323
- , 513, 556, 620, 639, 727, 792, 798, 799, 850, 851
- , 731, 803, 804, 907, 921, 937, 931, 106, 456, 861
- , 930, 233, 890, 935, 84, 85, 299, 86, 167, 206
- , 402, 313, 195, 196, 726, 197, 222, 403, 404, 207
- , 368, 208, 22, 209, 23, 210, 211, 49, 50, 51
- , 297, 257, 249, 107, 52, 250, 325, 506, 689, 108
- , 236, 341, 595, 596, 109, 332, 338, 459, 237, 454
- , 458, 110, 333, 339, 53, 54, 258, 347, 130, 345
- , 55, 263, 265, 266, 267, 268, 269, 348, 349, 350
- , 351, 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, 352, 364, 508, 565, 566
- , 572, 649, 657, 777, 316, 575, 582, 761, 770, 821
- , 825, 867, 423, 691, 583, 317, 693, 758, 762, 773
- , 814, 818, 866, 893, 901, 912, 924, 424, 584, 425
- , 585, 426, 427, 428, 429, 430, 431, 432, 680, 433
- , 434, 435, 436, 681, 437, 438, 439, 440, 441, 682
- , 442, 443, 586, 568, 673, 757, 767, 569, 669, 694
- , 754, 760, 819, 593, 752, 816, 892, 862, 444, 218
- , 294, 318, 407, 509, 697, 774, 797, 844, 870, 888
- , 899, 590, 216, 592, 87, 168, 315, 696, 594, 445
- , 24, 91, 198, 212, 281, 369, 405, 279, 287, 600
- , 749, 846, 887, 918, 356, 365, 813, 881, 910, 928
- , 74, 219, 354, 284, 355, 292, 25, 92, 26, 27
- , 386, 199, 514, 628, 630, 723, 213, 796, 631, 666
- , 446, 447, 448, 576, 826, 687, 683, 865, 684, 685
- , 896, 686, 763, 764, 765, 664, 4, 5, 6, 10
- , 7, 28, 29, 8, 221, 33, 778, 900, 833, 700
- , 779, 30, 31, 75, 161, 480, 838, 360, 498, 597
- , 613, 788, 615, 703, 711, 499, 500, 501, 715, 200
- , 201, 202, 203, 621, 722, 622, 721, 71, 259, 100
- , 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 RQS_ParseTables;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsstates.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_ParserDeclarations; -- declarations for the Parser
- use RQS_ParserDeclarations;
-
- package RQS_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 RQS_StateStack;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsstates.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_ParseTables; -- state tables generated
- -- by parser generator
- use RQS_ParseTables;
- with RQS_Grammar_Constants; -- constants generated by parser generator
- use RQS_Grammar_Constants; -- to have visiblity on operations
- -- on type ParserInteger.
-
- package body RQS_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 RQS_StateStack;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqspdecls.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- with unchecked_deallocation;
- ----------------------------------------------------------------------
-
- package body RQS_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 RQS_ParserDeclarations;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsparses.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_ParserDeclarations; -- declarations for the Parser
- use RQS_ParserDeclarations;
-
- package RQS_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 RQS_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 RQS_ParseStack;
-
- --------------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsparses.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_ParseTables; -- state tables generated by parser
- -- generator
- use RQS_ParseTables;
-
- with RQS_Grammar_Constants;
- use RQS_Grammar_Constants; -- to have visibility on operations
- -- on type ParserInteger declared there.
-
- with RQS_StateStack;
-
- package body RQS_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(RQS_StateStack.Length - Position);
-
- end Get_Stack_Element;
-
- ------------------------------------------------------------------
- end RQS_ParseStack;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsparser.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_ParserDeclarations; -- declarations for the Parser
- use RQS_ParserDeclarations;
-
- package RQS_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 RQS_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 RQS_Parser;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsparser.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_Lex; -- the lexical analyzer
- with RQS_ParseStack; -- elements awaiting parsing
- with RQS_StateStack; -- stack of parse states
- with RQS_ParseTables; -- state tables generated by parser
- -- generator
- use RQS_ParseTables;
-
- with RQS_Grammar_Constants; -- constants generated by parser generator
- use RQS_Grammar_Constants;
-
- package body RQS_Parser is
-
- ------------------------------------------------------------------
- -- 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
-
- ------------------------------------------------------------------
-
- 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
- RQS_Lex.Initialization;
-
- PD.CurToken := RQS_Lex.GetNextNonCommentToken;
-
- RQS_StateStack.Initialize;
- RQS_ParseStack.Initialize;
-
- RQS_StateStack.Push(Start_State);
-
- Do_Parse: loop
-
- Current_Action := PT.GetAction(
- RQS_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.
- RQS_ParseStack.Push(PD.CurToken);
-
- -- Add new state to top of StateStack
- RQS_StateStack.Push(Current_Action);
-
- -- Get next token.
- PD.CurToken := RQS_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);
-
- Apply_Actions(Reduce_Action_Number);
-
- -- Reduce Parse Stack
- RQS_ParseStack.Reduce(Reduce_Action_RH_Size);
-
- RQS_ParseStack.Push((
- gram_sym_val => Reduce_Action_LH_Value,
- lexed_token => (
- text => PD.Null_Source_Text,
- srcpos_line => 0,
- srcpos_column => 0)));
-
- -- Reduce State Stack
- RQS_StateStack.Reduce(Reduce_Action_RH_Size);
-
- RQS_StateStack.Push(PT.GetAction(
- RQS_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;
- return RQS_ParseStack.Pop;
-
- exception
- when PD.MemoryOverflow =>
- -- raised if Parse runs out of newable memory.
- raise PD.MemoryOverflow;
-
- end Parse;
-
- ------------------------------------------------------------------
-
- end RQS_Parser;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqslexidv.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- ----------------------------------------------------------------------
-
- with RQS_Grammar_Constants; -- constants from the parser generator
- use RQS_Grammar_Constants;
- --| to gain visibility on ParserInteger's operations
-
- package body RQS_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 RQS_ParseTables;
- package PT renames RQS_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 RQS_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 RQS_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 : RQS_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 := RQS_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 RQS_Lex_Identifier_Token_Value;
-
- ----------------------------------------------------------------------
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsgrmcon.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --+ GRMCONST.BDY +--
-
- Package body RQS_Grammar_Constants is
-
- function setGrammarSymbolCount return ParserInteger is
- begin
- return 315 ;
- end setGrammarSymbolCount;
-
- function setActionCount return ParserInteger is
- begin
- return 1416 ;
- end setActionCount;
-
- function setStateCountPlusOne return ParserInteger is
- begin
- return 943 ;
- end setStateCountPlusOne;
-
- function setLeftHandSideCount return ParserInteger is
- begin
- return 471 ;
- end setLeftHandSideCount;
-
- function setRightHandSideCount return ParserInteger is
- begin
- return 471 ;
- end setRightHandSideCount;
-
- end RQS_Grammar_Constants;
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --reqs.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with DOCUMENT_REF;
- with HOST_DEPENDENCIES;
- with HOST_LIB;
- with rqs_PARSERDECLARATIONS;
- with STACK_PKG;
- with STRING_PKG;
- with STRING_LISTS;
- with LISTS;
- with Labeled_Binary_Trees_Pkg;
- with Binary_Trees_Pkg;
-
- package REQS is
-
- package HL renames HOST_LIB;
- package HD renames HOST_DEPENDENCIES;
- package PD renames rqs_PARSERDECLARATIONS;
- package SL renames STRING_LISTS;
-
- subtype LOCATION is SL.LIST; --| contains the components of a full
- --| Ada name.
-
- package ST is new STACK_PKG(PD.SOURCE_TEXT);
-
- type REF_LINE_RECORD is
- record
- REF : DOCUMENT_REF.REFERENCE_STRING;
- LINE : HD.SOURCE_LINE;
- end record;
-
- type LOC_LINE_RECORD is
- record
- LOC : LOCATION;
- LINE : HD.SOURCE_LINE;
- end record;
-
- function Ref_Line_Difference(
- X : in REF_LINE_RECORD;
- Y : in REF_LINE_RECORD
- ) return integer;
-
- -- Effects
- -- Compare records of requirement string and line number. If
- -- x and y are two such records then x is less than y if its
- -- requirement string is less than that of y. In case the requirement
- -- strings are equal their line numbers are compared.
-
- function Loc_Line_Difference(
- X : in LOC_LINE_RECORD;
- Y : in LOC_LINE_RECORD
- ) return Integer;
-
- -- Effects
- -- Compare records of location and line number of requirement strings.
- -- If x and y are two such records then x is less than y if its location
- -- is less than that of y. In case they are equal the line numbers of
- -- the requirement strings are compared.
-
- package REF_LINE_TREES is new Binary_Trees_Pkg(
- Value_Type => Ref_Line_Record,
- Difference => Ref_Line_Difference
- );
-
- package LOC_LINE_TREES is new Binary_Trees_Pkg(
- Value_Type => Loc_Line_Record,
- Difference => Loc_Line_Difference
- );
-
- package REQ_TREE_PKG is new Labeled_Binary_Trees_Pkg(
- LABEL_TYPE => DOCUMENT_REF.REFERENCE_STRING,
- VALUE_TYPE => LOC_LINE_TREES.TREE,
- Difference => DOCUMENT_REF.Compare
- );
-
- function Compare_Locations(
- SL1 : in SL.LIST;
- SL2 : in SL.LIST
- ) return Integer;
-
- package LOC_TREE_PKG is new Labeled_Binary_Trees_Pkg(
- LABEL_TYPE => LOCATION,
- VALUE_TYPE => REF_LINE_TREES.TREE,
- Difference => Compare_Locations
- );
-
- package RT renames REQ_TREE_PKG;
- package LT renames LOC_TREE_PKG;
- package SP renames STRING_PKG;
-
-
- type PAIRS_RECORD_TYPE is
- record
- REF : DOCUMENT_REF.REFERENCE_STRING;
- UNIT : LOCATION;
- LINE_NUMBER : HD.SOURCE_LINE;
- end record;
-
- package PAIRS_RECORD_LISTS is new LISTS(PAIRS_RECORD_TYPE);
-
- package PRL renames PAIRS_RECORD_LISTS;
-
-
- procedure PUT_ERROR( --| Put error message
- TEXT: in STRING --| error message to print
- );
-
- EMPTYSTACK: exception; --| Raised if an attemp is made to manipulate
- --| an empty list.
-
- ------------------------------------------------------------------------------
- -- Declarations of global variables for reqsref
- ------------------------------------------------------------------------------
-
- PAIRS_FILE_PRINT_FLAG : BOOLEAN;
- -- Set to false if exceptions are raised
- -- during source file processing
-
- CURRENT_LINE : HD.SOURCE_LINE := 0;
- --current line in source text
-
- STACK_INFO : PD.SOURCE_TEXT;
- --| Holds current stack information. Used by grammar
- --| and ReduceActions.apply_red.
- SUBUNIT_STACK : ST.STACK;
- --| Holds current stack pointer
- IDENTIFIER : PD.SOURCE_TEXT;
- --| Identifier for current subunit
- IDENT_LINE_NUMBER : HD.SOURCE_LINE;
- PAIRS_CHECK_FLAG : BOOLEAN;
- IDENT_FLAG : BOOLEAN := FALSE;
- --| flag to mark identifier (see getnext.sub)
- REQ_TREE : RT.TREE;
- LOC_TREE : LT.TREE;
- PAIRS_RECORD_LIST : PRL.LIST;
-
- -------------------------------------------------------------------------
- -- Procedures for stack operations
- -------------------------------------------------------------------------
-
- procedure PUSH_STACK; --| 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 POP_STACK;
-
- function GET_LOCATION return LOCATION;
- --| Reads through Subunit_Stack and puts out all back identifiers.
-
- function IMAGE(LOCATION_NAME : in LOCATION) return SP.STRING_TYPE;
- --| Returns the image of a program unit.
-
- procedure GET_REF(
- Pairs_Record: Pairs_Record_Type
- );
-
- --| N/A: Raises, Requires
-
- --| Effects
- --| This procedure looks at Ada comment tokens, If a comment starts with
- --| the keyword that indicates the presence of a reference string then
- --| the comment string is passed to the scan procedure in the document_ref
- --| package to be parsed.
-
- procedure CHECK_PAIRS;
- --| N/A: Raises, Requires
-
- --| Effects
- --| Some requirement strings belong to program units that are not yet
- --| on the parse stack when these requirement strings are found. This
- --| procedure checks that a given requirement string is associated with the
- --| correct program unit. If its line number in the source file is greater or
- --| equal to the line number of identifier (see getnextnoncommenttoken) then
- --| its program unit gets changed to include the new stack_info.
-
- procedure PLACE_PAIR(PAIR : in PAIRS_RECORD_TYPE);
-
- --| N/A: Raises, Requires
-
- --| Effects
- --| This procedure is needed to sort pairs of requirement-cited and
- --| location-in-code by requirement as well as by location. Two labeled
- --| tree structures, req_tree and loc_tree are used for the sorting.
-
- procedure PRINT_PAIRS_FILE(
- PAIRS_FILE_NAME : in SP.STRING_TYPE; --| pairs file
- SOURCE_FILE_NAME : in SP.STRING_TYPE --| corresponding source file
- );
- --| N/A: Raises, Requires
-
- --| Effects
- --| After all requirement strings in a source file are found and sorted
- --| binary trees the information from both trees is printed to a
- --| pairs file.
-
- function MAKE_PAIRS_FILE_NAME(
- --| For a source file name return the corresponding pairs file name.
- SOURCE_FILE_NAME : in SP.STRING_TYPE
- ) return SP.STRING_TYPE;
-
- end REQS;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rqsapply.sub
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- with reqs;
- -- with INT_IO;
-
- separate (rqs_Parser)
- procedure Apply_Actions(Rule_Number : in PT.LeftHandSideRange) is
-
- use reqs;
- -- use INT_IO;
-
- begin
- case Rule_Number is
-
-
- ----------------------------------------------------------------------
- -- subprogram_declaration ::= subprogram_specification ;
-
- when 213 =>
- -- PUT( 213 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= PROCEDURE identifier
-
- when 214 =>
- -- PUT( 214 ,4);
-
- Push_Stack ;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= PROCEDURE identifier ( parameter_specification
- -- )
-
- when 215 =>
- -- PUT( 215 ,4);
-
- Push_Stack ;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= FUNCTION designator RETURN type_mark
-
- when 216 =>
- -- PUT( 216 ,4);
-
- Push_Stack ;
- ----------------------------------------------------------------------
- -- subprogram_specification ::= FUNCTION designator ( parameter_specification )
-
- when 217 =>
- -- PUT( 217 ,4);
-
- Push_Stack ;
- ----------------------------------------------------------------------
- -- subprogram_body ::= subprogram_specification IS [end_designator] ;
-
- when 226 =>
- -- PUT( 226 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- package_declaration ::= package_specification ;
-
- when 228 =>
- -- PUT( 228 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- package_spec_indicator ::= PACKAGE identifier IS
-
- when 231 =>
- -- PUT( 231 ,4);
-
- Push_Stack ;
- ----------------------------------------------------------------------
- -- package_body ::= package_body_indicator declarative_part END [identifier] ;
-
- when 232 =>
- -- PUT( 232 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- package_body ::= package_body_indicator declarative_part__begin_end_block ;
-
- when 233 =>
- -- PUT( 233 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- package_body_indicator ::= PACKAGE BODY identifier IS
-
- when 234 =>
- -- PUT( 234 ,4);
-
- Push_Stack ;
- ----------------------------------------------------------------------
- -- renaming_declaration ::= subprogram_specification RENAMES name ;
-
- when 243 =>
- -- PUT( 243 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- task_declaration ::= task_specification ;
-
- when 244 =>
- -- PUT( 244 ,4);
-
- pop_stack;
- ----------------------------------------------------------------------
- -- task_specification ::= TASK identifier
-
- when 245 =>
- -- PUT( 245 ,4);
-
- push_stack;
- ----------------------------------------------------------------------
- -- task_specification ::= TASK TYPE identifier
-
- when 246 =>
- -- PUT( 246 ,4);
-
- push_stack;
- ----------------------------------------------------------------------
- -- task_specification ::= TASK identifier IS {entry_declaration} END
- -- [identifier]
-
- when 247 =>
- -- PUT( 247 ,4);
-
- push_stack;
- ----------------------------------------------------------------------
- -- task_specification ::= TASK TYPE identifier IS {entry_declaration} END
-
- when 248 =>
- -- PUT( 248 ,4);
-
- push_stack;
- ----------------------------------------------------------------------
- -- task_body ::= task_body_indicator declarative_part__begin_end_block ;
-
- when 249 =>
- -- PUT( 249 ,4);
-
- pop_Stack ;
- ----------------------------------------------------------------------
- -- task_body_indicator ::= TASK BODY identifier IS
-
- when 250 =>
- -- PUT( 250 ,4);
-
- Push_Stack ;
- ----------------------------------------------------------------------
- -- body_stub ::= subprogram_specification IS SEPARATE ;
-
- when 284 =>
- -- PUT( 284 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- body_stub ::= PACKAGE BODY identifier IS SEPARATE ;
-
- when 285 =>
- -- PUT( 285 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- body_stub ::= TASK BODY identifier IS SEPARATE ;
-
- when 286 =>
- -- PUT( 286 ,4);
-
- pop_Stack ;
- ----------------------------------------------------------------------
- -- generic_specification ::= generic_formal_part subprogram_specification
-
- when 295 =>
- -- PUT( 295 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- generic_specification ::= generic_formal_part package_specification
-
- when 296 =>
- -- PUT( 296 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- generic_parameter_declaration ::= WITH subprogram_specification ;
-
- when 301 =>
- -- PUT( 301 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ;
-
- when 314 =>
- -- PUT( 314 ,4);
-
- Pop_Stack ;
- ----------------------------------------------------------------------
- -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ( )
- -- ;
-
- when 315 =>
- -- PUT( 315 ,4);
-
- Pop_Stack ;
-
- when others =>
- null;
- end case;
-
- end Apply_Actions;
-
-
-
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --reqs.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with FILE_MANAGER;
- with DOCUMENT_REF;
- with case_insensitive_string_comparison;
- with TEXT_IO;
-
- package body REQS is
-
- package SC renames case_insensitive_string_comparison;
-
- procedure PUT_ERROR(TEXT : in STRING) is
- begin
- TEXT_IO.PUT_LINE("?? " & TEXT);
- end PUT_ERROR;
-
- -- Procedures for stack operations
- --------------------------------------------------------------------------
-
- procedure INIT_STACK_ELEMENT is
-
- begin
-
- STACK_INFO := IDENTIFIER;
-
- end INIT_STACK_ELEMENT;
-
- procedure PUSH_STACK is
-
- begin
-
- ST.PUSH(SUBUNIT_STACK, STACK_INFO);
- INIT_STACK_ELEMENT;
- PAIRS_CHECK_FLAG := TRUE;
- CHECK_PAIRS;
- PAIRS_RECORD_LIST := PRL.CREATE;
- end PUSH_STACK;
-
- procedure POP_STACK is
-
- begin
- ST.POP(SUBUNIT_STACK, STACK_INFO);
- PAIRS_CHECK_FLAG := FALSE;
- CHECK_PAIRS;
- PAIRS_RECORD_LIST := PRL.CREATE;
- exception
- when ST.EMPTY_STACK =>
- raise EMPTYSTACK;
- end POP_STACK;
-
-
- function GET_LOCATION return LOCATION is
-
- STR : SP.STRING_TYPE;
- STK : ST.STACK;
- NAME : PD.SOURCE_TEXT;
- LOCATION_NAME : SL.LIST := SL.CREATE;
-
- begin
- STK := ST.COPY(SUBUNIT_STACK);
- STR := SP.CREATE(PD.GET_SOURCE_TEXT(STACK_INFO));
- SL.ATTACH(STR, LOCATION_NAME);
- while not ST.IS_EMPTY(STK) loop
- ST.POP(STK, NAME);
- STR := SP.CREATE(PD.GET_SOURCE_TEXT(NAME));
- SL.ATTACH(STR, LOCATION_NAME);
- end loop;
- SL.DELETEHEAD(LOCATION_NAME);
- ST.DESTROY(STK);
- return LOCATION_NAME;
- end GET_LOCATION;
-
- function IMAGE(LOCATION_NAME : in LOCATION) return SP.STRING_TYPE is
- S : SP.STRING_TYPE := SP.CREATE("");
- T : SP.STRING_TYPE;
- ITER : SL.LISTITER := SL.MAKELISTITER(LOCATION_NAME);
-
- begin
- if SL.MORE(ITER) then
- SL.NEXT(ITER, S);
- end if;
- while SL.MORE(ITER) loop
-
- SL.NEXT(ITER, T);
- S := SP."&"(S, ".");
- S := SP."&"(S, T);
- end loop;
- return S;
-
- end IMAGE;
-
- function Compare_Locations(
- SL1 : in SL.LIST;
- SL2 : in SL.LIST
- ) return integer
- is
- S1, S2: SP.STRING_TYPE;
- ITER1: SL.LISTITER := SL.MAKELISTITER(SL1);
- ITER2: SL.LISTITER := SL.MAKELISTITER(SL2);
- Diff: integer;
-
- begin
- while SL.MORE(ITER1) and SL.MORE(ITER2) loop
- SL.NEXT(ITER1, S1);
- SL.NEXT(ITER2, S2);
- Diff := SC.Compare(SP.Value(S1), SP.Value(S2));
- if Diff /= 0 then
- return Diff;
- end if;
- end loop;
- if not SL.More(Iter1) then
- if SL.More(Iter2) then
- return -1;
- else
- return 0;
- end if;
- end if;
- return 1;
- end Compare_Locations;
-
- function Ref_Line_Difference(
- X : in REF_LINE_RECORD;
- Y : in REF_LINE_RECORD
- ) return integer
- is
- diff: integer := document_Ref.Compare(X.Ref, Y.Ref);
-
- begin
- if Diff = 0 then
- return Integer(X.Line) - Integer(Y.Line);
- else
- return Diff;
- end if;
-
- end Ref_Line_Difference;
-
- function Loc_Line_Difference(
- X : in LOC_LINE_RECORD;
- Y : in LOC_LINE_RECORD
- ) return integer
- is
- begin
- if SL.EQUAL(X.LOC, Y.LOC) then
- return INTEGER(X.LINE) - INTEGER(Y.LINE);
- else
- return Compare_Locations(X.LOC, Y.LOC);
- end if;
- end LOC_LINE_Difference;
-
- procedure GET_REF(
- Pairs_Record: Pairs_Record_Type
- ) is
-
- begin
- PRL.ATTACH(PAIRS_RECORD_LIST, PAIRS_RECORD);
-
- end GET_REF;
-
- procedure CHECK_PAIRS is
- ITER : PRL.LISTITER := PRL.MAKELISTITER(PAIRS_RECORD_LIST);
- PAIRS_RECORD : PAIRS_RECORD_TYPE;
-
- begin
- while PRL.MORE(ITER) loop
- PRL.NEXT(ITER, PAIRS_RECORD);
- if PAIRS_CHECK_FLAG then
- if INTEGER(PAIRS_RECORD.LINE_NUMBER) >= INTEGER(IDENT_LINE_NUMBER) then
- PAIRS_RECORD.UNIT := GET_LOCATION;
- end if;
- end if;
- PLACE_PAIR(PAIRS_RECORD);
- end loop;
- PRL.DESTROY(PAIRS_RECORD_LIST);
- end CHECK_PAIRS;
-
- procedure PLACE_PAIR(PAIR : in PAIRS_RECORD_TYPE) is
- Found: BOOLEAN;
- REF_LINE, Dupl_Ref: REF_LINE_RECORD;
- LOC_LINE, Dupl_Loc: LOC_LINE_RECORD;
- Old_Refs: ref_Line_Trees.Tree;
- Old_Locs: loc_Line_Trees.Tree;
- New_Refs: ref_Line_Trees.Tree := ref_Line_Trees.Create;
- New_Locs: loc_Line_Trees.Tree := loc_Line_Trees.Create;
-
- begin
- REF_LINE.REF := PAIR.REF;
- REF_LINE.LINE := PAIR.LINE_NUMBER;
- LOC_LINE.LOC := PAIR.UNIT;
- LOC_LINE.LINE := PAIR.LINE_NUMBER;
-
- RT.Insert_If_Not_Found(Pair.Ref, new_Locs, req_Tree, Found, Old_Locs);
- if Found then
- Loc_Line_Trees.Destroy(new_Locs); -- Not needed
- Loc_Line_Trees.Insert_If_Not_Found(Loc_Line, Old_Locs, Found, Dupl_Loc);
- else
- Loc_Line_Trees.Insert_If_Not_Found(Loc_Line, new_Locs, Found, Dupl_Loc);
- end if;
-
- LT.Insert_If_Not_Found(Pair.Unit, new_Refs, Loc_Tree, Found, Old_Refs);
- if Found then
- Ref_Line_Trees.Destroy(new_Refs); -- Not needed
- Ref_Line_Trees.Insert_If_Not_Found(Ref_Line, Old_Refs, Found, Dupl_Ref);
- else
- Ref_Line_Trees.Insert_If_Not_Found(Ref_Line, new_Refs, Found, Dupl_Ref);
- end if;
-
- end PLACE_PAIR;
-
- procedure PRINT_PAIRS_FILE(PAIRS_FILE_NAME : in SP.STRING_TYPE;
- SOURCE_FILE_NAME : in SP.STRING_TYPE) is
- OUTPUT_FILE : TEXT_IO.FILE_TYPE;
- LOCATION_NAME : LOCATION;
- REF : DOCUMENT_REF.REFERENCE_STRING;
- STR : SP.STRING_TYPE;
- REF_LINE_TREE : REF_LINE_TREES.TREE;
- LOC_LINE_TREE : LOC_LINE_TREES.TREE;
- REF_LINE_ITER : REF_LINE_TREES.Iterator;
- LOC_LINE_ITER : LOC_LINE_TREES.Iterator;
- REF_LINE : REF_LINE_RECORD;
- LOC_LINE : LOC_LINE_RECORD;
- REQ_ITER : RT.Iterator := RT.MAKE_ITER(REQ_TREE);
- LOC_ITER : LT.Iterator := LT.MAKE_ITER(LOC_TREE);
-
- begin
- if not RT.MORE(REQ_ITER) then
- PAIRS_FILE_PRINT_FLAG := FALSE;
- return;
- end if;
- TEXT_IO.CREATE(
- FILE => OUTPUT_FILE,
- MODE => TEXT_IO.OUT_FILE,
- NAME => SP.VALUE(PAIRS_FILE_NAME)
- );
- TEXT_IO.PUT_LINE(OUTPUT_FILE, SP.VALUE(SOURCE_FILE_NAME));
- -- print req_tree in sorted order.
- while RT.MORE(REQ_ITER) loop
- RT.NEXT(REQ_ITER, REF, LOC_LINE_TREE);
- TEXT_IO.PUT(OUTPUT_FILE, DOCUMENT_REF.IMAGE(REF));
- TEXT_IO.PUT(OUTPUT_FILE, '%');
- LOC_LINE_ITER := LOC_LINE_TREES.MAKE_ITER(LOC_LINE_TREE);
- while LOC_LINE_TREES.MORE(LOC_LINE_ITER) loop
- LOC_LINE_TREES.NEXT(LOC_LINE_ITER, LOC_LINE);
- STR := SP."&"(IMAGE(LOC_LINE.LOC), ",");
- STR := SP."&"(STR, SP.CREATE(INTEGER'IMAGE(LOC_LINE.LINE)));
- TEXT_IO.PUT(OUTPUT_FILE, SP.VALUE(STR));
- TEXT_IO.PUT(OUTPUT_FILE, "$");
- end loop;
- TEXT_IO.PUT_LINE(OUTPUT_FILE, "");
- end loop;
- TEXT_IO.PUT_LINE(OUTPUT_FILE, "@");
- -- print loc_tree in sorted order.
- while LT.MORE(LOC_ITER) loop
- LT.NEXT(LOC_ITER, LOCATION_NAME, REF_LINE_TREE);
- TEXT_IO.PUT(OUTPUT_FILE, SP.VALUE(IMAGE(LOCATION_NAME)));
- TEXT_IO.PUT(OUTPUT_FILE, '%');
- REF_LINE_ITER := REF_LINE_TREES.MAKE_ITER(REF_LINE_TREE);
- while REF_LINE_TREES.MORE(REF_LINE_ITER) loop
- REF_LINE_TREES.NEXT(REF_LINE_ITER, REF_LINE);
- STR := SP."&"(SP.CREATE(DOCUMENT_REF.IMAGE(REF_LINE.REF)), ",");
- STR := SP."&"(STR, SP.CREATE(INTEGER'IMAGE(REF_LINE.LINE)));
- TEXT_IO.PUT(OUTPUT_FILE, SP.VALUE(STR));
- TEXT_IO.PUT(OUTPUT_FILE, "$");
- end loop;
- TEXT_IO.PUT_LINE(OUTPUT_FILE, "");
- end loop;
- TEXT_IO.CLOSE(OUTPUT_FILE);
- end PRINT_PAIRS_FILE;
-
- function MAKE_PAIRS_FILE_NAME(
- SOURCE_FILE_NAME : in SP.STRING_TYPE
- )return SP.STRING_TYPE
- is
- POSITION : NATURAL;
- SHORT_NAME : SP.STRING_TYPE :=
- SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(SOURCE_FILE_NAME)));
- SUFFIX : SP.STRING_TYPE;
-
- begin
- POSITION := SP.MATCH_C(SHORT_NAME, '.', 1);
- SUFFIX :=
- SP.SUBSTR(SHORT_NAME, POSITION + 1, SP.LENGTH(SHORT_NAME) - POSITION);
- if SP.EQUAL(SUFFIX, "ADA") then
- SUFFIX := SP.CREATE("APR");
- elsif SP.EQUAL(SUFFIX, "BDY") then
- SUFFIX := SP.CREATE("BPR");
- elsif SP.EQUAL(SUFFIX, "DAT") then
- SUFFIX := SP.CREATE("DPR");
- elsif SP.EQUAL(SUFFIX, "SPC") then
- SUFFIX := SP.CREATE("SPR");
- elsif SP.EQUAL(SUFFIX, "SUB") then
- SUFFIX := SP.CREATE("UPR");
- else
- SUFFIX := SP.CREATE("PR");
- end if;
- return SP."&"(
- SP.SUBSTR(SOURCE_FILE_NAME, 1, SP.LENGTH(SOURCE_FILE_NAME) - 3),
- SUFFIX
- );
- end MAKE_PAIRS_FILE_NAME;
-
- end REQS;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --merge.spc
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with REQS; use REQS;
- with TEXT_IO;
- with DOCUMENT_REF;
-
- package MERGE_PKG is
-
- BAD_PAIRS_FILE: exception;
- --| Raised when an attempt is made to read pairs from a file that
- --| contains invalid data.
-
- ABORT_MERGE_PHASE : exception;
- --| raised when merge phase cannot be completed.
-
- type REPORT_TYPE is (LOCATION, REQUIREMENT, NOREPORT);
-
- type FILE_PTR is access TEXT_IO.FILE_TYPE;
-
- type REQ_RECORD is
- record
- REF : DOCUMENT_REF.REFERENCE_STRING;
- SOURCE_FILE_NAME : SP.STRING_TYPE;
- PAIRS_FILE_NAME : SP.STRING_TYPE;
- PAIRS_FILE : FILE_PTR;
- LOCATION_STRING : SP.STRING_TYPE;
- MORE : BOOLEAN := TRUE;
- end record;
-
-
- REF_WIDTH: constant INTEGER := 20;
- --| Maximal number of characters in a reference string
-
- FILE_NAME_WIDTH: constant INTEGER := 15;
- --| maximal number of characters in a file pathname
-
- UNIT_WIDTH: constant INTEGER := 35;
- --| maximal number of characters in a program unit name
-
- LINE_NUM_WIDTH: constant INTEGER := 6;
- --| maximal number of characters in line number
-
- function GET_REPORT_HEADER(REPORT_KIND : in REPORT_TYPE) return STRING;
-
- procedure LOCATION_REPORT(
- PAIRS_FILES : in SL.LIST -- list of pairs files
- );
-
- --| N/A: Raises
-
- --| Requires
- --| The files in pairs_list must be pairs files, e. i. files created by
- --| REQSREF containing pairs of Requirement-Cited and Location-in-Code.
-
- --| Effects
- --| This procedure is called when the sort_by parameter is set to LOCATION.
- --| It sorts the pairs files alphabetically. Then from each file it gets those
- --| lines which contain pairs sorted by location and passes them to
- --| proccess_ location_line.
-
- procedure REQUIREMENT_MERGE(
- PAIRS_FILES : in SL.LIST -- list of pairs files
- );
-
- --| N/A: Raises
-
- --| Requires
- --| The files in pairs_list must be pairs files, e.i. files created by
- --| REQSREF, containing pairs of Requirement-Cited and Location-in-Code.
-
- --| Effects
- --| This procedure is called when the sort_by parameter is set to REQUIREMENT.
- --| It merges the pairs which are sorted by requirement so that a report can
- --| be generated. The records are first sorted by REQUIREMENT then by file
- --| names, then by line numbers.
-
- procedure PROCESS_LOCATION_LINE(LINE : in SP.STRING_TYPE);
- --| A string whose first part is a requirement, followed by a list of Ada
- --| locations and line numbers
-
- --| N/A: Raises, Requires
-
- --| Effects
- --| Gets the requirements, Ada unit names and line numbers of the requirement
- --| in the file from LINE and prints the information to the report file.
-
- procedure PROCESS_REQ_LINE(
- LINE : in SP.STRING_TYPE;
- --| A string whose first part is an Ada unit name. That is followed
- --| by a list of requirements and their line_numbers in the file.
- REQ : in out REQ_RECORD
- --| The record whose fields are to hold information from line
- );
-
- --| N/A Raises, Requires
-
- --| Effects
- --| Takes Requirement and Location from line and assigns them to the
- --| appropriate fields of req.
-
- procedure PRINT_RECORD(
- REQ : in REQ_RECORD --| Record to be printed
- );
- --| N/A: Raises, Requires
-
- --| Effects
- --| Prints information from the req_record to the report file.
-
- function REQ_LESS_EQ(X : in REQ_RECORD;
- Y : in REQ_RECORD) return BOOLEAN;
- --| N/A Raises, Requires
-
- --| Effects
- --| This comparison function compares the reference_string fields and the
- --| file_name fields of x and y. It returns true if x.ref , y.ref, or if
- --| in case of their equality x.file_name <= y.file_name.
-
- end MERGE_PKG;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --merge.bdy
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with FILE_MANAGER;
- with PAGINATED_OUTPUT;
- with case_insensitive_string_comparison;
- with Binary_Trees_Pkg;
-
- package body MERGE_PKG is
-
- package PO renames PAGINATED_OUTPUT;
- package SC renames case_insensitive_string_comparison;
-
- package INT_IO is new TEXT_IO.INTEGER_IO(INTEGER);
-
- function compare_File_Names(P, Q: SP.String_Type) return integer;
-
- package FILE_TREE_PKG is new BINARY_TREES_Pkg(
- Value_Type => SP.STRING_TYPE,
- Difference => compare_File_Names
- );
-
- package FTP renames FILE_TREE_PKG;
- FILE_TREE: FTP.TREE;
-
-
- INT_STRING : STRING(1 .. LINE_NUM_WIDTH);
- LAST : INTEGER;
- SOURCE_FILE_NAME : SP.STRING_TYPE;
-
- function compare_File_Names(P, Q: SP.String_Type) return integer is
- begin
- return SC.Compare(SP.Value(P), SP.Value(Q));
-
- end compare_File_Names;
-
-
- function GET_REPORT_HEADER(
- REPORT_KIND : in REPORT_TYPE
- ) return STRING
- is
- BLANKS : SP.STRING_TYPE := SP.CREATE(
- " ");
- S : SP.STRING_TYPE;
-
- begin
- if REPORT_KIND = REQUIREMENT then
- S := SP."&"("Requirement", SP.SUBSTR(BLANKS, 1, REF_WIDTH - 11));
- S := SP."&"(S, "File");
- S := SP."&"(S, SP.SUBSTR(BLANKS, 1, FILE_NAME_WIDTH + LINE_NUM_WIDTH - 8))
- ;
- S := SP."&"(S, "Line");
- S := SP."&"(S, SP.SUBSTR(BLANKS, 1, 3));
- S := SP."&"(S, "Unit");
- elsif REPORT_KIND = LOCATION then
- S := SP."&"("File", SP.SUBSTR(BLANKS, 1, FILE_NAME_WIDTH + LINE_NUM_WIDTH
- - 8));
- S := SP."&"(S, "Line");
- S := SP."&"(S, SP.SUBSTR(BLANKS, 1, 3));
- S := SP."&"(S, "Unit");
- S := SP."&"(S, SP.SUBSTR(BLANKS, 1, UNIT_WIDTH - 4));
- S := SP."&"(S, "Requirement");
- end if;
- return SP.VALUE(S);
- end GET_REPORT_HEADER;
-
- procedure LOCATION_REPORT(PAIRS_FILES : in SL.LIST) is
- -- This procedure sorts and reada pairs files. A pairs file is a file
- -- created by REQSREF, which contains two sections: pairs sorted by
- -- require<ment and the same pairs sorted by location. '@' is used to
- -- separate these sections. Location_merge is only interested in the
- -- second part of a pairs file, the pairs sorted by location.
- --
- -- The elements of the pairs_files list are first sorted and stored in a
- -- binary tree. Then each file is opened and read line by line. When the
- -- separator '@' is found the following lines are passed to process_
- -- location_line in order to be printed.
-
- PRESENT : BOOLEAN;
- MAX_LINE : INTEGER := 1000;
- LINE : STRING(1 .. MAX_LINE);
- STR : SP.STRING_TYPE;
- PAIRS_FILE : TEXT_IO.FILE_TYPE;
- LIST_ITER : SL.LISTITER;
- FILE_ITER : FTP.Iterator;
-
- begin
- -- sort the pairs_files
- FILE_TREE := FTP.CREATE;
- LIST_ITER := SL.MAKELISTITER(PAIRS_FILES);
- while SL.MORE(LIST_ITER) loop
- SL.NEXT(LIST_ITER, STR);
- STR := SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(STR)));
- FTP.INSERT(STR, FILE_TREE);
- end loop;
-
- -- For each pairs file get the stored information line by line.
- FILE_ITER := FTP.MAKE_ITER(FILE_TREE);
- while FTP.MORE(FILE_ITER) loop
- FTP.NEXT(FILE_ITER, STR);
- TEXT_IO.OPEN(
- FILE => PAIRS_FILE,
- MODE => TEXT_IO.IN_FILE,
- NAME => SP.VALUE(STR)
- );
- TEXT_IO.SET_INPUT(PAIRS_FILE);
- TEXT_IO.GET_LINE(PAIRS_FILE, LINE, LAST);
- STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST);
- SOURCE_FILE_NAME := SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(STR)));
- -- Skip over the first part of the file which contains the
- -- pairs sorted by reqrequirement.
- loop
- begin
- TEXT_IO.GET_LINE(PAIRS_FILE, LINE, LAST);
- exit when LINE(1) = '@';
- exception
- when TEXT_IO.END_ERROR =>
- raise BAD_PAIRS_FILE;
- end;
- end loop;
- while not TEXT_IO.END_OF_FILE(PAIRS_FILE) loop
- TEXT_IO.GET_LINE(PAIRS_FILE, LINE, LAST);
- PROCESS_LOCATION_LINE(SP.CREATE(LINE));
- end loop;
- TEXT_IO.CLOSE(PAIRS_FILE);
- end loop;
-
- exception
-
- when TEXT_IO.STATUS_ERROR =>
- PUT_ERROR("File " & SP.VALUE(STR) & " already open.");
- raise ABORT_MERGE_PHASE;
-
- when TEXT_IO.USE_ERROR =>
- PUT_ERROR("Unable to open file " & SP.VALUE(STR) & " for input.");
- raise ABORT_MERGE_PHASE;
-
- when TEXT_IO.NAME_ERROR =>
- PUT_ERROR("Invalid file name " & SP.VALUE(STR) & ".");
- raise ABORT_MERGE_PHASE;
-
- when BAD_PAIRS_FILE =>
- PUT_ERROR("Unable to interpret " & TEXT_IO.NAME(PAIRS_FILE) &
- " as a pairs_file.");
- raise ABORT_MERGE_PHASE;
-
- end LOCATION_REPORT;
-
- procedure PROCESS_LOCATION_LINE(LINE : in SP.STRING_TYPE) is
-
- -- This procedure takes a location line and extracts from it the
- -- location (which is a full Ada name) and the reference strings with
- -- their line numbers. These items are then printed to the report file.
- --
- -- '%' separates the location from the list of reference strings. Two
- -- reference strings are separated by '$', and ',' is used to separate
- -- a reference string and its line number.
-
- LOCATION_STRING : SP.STRING_TYPE;
- REQ_STRING : SP.STRING_TYPE;
- NUMBER : INTEGER;
- LINE_NUMBER : SP.STRING_TYPE;
- POSITION, PREV_POS : NATURAL := 1;
- TEMP_POS : POSITIVE;
-
- begin
- POSITION := SP.MATCH_C(LINE, '%', PREV_POS);
- LOCATION_STRING := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS);
- PREV_POS := POSITION + 1;
- loop
- POSITION := SP.MATCH_C(LINE, ',', PREV_POS);
- exit when POSITION = 0;
- REQ_STRING := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS);
- PREV_POS := POSITION + 1;
- POSITION := SP.MATCH_C(LINE, '$', PREV_POS);
- LINE_NUMBER := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS);
-
- PREV_POS := POSITION + 1;
- PO.PUT(SOURCE_FILE_NAME);
- if SP.LENGTH(SOURCE_FILE_NAME) > FILE_NAME_WIDTH then
- PO.PUT_LINE("");
- PO.SPACE(FILE_NAME_WIDTH);
- else
- PO.SPACE(FILE_NAME_WIDTH - SP.LENGTH(SOURCE_FILE_NAME));
- end if;
- INT_IO.GET(SP.VALUE(LINE_NUMBER), NUMBER, TEMP_POS);
- INT_IO.PUT(INT_STRING, NUMBER);
- PO.PUT(INT_STRING);
- PO.SPACE(3);
- PO.PUT(LOCATION_STRING);
- if SP.LENGTH(LOCATION_STRING) > UNIT_WIDTH then
- PO.PUT_LINE("");
- PO.SPACE(FILE_NAME_WIDTH + LINE_NUM_WIDTH + 3 + UNIT_WIDTH);
- else
- PO.SPACE(UNIT_WIDTH - SP.LENGTH(LOCATION_STRING));
- end if;
- PO.PUT_LINE(REQ_STRING);
- exit when PREV_POS >= LAST;
- end loop;
- end PROCESS_LOCATION_LINE;
-
- function REQ_LESS_EQ(X : in REQ_RECORD;
- Y : in REQ_RECORD) return BOOLEAN is
- begin
- if DOCUMENT_REF.EQ(X.REF, Y.REF) then
- return SP."<"(X.PAIRS_FILE_NAME, Y.PAIRS_FILE_NAME);
- else
- return DOCUMENT_REF."<"(X.REF, Y.REF);
- end if;
- end REQ_LESS_EQ;
-
- procedure REQUIREMENT_MERGE(PAIRS_FILES : in SL.LIST) is
-
- -- Assign the file names in the pairs_files list to the file_name
- -- fields of the records in req_array. For each element x in req_array
- -- open the corresponding pairs file, read its first line and assign
- -- the appropriate strings to x.ref and x.location_string (see
- -- process_req_line).
- -- Print the smallest record and read the next line from the file that
- -- that record came from. Continue this until everything is read and
- -- printed.
-
- MAX_LINE : INTEGER := 1000;
- STR : SP.STRING_TYPE;
- LINE : STRING(1 .. MAX_LINE);
- I : NATURAL;
- N : NATURAL := SL.LENGTH(PAIRS_FILES);
- START : NATURAL := 1;
- OPEN_FILES : NATURAL;
- ITER : SL.LISTITER := SL.MAKELISTITER(PAIRS_FILES);
- REQ_ARRAY : array(INTEGER range 1 .. SL.LENGTH(PAIRS_FILES)) of REQ_RECORD
- ;
-
-
- function FIND_FIRST_RECORD return NATURAL is
- I : NATURAL;
- START : NATURAL := 1;
-
- begin
- START := 1;
- loop
- exit when REQ_ARRAY(START).MORE or START = N;
- START := START + 1;
- end loop;
- if START = N then
- return START;
- else
- I := START + 1;
- end if;
- while I <= N loop
- if REQ_LESS_EQ(REQ_ARRAY(I), REQ_ARRAY(START)) and REQ_ARRAY(I).MORE
- then
- START := I;
- end if;
- I := I + 1;
- end loop;
- return START;
- end FIND_FIRST_RECORD;
-
- begin
- I := 0;
- while SL.MORE(ITER) loop
- I := I + 1;
- SL.NEXT(ITER, REQ_ARRAY(I).PAIRS_FILE_NAME);
- REQ_ARRAY(I).PAIRS_FILE := new TEXT_IO.FILE_TYPE;
- TEXT_IO.OPEN(FILE => REQ_ARRAY(I).PAIRS_FILE.all, NAME => SP.VALUE(
- REQ_ARRAY(I).PAIRS_FILE_NAME), MODE => TEXT_IO.IN_FILE);
- --first read the name of the corresponding source_file.
- TEXT_IO.GET_LINE(REQ_ARRAY(I).PAIRS_FILE.all, LINE, LAST);
- STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST);
- REQ_ARRAY(I).SOURCE_FILE_NAME :=
- SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(STR)));
- TEXT_IO.GET_LINE(REQ_ARRAY(I).PAIRS_FILE.all, LINE, LAST);
- STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST);
- PROCESS_REQ_LINE(STR, REQ_ARRAY(I));
- end loop;
- OPEN_FILES := SL.LENGTH(PAIRS_FILES);
- START := FIND_FIRST_RECORD;
- PRINT_RECORD(REQ_ARRAY(START));
- loop
- TEXT_IO.GET_LINE(REQ_ARRAY(START).PAIRS_FILE.all, LINE, LAST);
- if LINE(1) = '@' then
- REQ_ARRAY(START).MORE := FALSE;
- TEXT_IO.CLOSE(REQ_ARRAY(START).PAIRS_FILE.all);
- OPEN_FILES := OPEN_FILES - 1;
- else
- STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST);
- PROCESS_REQ_LINE(STR, REQ_ARRAY(START));
- end if;
- exit when OPEN_FILES = 0;
- START := FIND_FIRST_RECORD;
- PRINT_RECORD(REQ_ARRAY(START));
- end loop;
-
- exception
- when TEXT_IO.STATUS_ERROR =>
- PUT_ERROR("File " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME) &
- " already open.");
- raise ABORT_MERGE_PHASE;
-
- when TEXT_IO.USE_ERROR =>
- PUT_ERROR("Unable to open file " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME)
- & " for input.");
- raise ABORT_MERGE_PHASE;
-
- when TEXT_IO.NAME_ERROR =>
- PUT_ERROR("Invalid file name " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME) &
- ".");
- raise ABORT_MERGE_PHASE;
-
- when BAD_PAIRS_FILE =>
- PUT_ERROR("Unable to interpret " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME)
- & " as a pairs file.");
- raise ABORT_MERGE_PHASE;
-
- end REQUIREMENT_MERGE;
-
- procedure PROCESS_REQ_LINE(LINE : in SP.STRING_TYPE;
- REQ : in out REQ_RECORD) is
-
- -- This procedure looks at a req_line and extracts the reference
- -- string and the locations from it. The reference string is assigned to
- -- req.ref and the location part is assigned to req.location_string.
- -- '%' separates the reference string from the list of locations.
-
- POSITION : NATURAL := 1;
- PREV_POS : NATURAL := 1;
- I : NATURAL := 1;
- STR : SP.STRING_TYPE;
-
- begin
- POSITION := SP.MATCH_C(LINE, '%', PREV_POS);
- STR := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS);
- DOCUMENT_REF.SCAN(S => SP.VALUE(STR), INDEX => I, RS => REQ.REF);
- PREV_POS := POSITION + 1;
- REQ.LOCATION_STRING := SP.SUBSTR(LINE, PREV_POS,
-
- SP.LENGTH(LINE) - POSITION);
-
- exception
- when CONSTRAINT_ERROR =>
- raise BAD_PAIRS_FILE;
-
- end PROCESS_REQ_LINE;
-
- procedure PRINT_RECORD(REQ : in REQ_RECORD) is
-
- -- This prints information from req to the report file. req.location_string
- -- contains Ada unit names and the line numbers of the requirements.
- -- '$' separates two locations, and ',' separates a unit name from a line
- -- number.
-
- LOCATION_STRING : SP.STRING_TYPE;
- LINE_NUMBER : SP.STRING_TYPE;
- POSITION : NATURAL := 1;
- TEMP_POS : NATURAL;
- NUMBER : INTEGER;
- PREV_POS : NATURAL := 1;
- STR : SP.STRING_TYPE;
- REFSTR : SP.STRING_TYPE;
-
- begin
- REFSTR := SP.CREATE(DOCUMENT_REF.IMAGE(REQ.REF));
- loop
- POSITION := SP.MATCH_C(REQ.LOCATION_STRING, ',', PREV_POS);
- exit when POSITION = 0;
- LOCATION_STRING := SP.SUBSTR(REQ.LOCATION_STRING, PREV_POS, POSITION -
- PREV_POS);
- PREV_POS := POSITION + 1;
- POSITION := SP.MATCH_C(REQ.LOCATION_STRING, '$', PREV_POS);
- LINE_NUMBER := SP.SUBSTR(REQ.LOCATION_STRING, PREV_POS, POSITION -
- PREV_POS);
-
- PREV_POS := POSITION + 1;
- PO.PUT(REFSTR);
- if SP.LENGTH(REFSTR) > REF_WIDTH then
- PO.PUT_LINE("");
- PO.SPACE(REF_WIDTH);
- else
- PO.SPACE(REF_WIDTH - SP.LENGTH(REFSTR));
- end if;
- PO.PUT(REQ.SOURCE_FILE_NAME);
- if SP.LENGTH(REQ.SOURCE_FILE_NAME) > FILE_NAME_WIDTH then
- PO.PUT_LINE("");
- PO.SPACE(REF_WIDTH + FILE_NAME_WIDTH);
- else
- PO.SPACE(FILE_NAME_WIDTH - SP.LENGTH(REQ.SOURCE_FILE_NAME));
- end if;
- INT_IO.GET(SP.VALUE(LINE_NUMBER), NUMBER, TEMP_POS);
- INT_IO.PUT(INT_STRING, NUMBER);
- PO.PUT(INT_STRING);
- PO.SPACE(3);
- PO.PUT_LINE(LOCATION_STRING);
- end loop;
-
- end PRINT_RECORD;
-
- end MERGE_PKG;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --getnext.sub
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with text_io;
- with case_insensitive_string_comparison;
- with scanners; use scanners;
- with rqs_ParserDeclarations;
- with document_Ref;
- with reqs;
-
- separate (rqs_Lex)
- function GetNextNonCommentToken return PD.ParseStackElement
- is
- use reqs;
- package SC renames case_insensitive_string_comparison;
-
- Comment_Flag: constant Character := '|';
- Alt_Flag: constant Character := '!';
-
- Keyword: constant string := "Requirements_Satisfied";
- Alt_Keyword: constant string := "Requirements Satisfied";
-
- Found_Keyword: boolean := False;
- Found_Flag: boolean := False;
- Found_Valid_Ref: boolean := False;
- New_Comment: boolean := True;
- Continued: boolean := False;
-
- procedure check_For_Keyword(
- S: in out Scanner_Type;
- C: string
- )
- is
- TS: Scanner_Type := S;
-
- --| Effects: Look for a keyword comment in C. On exit, Found_Keyword
- --| is True iff the keyword was found. The scanner S is advanced past
- --| the keyword, the trailing ':' (if any), and the following white
- --| space. Use is_Empty to determine if there is anything more to scan.
- --| Otherwise, if a Byron flag is found (--|, --|+, or --|-) then
- --| Found_Flag is made True, and S is advanced past it.
- --| If neither keyword nor flag is found, S is not changed.
- --| Valid keyword is --| Keyword: or --| Keyword<nl>. The goal here
- --| is to accept both Byron syntax and NOSC's slightly different syntax.
-
- begin
- Found_Keyword := False;
- Found_Flag := False;
- if (C(TS.Index) = Comment_Flag or else C(TS.Index) = Alt_Flag) then
- TS.Index := TS.Index + 1; -- Skip the | or !
- if is_sign(TS, C) then
- TS.Index := TS.Index + 1; -- Skip the + or -
- end if;
- S := TS;
- Found_Flag := True;
- skip_Blanks(TS, C); -- Skip blanks after |
- scan_until(TS, C, ':'); -- Look for "Keyword:"
- if (TS.Length > 0)
- and then ( SC.equal(Keyword, C(TS.First..TS.Last))
- or else
- SC.equal(Alt_Keyword, C(TS.First..TS.Last))
- )
- then
- Found_Keyword := True;
- TS.Index := TS.Index + 1; -- Skip the :
- skip_Blanks(TS, C); -- Skip trailing blanks
- S := TS; -- Update the scanner
- return;
- else -- Keyword by itself on a line?
- TS.First := TS.Index;
- TS.Last := TS.Max_Index;
- trim_Blanks(TS, C);
- if SC.equal(Keyword, C(TS.First..TS.Last))
- or else SC.equal(Alt_Keyword, C(TS.First..TS.Last))
- then
- S.Index := S.Max_Index + 1; -- Gobble up entire line
- Found_Keyword := True; -- Found keyword
- return;
- end if;
- end if;
- end if;
-
- end check_For_Keyword;
-
- procedure scan_Pair(
- S: in out Scanner_Type;
- C: String
- )
- is
- Pairs_Record: Pairs_Record_Type;
- Line_Num: HD.Source_Line := CST.lexed_token.srcpos_line;
-
- begin
- Document_Ref.Scan(C, S.Index, Pairs_Record.Ref);
- Pairs_Record.Unit := Get_Location;
- Pairs_Record.Line_Number := Line_Num;
- get_Ref(Pairs_Record);
- Found_Valid_Ref := True;
- New_Comment := False;
- skip_Blanks(S, C);
- if not is_Empty(S) and then C(S.Index) = ',' then
- S.Index := S.Index + 1;
- end if;
- exception
- when Document_Ref.Invalid_ParagraphId_String =>
- if Found_Valid_Ref and new_Comment then
- -- Already found at least one valid reference, and this invalid one
- -- is in a new comment, therefore this isn't an error, its simply
- -- not a Requirement_Satisfied comment or continuation of one
- Continued := False;
- else
- Put_Error("Invalid paragraph string at line"
- & integer'Image(Line_Num)
- & ", column" & integer'Image(S.Index)
- & ".");
- Pairs_File_Print_Flag := False;
- end if;
- S.Index := S.Max_Index + 1;
- when Document_Ref.Invalid_DocId_String =>
- if Found_Valid_Ref and New_Comment then
- Continued := False;
- else
- Put_Error("Invalid document id at line"
- & Integer'Image(Line_Num)
- & ", column" & integer'Image(S.Index)
- & ".");
- Pairs_File_Print_Flag := False;
- end if;
- S.Index := S.Max_Index + 1;
- end scan_Pair;
-
- begin
- CST := GetNextSourceToken;
- Found_Valid_Ref := False;
-
- while (CST.gram_sym_val = PT.Comment_TokenValue) loop
- declare
- Comment: constant string
- := pd.get_source_text(cst.lexed_token.text);
- CS: Scanner_Type;
-
- begin
- start_Scanner(CS, Comment, Comment'Last);
- New_Comment := True;
- if not is_Empty(CS) then -- if Comment is non-blank
- check_For_Keyword(CS, Comment);
- if Continued and not Found_Keyword then
- -- This comment is a continuation of a previous comment
- if Found_Flag then
- while CS.Index < CS.Max_Index loop
- Scan_Pair(CS, Comment);
- end loop;
- else -- Encountered a non-Byron Comment
- Continued := False;
- end if;
- elsif Found_Keyword then
- Continued := True;
- while CS.Index <= CS.Max_Index loop
- Scan_Pair(CS, Comment);
- end loop;
- end if;
- end if;
- end;
-
- CST := GetNextSourceToken; -- Get the next token
- end loop;
-
- -- Now process the token that was not a comment:
- 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
- Ident_Flag := True;
-
- elsif (CST.gram_sym_val = PT.IdentifierTokenValue)
- or (CST.gram_sym_val = PT.StringTokenValue)
- then
- if Ident_Flag then
- Identifier := CST.lexed_token.text;
- ident_line_number := cst.lexed_token.srcpos_line;
- Ident_Flag := False;
- end if;
-
-
- -- Debug Aid
- -- TEXT_IO.Put_Line(PD.Dump_Parse_Stack_Element(CST));
-
- end if;
- return CST; -- return the token that is not a comment
-
- end GetNextNonCommentToken;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --rdriver.ada
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- -------SPEC---------------------------------------------------------------
- function REQSREF return INTEGER;
-
- -------BODY---------------------------------------------------------------
-
- with REQS; use REQS;
- with MERGE_PKG; use MERGE_PKG;
- with STRING_LISTS;
- with STANDARD_INTERFACE;
- with STRING_PKG;
- with FILE_MANAGER;
- with TEXT_IO;
- with PAGINATED_OUTPUT;
- with HOST_LIB;
- with rqs_PARSER;
- with rqs_PARSERDECLARATIONS;
- with HOST_DEPENDENCIES;
-
- function REQSREF return INTEGER is
-
-
- package SL renames STRING_LISTS;
- package SP renames STRING_PKG;
- package FM renames FILE_MANAGER;
- package PO renames PAGINATED_OUTPUT;
- package PD renames rqs_PARSERDECLARATIONS;
-
- package STRINGTYPE is new STANDARD_INTERFACE.STRING_ARGUMENT("string");
-
- package REPORT is new STANDARD_INTERFACE.ENUMERATED_ARGUMENT(
- ENUM_TYPE => MERGE_PKG.REPORT_TYPE,
- ENUM_TYPE_NAME => "report_type"
- );
-
- package FILE_LIST is new STANDARD_INTERFACE.STRING_LIST_ARGUMENT(
- STRING_TYPE_NAME => "string_type",
- STRING_TYPE_LIST => "string_list"
- );
-
- REQSR : STANDARD_INTERFACE.PROCESS_HANDLE;
- OUTPUT_FILE : SP.STRING_TYPE; -- name of report file
- SOURCE_LIST : STRING_LISTS.LIST; -- expanded source file names
- PAIRS_LIST : STRING_LISTS.LIST; -- expanded pairs file names
- REPORT_KIND : MERGE_PKG.REPORT_TYPE;
- SOURCE_ARG : SL.LIST; -- source file list before expansion
- PAIRS_ARG : SL.LIST; -- pairs file list before expansion
- SOURCE_FILE : SP.STRING_TYPE;
- PAIRS_FILE : SP.STRING_TYPE;
- ITER : STRING_LISTS.LISTITER;
- TOKEN : PD.PARSESTACKELEMENT;
-
- procedure EXPAND_FILE_NAMES(
- INPUT_LIST : in SL.LIST; -- file list before expansion
- EXPANDED_LIST : in out SL.LIST --expanded file list
- ) is
-
- --| Effects: A list of user-specified file names including *-notation
- --| is expanded into the list of the actual file names.
-
- NAME : SP.STRING_TYPE;
- FILE_NAMES : STRING_LISTS.LIST;
- LIST_ITER : SL.LISTITER := SL.MAKELISTITER(INPUT_LIST);
-
- begin
- SP.MARK;
- while SL.MORE(LIST_ITER) loop
- SL.NEXT(LIST_ITER, NAME);
- begin
- FILE_NAMES := FM.EXPAND(SP.Value(NAME), FM.NO_VERSION);
- STRING_LISTS.ATTACH(EXPANDED_LIST, FILE_NAMES);
- exception
- when FM.FILE_NOT_FOUND =>
- Put_Error("File " & SP.VALUE(NAME) & " not found.");
- exit;
- when FM.DEVICE_NOT_READY =>
- Put_Error("File " & SP.VALUE(NAME) & " device not ready.");
- exit;
- when FM.DIRECTORY_NOT_FOUND =>
- Put_Error("File " & SP.VALUE(NAME) & " directory not found.");
- exit;
- when FM.EXPAND_ERROR | FM.PARSE_ERROR =>
- Put_Error("File " & SP.VALUE(NAME) & " file name error.");
- exit;
- end;
- end loop;
-
- SP.RELEASE;
-
- end EXPAND_FILE_NAMES;
-
- procedure DO_SOURCE_FILE(FILE_NAME : in SP.STRING_TYPE) is
-
- --| Effects: Call the parser for input_source. When a requirement string is
- --| found in the source file call place_pair in order to find the proper
- --| position for the requirement string in tthe sorted tree. If no exception
- --| is raised during this function print_pairs_file is called to print the
- --| sorted trees out to a pairs file.
-
- INPUT_SOURCE : TEXT_IO.FILE_TYPE;
-
- begin
-
- REQ_TREE := RT.CREATE; -- The tree holding pairs sorted by requirement
- LOC_TREE := LT.CREATE; -- The tree holding pairs sorted by location
- PAIRS_FILE_PRINT_FLAG := TRUE;
- SUBUNIT_STACK := ST.CREATE;
- TEXT_IO.OPEN(FILE => INPUT_SOURCE,
- MODE => TEXT_IO.IN_FILE,
- NAME => SP.VALUE(FILE_NAME)
- );
- text_IO.PUT_LINE("-- Source file " & SP.VALUE(FILE_NAME));
- TEXT_IO.SET_INPUT(INPUT_SOURCE);
- TOKEN := rqs_PARSER.PARSE;
- -- The routine check_pairs is called whenever the subunit_stack changes in
- -- order to make sure that requirements are associated with the appropriate
- -- program units.
- REQS.PAIRS_CHECK_FLAG := FALSE;
- REQS.CHECK_PAIRS;
- TEXT_IO.CLOSE(INPUT_SOURCE);
- ST.DESTROY(SUBUNIT_STACK);
- if pairs_file_print_flag then
- PAIRS_FILE := MAKE_PAIRS_FILE_NAME(FILE_NAME);
- PRINT_PAIRS_FILE(PAIRS_FILE, FILE_NAME);
- end if;
-
-
- exception
-
- when TEXT_IO.STATUS_ERROR =>
- PUT_ERROR("File " & SP.VALUE(FILE_NAME) & "already open.");
- PAIRS_FILE_PRINT_FLAG := FALSE;
-
- when TEXT_IO.USE_ERROR =>
- PUT_ERROR("Unable to open file " & SP.VALUE(FILE_NAME) & " for input.");
- PAIRS_FILE_PRINT_FLAG := FALSE;
-
- when TEXT_IO.NAME_ERROR =>
- PUT_ERROR("Invalid file name " & SP.VALUE(FILE_NAME) & ".");
- PAIRS_FILE_PRINT_FLAG := FALSE;
-
- when PD.PARSER_ERROR =>
- PUT_ERROR("Syntax error at line"
- & HD.SOURCE_LINE'IMAGE(PD.CURTOKEN.LEXED_TOKEN.SRCPOS_LINE)
- & " column"
- & HD.SOURCE_COLUMN'IMAGE(PD.CURTOKEN.LEXED_TOKEN.SRCPOS_COLUMN)
- );
- TEXT_IO.CLOSE(INPUT_SOURCE);
- ST.DESTROY(SUBUNIT_STACK);
- PAIRS_FILE_PRINT_FLAG := FALSE;
-
- end DO_SOURCE_FILE;
-
-
- begin -- reqsref
-
- SP.MARK;
- HOST_LIB.SET_ERROR;
- STANDARD_INTERFACE.SET_TOOL_IDENTIFIER(IDENTIFIER => "1.1");
-
- STANDARD_INTERFACE.DEFINE_PROCESS(
- PROC => REQSR,
- NAME => "Requirements_Reference",
- HELP => "Finds requirement strings in Ada source files"
- );
- FILE_LIST.DEFINE_ARGUMENT(
- PROC => REQSR,
- NAME => "source_files",
- DEFAULT => SL.CREATE,
- HELP => "Names of the input source files"
- );
- FILE_LIST.DEFINE_ARGUMENT(
- PROC => REQSR,
- NAME => "PAIRS_FILES",
- DEFAULT => SL.CREATE,
- HELP => "names of the input pairs files"
- );
- STRINGTYPE.DEFINE_ARGUMENT(
- PROC => REQSR,
- NAME => "output",
- DEFAULT => "",
- HELP => "Name of the report file (defaults to standard output)"
- );
- REPORT.DEFINE_ARGUMENT(
- PROC => REQSR,
- NAME => "report",
- DEFAULT => REQUIREMENT,
- HELP => "requirement (default), location or noreport)"
- );
- STANDARD_INTERFACE.DEFINE_PROCESS_HELP(
- PROC => REQSR,
- HELP => "Finds requirement strings in Ada source files and"
- );
- STANDARD_INTERFACE.APPEND_PROCESS_HELP(
- PROC => REQSR,
- HELP => "generates a report merging results of previous runs"
- );
-
- STANDARD_INTERFACE.PARSE_LINE(REQSR);
-
- -- Assign arguments:
-
- SOURCE_ARG := FILE_LIST.GET_ARGUMENT(PROC => REQSR, NAME => "source_files");
- PAIRS_ARG := FILE_LIST.GET_ARGUMENT(PROC => REQSR, NAME => "pairs_files");
- REPORT_KIND := REPORT.GET_ARGUMENT(PROC => REQSR, NAME => "report");
- OUTPUT_FILE := STRINGTYPE.GET_ARGUMENT(PROC => REQSR, NAME => "output");
-
-
- SP.RELEASE;
-
- -- Open the report file.
- if REPORT_KIND /= NOREPORT then
- STANDARD_INTERFACE.DEFINE_OUTPUT(
- PROC => REQSR,
- HEADER_SIZE => 2,
- FILE_NAME => SP.VALUE(OUTPUT_FILE)
- );
- STANDARD_INTERFACE.DEFINE_HEADER(LINE => 1, TEXT => "Reqsref Report");
- STANDARD_INTERFACE.DEFINE_HEADER(
- LINE => 2, TEXT => MERGE_PKG.GET_REPORT_HEADER(REPORT_KIND));
- end if;
-
- -- Expand lists of source and pairs files:
- if not SL.ISEMPTY(SOURCE_ARG) then
- EXPAND_FILE_NAMES(SOURCE_ARG, SOURCE_LIST);
- end if;
- if not SL.ISEMPTY(PAIRS_ARG) then
- EXPAND_FILE_NAMES(PAIRS_ARG, PAIRS_LIST);
- end if;
-
- -- For each file specified in source_list call do_source_file.
- -- Then, unless an exception was raised, attach the corresponding
- -- pairs file name to pairs_list.
- -- In case an exception was raised delete the corresponding
- -- pairs file name from pairs_list if it is there.
-
- if not STRING_LISTS.ISEMPTY(SOURCE_LIST) then
- ITER := STRING_LISTS.MAKELISTITER(SOURCE_LIST);
- while STRING_LISTS.MORE(ITER) loop
- STRING_LISTS.NEXT(ITER, SOURCE_FILE);
- DO_SOURCE_FILE(SOURCE_FILE);
- if REQS.PAIRS_FILE_PRINT_FLAG then
- if not STRING_LISTS.ISINLIST(PAIRS_LIST, PAIRS_FILE) then
- STRING_LISTS.ATTACH(PAIRS_FILE, PAIRS_LIST);
- end if;
- else
- if SL.ISINLIST(PAIRS_LIST, PAIRS_FILE) then
- SL.DELETEITEM(PAIRS_LIST, PAIRS_FILE);
- end if;
- end if;
- end loop;
- end if;
-
- -- The merging phase
-
- if not STRING_LISTS.ISEMPTY(PAIRS_LIST) then
- if REPORT_KIND = MERGE_PKG.LOCATION then
- MERGE_PKG.LOCATION_REPORT(PAIRS_LIST);
- elsif REPORT_KIND = REQUIREMENT then
- MERGE_PKG.REQUIREMENT_MERGE(PAIRS_LIST);
- else
- TEXT_IO.PUT_LINE(TEXT_IO.STANDARD_OUTPUT,
- "REQSREF: not generating a report");
- end if;
- end if;
-
- return HOST_LIB.RETURN_CODE(HOST_LIB.SUCCESS);
-
- exception
-
- when PO.FILE_ALREADY_OPEN =>
- PUT_ERROR("File " & SP.VALUE(OUTPUT_FILE) & " already open.");
- return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
-
- when PO.FILE_ERROR =>
- PUT_ERROR("Unable to open " & SP.VALUE(OUTPUT_FILE) & " for output.");
- return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
-
- when STANDARD_INTERFACE.PROCESS_HELP =>
- return HOST_LIB.RETURN_CODE(HOST_LIB.INFORMATION);
-
- when STANDARD_INTERFACE.ABORT_PROCESS =>
- return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
-
- when MERGE_PKG.ABORT_MERGE_PHASE =>
- return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
-
- -- when others =>
- -- PUT_ERROR("Internal error.");
- -- return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
-
- end REQSREF;
-