home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / manage / rt.src < prev    next >
Encoding:
Text File  |  1988-05-03  |  384.0 KB  |  9,251 lines

  1. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. --rqsgrmcon.spc
  3. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  4. package RQS_Grammar_Constants is
  5.  
  6.     type ParserInteger is range 0..400000;
  7.         --| range of possible values for parser's integer types (found
  8.         --| in NYU parse tables generator output)
  9.         
  10.     function setGrammarSymbolCount return ParserInteger;
  11.     
  12.     function setActionCount return ParserInteger;
  13.     
  14.     function setStateCountPlusOne return ParserInteger;
  15.     
  16.     function setLeftHandSideCount return ParserInteger;
  17.     
  18.     function setRightHandSideCount return ParserInteger;
  19.     
  20. end RQS_Grammar_Constants;
  21. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  22. --rqsptbls.spc
  23. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  24. with Host_Dependencies;      -- host dependent constants for the compiler.
  25. with RQS_Grammar_Constants;      -- constants generated by parser generator
  26. use RQS_Grammar_Constants;
  27.  
  28. package RQS_ParseTables is          --| Table output of parse tables generator
  29.  
  30. --| Overview
  31. --|
  32. --| This package contains the constants and tables generated by running
  33. --| the LALR(1) parse tables generator on the Ada Grammar.
  34. --| It also contains subprograms to access values in the more complex
  35. --| tables, that could have their structures tuned later.
  36. --|
  37.  
  38. --| Tuning
  39. --|
  40. --| --------------------------------------------------------------
  41. --|
  42. --| The Parser Generator has two options that effect the speed of
  43. --| compilation:
  44. --|
  45. --| NODEFAULT : Eliminates the default reductions.
  46. --| This also would improve error recovery.
  47. --| Note that the table DefaultMap is still produced, though it
  48. --| will never be referenced.
  49. --| Thus, there need be no change to the code
  50. --| in ParserUtilities.GetAction .
  51. --|
  52. --| LF : This changes the load factor used to pack and size the
  53. --| ActionTables. It can range between 0 and 100.
  54. --| A low LF means fewer collisions and faster parsing.
  55. --| A high LF means more collisions and slower parsing.
  56. --| ----------------------------------------------------------------
  57. --|
  58. --| The types GrammarSymbolRecord and FollowSymbolRecord
  59. --| have a lot of unused space. The space/time tradeoff of
  60. --| converting these into discriminated records or another
  61. --| alternative representation, could be investigated.
  62. --| This investigation should take the elaboration time
  63. --| of the initializing aggregates into account.
  64. --|
  65. --| ----------------------------------------------------------------
  66. --|
  67. --| The Action Tables might be made made smaller by a restructuring of
  68. --| the grammar.
  69. --| For example: Have a rule for the token sequence:
  70. --|
  71. --| BEGIN seq_Of_Statements [EXCP..]
  72. --|
  73. --| ----------------------------------------------------------------
  74. --|
  75. --| The ParserGenerator might be modified along with
  76. --| ParseTables.GetAction to produce smaller tables.
  77. --| See:
  78. --|
  79. --| "Combined Actions to Reduce LR-Parsertables"
  80. --| by K.Groneing. SIGPLAN Notices, Volume 19, Number 3, March 1984.
  81. --|
  82. --| ----------------------------------------------------------------
  83. --|
  84.  
  85. --| Notes
  86. --|
  87. --| Abbreviations Used
  88. --|
  89. --| Rep : Representation
  90. --|
  91.  
  92. --| RUN-TIME INPUT OF NYU LALR GENERATED TABLES AND CONSTANTS
  93. --|
  94. --|
  95. --| followed by the current correct value of the
  96. --| constant supplied by the NYU LALR Parser Generator:
  97. --|
  98. --| GrammarSymbolCount
  99. --| LeftHandSideCount
  100. --| RightHandSideCount
  101. --| ActionTableOneLength
  102. --| ActionTableTwoLength
  103. --| DefaultMapLength
  104. --| InSymbolMapLength
  105. --| FollowMapLength
  106. --| StateCountPlusOne
  107. --| GrammarSymbolCountPlusOne
  108. --| ActionCount
  109. --| ActionTableSize
  110. --|
  111. --| in each of the eight declarations:
  112. --|
  113. --| GrammarSymbolTable
  114. --| LeftHandSide
  115. --| RightHandSide
  116. --| ActionTableOne
  117. --| ActionTableTwo
  118. --| DefaultMap
  119. --| InSymbolMap
  120. --| FollowSymbolMap
  121. --|
  122.  
  123.     package GC renames RQS_Grammar_Constants;
  124.  
  125.     ------------------------------------------------------------------
  126.     -- Common Declarations for Action_Token_Map
  127.     ------------------------------------------------------------------
  128.  
  129.     Max_Action_Token_Count : constant := 48;
  130.         --| This constant may need to be made larger if the grammar
  131.         --| ever gets too large.
  132.         --| It could be automatically generated.
  133.  
  134.  
  135.     ------------------------------------------------------------------
  136.     -- Common Declarations for Shift_State_Map
  137.     ------------------------------------------------------------------
  138.  
  139.     Max_Shift_State_Count : constant := 90;
  140.         --| This constant may need to be made larger if the grammar
  141.         --| ever gets too large.
  142.         --| It could be automatically generated.
  143.         
  144.     
  145.     
  146.     subtype ParserStringRangePlusZeroCommon is natural
  147.             range 0..Host_Dependencies.MaxColumn;
  148.         --| Parser's string should never be greater than a source line
  149.         --| worth of text.
  150.     
  151.     subtype GrammarSymbolRepRangePlusZeroCommon is
  152.             ParserStringRangePlusZeroCommon range 0..57;
  153.  
  154.     subtype FollowSymbolRangeCommon is GC.ParserInteger range 1..50;
  155.  
  156.     ------------------------------------------------------------------
  157.     -- Declarations Global to Package ParseTables
  158.     ------------------------------------------------------------------
  159.  
  160.     subtype PositiveParserInteger is GC.ParserInteger range
  161.         1..GC.ParserInteger'last ;
  162.  
  163.     subtype ParserStringRangePlusZero is
  164.         ParserStringRangePlusZeroCommon;
  165.         --| Parser's string should never be greater than a source line
  166.         --| worth of text.
  167.  
  168. ----------------------------------------------------------------------
  169. -- The first constant used to define the Parse Tables
  170. ----------------------------------------------------------------------
  171.  
  172. GrammarSymbolCount : constant GC.ParserInteger :=
  173.     GC.setGrammarSymbolCount ;
  174.     --| Number of terminals and nonterminals in the Ada grammar
  175.     --| rules input to the parse tables generator
  176.  
  177.     subtype GrammarSymbolRange is
  178.         GC.ParserInteger range 1..GrammarSymbolCount;
  179.         --| valid range of values for grammar symbols
  180.  
  181.     ------------------------------------------------------------------
  182.     -- Parser Table Generated Token Values for Terminals
  183.     ------------------------------------------------------------------
  184.  
  185.     -- WARNING: need to be checked after each Parser Generator Run.
  186.     -- This could be made part of the ParseTables/ErrorParseTables
  187.     -- generator program(s) at some point.
  188.  
  189.     ------------------------------------------------------------------
  190.     -- Special Empty Terminal
  191.     ------------------------------------------------------------------
  192.  
  193.     Empty_TokenValue    : constant GrammarSymbolRange :=  1;
  194.  
  195.     ------------------------------------------------------------------
  196.     -- Reserved Words
  197.     ------------------------------------------------------------------
  198.  
  199.     AbortTokenValue     : constant GrammarSymbolRange :=  2;
  200.     AbsTokenValue       : constant GrammarSymbolRange :=  3;
  201.     AcceptTokenValue    : constant GrammarSymbolRange :=  4;
  202.     AccessTokenValue    : constant GrammarSymbolRange :=  5;
  203.     AllTokenValue       : constant GrammarSymbolRange :=  6;
  204.     AndTokenValue       : constant GrammarSymbolRange :=  7;
  205.     ArrayTokenValue     : constant GrammarSymbolRange :=  8;
  206.     AtTokenValue        : constant GrammarSymbolRange :=  9;
  207.     BeginTokenValue     : constant GrammarSymbolRange := 10;
  208.     BodyTokenValue      : constant GrammarSymbolRange := 11;
  209.     CaseTokenValue      : constant GrammarSymbolRange := 12;
  210.     ConstantTokenValue  : constant GrammarSymbolRange := 13;
  211.     DeclareTokenValue   : constant GrammarSymbolRange := 14;
  212.     DelayTokenValue     : constant GrammarSymbolRange := 15;
  213.     DeltaTokenValue     : constant GrammarSymbolRange := 16;
  214.     DigitsTokenValue    : constant GrammarSymbolRange := 17;
  215.     DoTokenValue        : constant GrammarSymbolRange := 18;
  216.     ElseTokenValue      : constant GrammarSymbolRange := 19;
  217.     ElsifTokenValue     : constant GrammarSymbolRange := 20;
  218.     EndTokenValue       : constant GrammarSymbolRange := 21;
  219.     EntryTokenValue     : constant GrammarSymbolRange := 22;
  220.     ExceptionTokenValue : constant GrammarSymbolRange := 23;
  221.     ExitTokenValue      : constant GrammarSymbolRange := 24;
  222.     ForTokenValue       : constant GrammarSymbolRange := 25;
  223.     FunctionTokenValue  : constant GrammarSymbolRange := 26;
  224.     GenericTokenValue   : constant GrammarSymbolRange := 27;
  225.     GotoTokenValue      : constant GrammarSymbolRange := 28;
  226.     IfTokenValue        : constant GrammarSymbolRange := 29;
  227.     InTokenValue        : constant GrammarSymbolRange := 30;
  228.     IsTokenValue        : constant GrammarSymbolRange := 31;
  229.     LimitedTokenValue   : constant GrammarSymbolRange := 32;
  230.     LoopTokenValue      : constant GrammarSymbolRange := 33;
  231.     ModTokenValue       : constant GrammarSymbolRange := 34;
  232.     NewTokenValue       : constant GrammarSymbolRange := 35;
  233.     NotTokenValue       : constant GrammarSymbolRange := 36;
  234.     NullTokenValue      : constant GrammarSymbolRange := 37;
  235.     OfTokenValue        : constant GrammarSymbolRange := 38;
  236.     OrTokenValue        : constant GrammarSymbolRange := 39;
  237.     OthersTokenValue    : constant GrammarSymbolRange := 40;
  238.     OutTokenValue       : constant GrammarSymbolRange := 41;
  239.     PackageTokenValue   : constant GrammarSymbolRange := 42;
  240.     PragmaTokenValue    : constant GrammarSymbolRange := 43;
  241.     PrivateTokenValue   : constant GrammarSymbolRange := 44;
  242.     ProcedureTokenValue : constant GrammarSymbolRange := 45;
  243.     RaiseTokenValue     : constant GrammarSymbolRange := 46;
  244.     RangeTokenValue     : constant GrammarSymbolRange := 47;
  245.     RecordTokenValue    : constant GrammarSymbolRange := 48;
  246.     RemTokenValue       : constant GrammarSymbolRange := 49;
  247.     RenamesTokenValue   : constant GrammarSymbolRange := 50;
  248.     ReturnTokenValue    : constant GrammarSymbolRange := 51;
  249.     ReverseTokenValue   : constant GrammarSymbolRange := 52;
  250.     SelectTokenValue    : constant GrammarSymbolRange := 53;
  251.     SeparateTokenValue  : constant GrammarSymbolRange := 54;
  252.     SubtypeTokenValue   : constant GrammarSymbolRange := 55;
  253.     TaskTokenValue      : constant GrammarSymbolRange := 56;
  254.     TerminateTokenValue : constant GrammarSymbolRange := 57;
  255.     ThenTokenValue      : constant GrammarSymbolRange := 58;
  256.     TypeTokenValue      : constant GrammarSymbolRange := 59;
  257.     UseTokenValue       : constant GrammarSymbolRange := 60;
  258.     WhenTokenValue      : constant GrammarSymbolRange := 61;
  259.     WhileTokenValue     : constant GrammarSymbolRange := 62;
  260.     WithTokenValue      : constant GrammarSymbolRange := 63;
  261.     XorTokenValue       : constant GrammarSymbolRange := 64;
  262.     
  263.     ------------------------------------------------------------------
  264.     -- Identifier and Literals
  265.     ------------------------------------------------------------------
  266.  
  267.     IdentifierTokenValue : constant GrammarSymbolRange := 65;
  268.     NumericTokenValue    : constant GrammarSymbolRange := 66;
  269.     StringTokenValue     : constant GrammarSymbolRange := 67;
  270.     CharacterTokenValue  : constant GrammarSymbolRange := 68;
  271.  
  272.     ------------------------------------------------------------------
  273.     -- Single Delimiters
  274.     ------------------------------------------------------------------
  275.  
  276.     Ampersand_TokenValue  : constant GrammarSymbolRange := 69;
  277.     Apostrophe_TokenValue : constant GrammarSymbolRange := 70;
  278.     LeftParen_TokenValue  : constant GrammarSymbolRange := 71;
  279.     RightParen_TokenValue : constant GrammarSymbolRange := 72;
  280.     Star_TokenValue       : constant GrammarSymbolRange := 73;
  281.     Plus_TokenValue       : constant GrammarSymbolRange := 74;
  282.     Comma_TokenValue      : constant GrammarSymbolRange := 75;
  283.     Minus_TokenValue      : constant GrammarSymbolRange := 76;
  284.     Dot_TokenValue        : constant GrammarSymbolRange := 77;
  285.     Slash_TokenValue      : constant GrammarSymbolRange := 78;
  286.     Colon_TokenValue      : constant GrammarSymbolRange := 79;
  287.     SemiColon_TokenValue  : constant GrammarSymbolRange := 80;
  288.     LT_TokenValue         : constant GrammarSymbolRange := 81;
  289.     EQ_TokenValue         : constant GrammarSymbolRange := 82;
  290.     GT_TokenValue         : constant GrammarSymbolRange := 83;
  291.     Bar_TokenValue        : constant GrammarSymbolRange := 84;
  292.     
  293.  
  294.     ------------------------------------------------------------------
  295.     -- Double Delimiters
  296.     ------------------------------------------------------------------
  297.  
  298.     EQGT_TokenValue     : constant GrammarSymbolRange := 85;
  299.     DotDot_TokenValue   : constant GrammarSymbolRange := 86;
  300.     StarStar_TokenValue : constant GrammarSymbolRange := 87;
  301.     ColonEQ_TokenValue  : constant GrammarSymbolRange := 88;
  302.     SlashEQ_TokenValue  : constant GrammarSymbolRange := 89;
  303.     GTEQ_TokenValue     : constant GrammarSymbolRange := 90;
  304.     LTEQ_TokenValue     : constant GrammarSymbolRange := 91;
  305.     LTLT_TokenValue     : constant GrammarSymbolRange := 92;
  306.     GTGT_TokenValue     : constant GrammarSymbolRange := 93;
  307.     LTGT_TokenValue     : constant GrammarSymbolRange := 94;
  308.     
  309.     ------------------------------------------------------------------
  310.     -- Comment Terminal
  311.     ------------------------------------------------------------------
  312.  
  313.     Comment_TokenValue  : constant GrammarSymbolRange := 95;
  314.  
  315.     ------------------------------------------------------------------
  316.     -- Special Terminals
  317.     ------------------------------------------------------------------
  318.  
  319.     EOF_TokenValue      : constant GrammarSymbolRange := 96;
  320.  
  321.     ------------------------------------------------------------------
  322.     -- Special Non-Terminals
  323.     ------------------------------------------------------------------
  324.  
  325.     ACC_TokenValue      : constant GrammarSymbolRange := 97;
  326.  
  327.     ------------------------------------------------------------------
  328.     -- Grammar Symbol Classes
  329.     ------------------------------------------------------------------
  330.  
  331.     subtype TokenRange is GrammarSymbolRange range 1..EOF_TokenValue;
  332.  
  333.     subtype TokenRangeLessEOF is
  334.         GrammarSymbolRange range 1..(EOF_TokenValue - 1);
  335.  
  336.     subtype NonTokenRange is
  337.         GrammarSymbolRange range (EOF_TokenValue + 1)..GrammarSymbolCount;
  338.     
  339.     ActionCount : constant GC.ParserInteger :=
  340.         GC.setActionCount ;
  341.         --| Number of actions in the parse tables.
  342.     -- NYU Reference Name: NUM_ACTIONS
  343.         
  344.     StateCountPlusOne : constant GC.ParserInteger :=
  345.         GC.setStateCountPlusOne ;
  346.         --| Number of states plus one in the parse tables.
  347.     -- NYU Reference Name: NUM_STATES
  348.     
  349.     subtype StateRange is
  350.         GC.ParserInteger range 1..(StateCountPlusOne - 1);
  351.  
  352.     subtype ActionRange is GC.ParserInteger range 0..ActionCount;
  353.     
  354.     LeftHandSideCount :
  355.         constant GC.ParserInteger := GC.setLeftHandSideCount;
  356.         --| Number of left hand sides in the Ada grammar rules.
  357.  
  358.     subtype LeftHandSideRange is
  359.         GC.ParserInteger range 1..LeftHandSideCount;
  360.  
  361.     function Get_LeftHandSide(
  362.         GrammarRule : LeftHandSideRange) return GrammarSymbolRange;
  363.     pragma inline (Get_LeftHandSide) ;
  364.  
  365.     RightHandSideCount : constant GC.ParserInteger :=
  366.         GC.setRightHandSideCount ;
  367.     --| Number of right hand sides in the Ada grammar rules.
  368.  
  369.     subtype RightHandSideRange is
  370.         GC.ParserInteger range 1..RightHandSideCount;
  371.  
  372.     function Get_RightHandSide(
  373.         GrammarRule : RightHandSideRange) return GC.ParserInteger;
  374.     pragma inline (Get_RightHandSide) ;
  375.   
  376.     ------------------------------------------------------------------
  377.     -- Subprogram Bodies Global to Package ParseTables
  378.     ------------------------------------------------------------------
  379.  
  380.     function GetAction(
  381.         InStateValue  : in StateRange;
  382.         InSymbolValue : in GrammarSymbolRange
  383.         )  return ActionRange;
  384.     
  385.     function Get_Grammar_Symbol(    --| return the string representation
  386.                     --| of the grammar symbol
  387.     In_Index : in GrammarSymbolRange) return string;
  388.     
  389.     --| Effects
  390.     --|
  391.     --| This subprogram returns the string representation of the
  392.     --| GrammarSymbolRange passed in.
  393.     --|
  394.     
  395.     ------------------------------------------------------------------
  396.     subtype FollowMapRange is NonTokenRange;
  397.     
  398.     type FollowSymbolArray is array(PositiveParserInteger range <>)
  399.                     of GrammarSymbolRange;
  400.     
  401.     type FollowSymbolRecord is
  402.     record
  403.         follow_symbol_count : TokenRange;
  404.         follow_symbol       : FollowSymbolArray (TokenRange);
  405.     end record;
  406.     ------------------------------------------------------------------
  407.     
  408.     function Get_Follow_Map(        --| return the array of follow symbols
  409.                     --| of the grammar symbol passed in
  410.     In_Index : in FollowMapRange) return FollowSymbolRecord;
  411.     
  412.  
  413.     --| Effects
  414.     --|
  415.     --| This subprogram returns the array of follow symbols for the
  416.     --| grammar symbol passed in.
  417.     --|
  418.     
  419.     ------------------------------------------------------------------
  420.     -- The following declarations are for Error Recovery.
  421.     ------------------------------------------------------------------
  422.     ------------------------------------------------------------------
  423.     -- Action_Token_Map
  424.     ------------------------------------------------------------------
  425.     
  426.     subtype Action_Token_Range is
  427.         GC.ParserInteger range 1..Max_Action_Token_Count;
  428.     
  429.     subtype Action_Token_Range_Plus_Zero is
  430.         GC.ParserInteger range 0..Max_Action_Token_Count;
  431.     --| for the set_size (which could be null!)
  432.     
  433.     type Action_Token_Array is array (PositiveParserInteger range <>)
  434.     of TokenRangeLessEOF;
  435.     
  436.     type Action_Token_Record is
  437.     record
  438.         set_size : Action_Token_Range_Plus_Zero;
  439.         set      : Action_Token_Array (Action_Token_Range);
  440.     end record;
  441.     
  442.     ------------------------------------------------------------------
  443.     -- Shift_State_Map
  444.     ------------------------------------------------------------------
  445.     
  446.     subtype Shift_State_Range is
  447.         GC.ParserInteger range 1..Max_Shift_State_Count;
  448.     
  449.     subtype Shift_State_Range_Plus_Zero is
  450.         GC.ParserInteger range 0..Max_Shift_State_Count;
  451.     --| for the set_size (which could be null!)
  452.     
  453.     type Shift_State_Array is array (PositiveParserInteger range <>)
  454.     of StateRange;
  455.     
  456.     type Shift_State_Record is
  457.     record
  458.         set_size : Shift_State_Range_Plus_Zero;
  459.         set      : Shift_State_Array (Shift_State_Range);
  460.     end record;
  461.     
  462.     ------------------------------------------------------------------
  463.  
  464.     function Get_Action_Token_Map(  --| return the array of action tokens
  465.                     --| for the state passed in.
  466.     In_Index : in StateRange
  467.                     --| the state to return action tokens
  468.                     --| for.
  469.     ) return Action_Token_Record;
  470.  
  471.     ------------------------------------------------------------------
  472.     
  473.     function Get_Shift_State_Map(   --| return the array of shift states
  474.                     --| for the grammar symbol passed in.
  475.     In_Index : in GrammarSymbolRange
  476.                     --| grammar symbol to return shifts
  477.                     --| for.
  478.     ) return Shift_State_Record;
  479.     
  480.     -- The following variables contain statistics information
  481.     -- collected during the parse:
  482.     ParserDecisionCount : Natural := 0 ; --| Total number of times that
  483.                                          --| GetAction was called.
  484.     MaxCollisions       : Natural := 0 ; --| Of all the calls to GetAction
  485.       --| The one which resulted in the greatest number of collisions
  486.     TotalCollisions     : Natural := 0 ;
  487.       --| Total number of collisions which occurred during parsing.
  488.  
  489. end RQS_ParseTables;
  490. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  491. --rqslexidv.spc
  492. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  493. with RQS_ParseTables;               -- tables from parser generator
  494.  
  495. package RQS_Lex_Identifier_Token_Value is
  496.     --| Classify identifiers and reserved words and determine which
  497.     --| identifiers are in package STANDARD.
  498.  
  499.     ------------------------------------------------------------------
  500.     -- Subprogram Bodies Global to
  501.     -- Package Lex_Identifier_Token_Value
  502.     ------------------------------------------------------------------
  503.  
  504.     procedure Find(
  505.     --| returns token value and whether identifier is in package STANDARD.
  506.  
  507.     In_Identifier   : in string;   --| text of identifier to identify
  508.  
  509.     Out_Token_Value : out RQS_ParseTables.TokenRange);
  510.     --| TokenValue of this identifier
  511.  
  512.     --| Effects
  513.     --|
  514.     --| This subprogram determines if the identifier is
  515.     --| a reserved word or a plain identifier.
  516.     --|
  517.     --| The answer is indicated by returning the appropriate TokenValue.
  518.     --|
  519.  
  520.     ------------------------------------------------------------------
  521.  
  522. end RQS_Lex_Identifier_Token_Value;
  523.  
  524. ----------------------------------------------------------------------
  525. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  526. --rqspdecls.spc
  527. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  528.  
  529. -----------------------------------------------------------------------
  530.  
  531. with Host_Dependencies;    -- host dependent constants
  532. with RQS_ParseTables;          -- constants and state tables
  533. use RQS_ParseTables;
  534.  
  535. with RQS_Grammar_Constants;
  536. use RQS_Grammar_Constants;
  537.  
  538. package RQS_ParserDeclarations is   --| Objects used by the Parser
  539.  
  540. --| Notes
  541.  
  542. --| Abbreviations used in this compilation unit:
  543. --|
  544. --| gram : grammar
  545. --| sym  : symbol
  546. --| val  : value
  547. --|
  548.  
  549.     package HD renames Host_Dependencies;
  550.     package PT renames RQS_ParseTables;
  551.     package GC renames RQS_Grammar_Constants;
  552.  
  553.                     -- Exceptions --
  554.  
  555.     MemoryOverflow : exception;  --| raised if Parser runs out of
  556.                              --| newable memory.
  557.     Parser_Error   : exception;  --| raised if an error occurs during
  558.                              --| parsing.
  559.  
  560.     --| The double delimiters were named with a combination of the name of
  561.     --| each component symbol.
  562.  
  563.     Arrow_TokenValue          : GrammarSymbolRange
  564.     renames EQGT_TokenValue;
  565.     Exponentiation_TokenValue : GrammarSymbolRange
  566.     renames StarStar_TokenValue;
  567.     Assignment_TokenValue     : GrammarSymbolRange
  568.     renames ColonEQ_TokenValue;
  569.     NotEquals_TokenValue      : GrammarSymbolRange
  570.     renames SlashEQ_TokenValue;
  571.     StartLabel_TokenValue     : GrammarSymbolRange
  572.     renames LTLT_TokenValue;
  573.     EndLabel_TokenValue       : GrammarSymbolRange
  574.     renames GTGT_TokenValue;
  575.     Box_TokenValue            : GrammarSymbolRange
  576.     renames LTGT_TokenValue;
  577.  
  578.     ------------------------------------------------------------------
  579.     -- Grammar Symbol Classes
  580.     ------------------------------------------------------------------
  581.  
  582.     subtype ReservedWordRange is GrammarSymbolRange
  583.     range AbortTokenValue .. XorTokenValue;
  584.  
  585.     subtype SingleDelimiterRange is GrammarSymbolRange
  586.     range Ampersand_TokenValue .. Bar_TokenValue;
  587.  
  588.     subtype DoubleDelimiterRange is GrammarSymbolRange
  589.     range Arrow_TokenValue .. Box_TokenValue;
  590.  
  591.     ------------------------------------------------------------------
  592.     -- ParseTables.GetAction return values
  593.     ------------------------------------------------------------------
  594.  
  595.     subtype Error_Action_Range is    --| ActionRange that indicates
  596.     ActionRange range 0..0;      --| the error range
  597.  
  598.     subtype Shift_Action_Range is    --| ActionRange that indicates
  599.                                  --| a shift action.
  600.     ActionRange range 1..(StateCountPlusOne - 1);
  601.  
  602.     subtype Accept_Action_Range is   --| ActionRange that indicates
  603.                                  --| the accept action.
  604.     ActionRange range StateCountPlusOne..StateCountPlusOne;
  605.  
  606.     subtype Reduce_Action_Range is   --| ActionRange that indicates
  607.                                  --| a reduce action.
  608.     ActionRange range (StateCountPlusOne + 1)..ActionCount;
  609.  
  610.     ------------------------------------------------------------------
  611.     -- Queue and Stack Management
  612.     ------------------------------------------------------------------
  613.  
  614.     subtype StateParseStacksIndex is --| range of index values for
  615.     GC.ParserInteger range 0..200;  --| StateStack and ParseStack
  616.  
  617.     subtype StateParseStacksRange is --| array index values for
  618.                                  --| StateStack and ParseStack
  619.     StateParseStacksIndex range 1..StateParseStacksIndex'Last;
  620.  
  621.     Look_Ahead_Limit : positive := 5;--| Look ahead limit for parser
  622.  
  623.     ------------------------------------------------------------------
  624.     -- StateStack Element
  625.     ------------------------------------------------------------------
  626.  
  627.     subtype StateStackElement is StateRange;
  628.  
  629.     type Source_Text is access String;
  630.  
  631.     Null_Source_Text : constant Source_Text
  632.     := null;
  633.  
  634.     ------------------------------------------------------------------
  635.     -- ParseStack and Grammar Symbol Elements
  636.     ------------------------------------------------------------------
  637.  
  638.     type Token is
  639.     record
  640.         text            : Source_Text;
  641.         srcpos_line     : HD.Source_Line;
  642.         srcpos_column   : HD.Source_Column;
  643.     end record;
  644.  
  645.     type ParseStackElement is
  646.     record
  647.         gram_sym_val  : GrammarSymbolRange;
  648.         --| used by parser to identify kind of grammar symbol
  649.         lexed_token : Token;
  650.         --| lexed tokens not yet reduced (eliminated)
  651.         --| by ReduceActions.
  652.     end record;
  653.  
  654.     ------------------------------------------------------------------
  655.  
  656.     CurToken : ParseStackElement;
  657.     --| return from Lex.GetNextSourceToken
  658.     --| Token used in subprogram Parse to determine
  659.     --| next action from.
  660.     --| Also used in ReduceActionsUtilities to determine last
  661.     --| compilation unit in a compilation.
  662.  
  663.     ------------------------------------------------------------------
  664.     -- Subprogram Bodies Global to Package ParserDeclarations
  665.     ------------------------------------------------------------------
  666.  
  667.     function Get_Source_Text(       --| get a string from a Source_Text
  668.                     --| object
  669.     In_Source_Text :            --| the object to get the string from
  670.         in Source_Text
  671.     ) return string;
  672.  
  673.     --| Effects
  674.  
  675.     --| This subprogram gets a string from a Source_Text object.
  676.     --| It exists to concentrate the interface to Source_Text objects.
  677.  
  678.     ------------------------------------------------------------------
  679.  
  680.     procedure Put_Source_Text(     --| put a string into a Source_Text
  681.                    --| object
  682.     In_String : in string;     --| the string to store
  683.     In_Out_Source_Text :       --| the object to store the string in
  684.         in out Source_Text);
  685.  
  686.  
  687.     --| Effects
  688.  
  689.     --| This subprogram stores a string in a Source_Text object.
  690.     --| It exists to concentrate the interface to Source_Text objects.
  691.  
  692.     ------------------------------------------------------------------
  693.  
  694.     function Dump_Parse_Stack_Element(  --| return the data in a
  695.                                     --| ParseStackElement or
  696.                                     --| TokenQueueElement as a string
  697.     In_PSE : in ParseStackElement   --| the Element to display.
  698.     ) return string;
  699.  
  700.     --| Effects
  701.  
  702.     --| This subprogram returns the data in a ParseStackElement or its
  703.     --| sub-type a TokenQueueElement as a string.
  704.  
  705.     --| Notes
  706.  
  707.     --| Abbreviations used in this compilation unit
  708.     --|
  709.     --| PSE : ParseStackElement
  710.     --|
  711.     --| Only the lexed_token variant is currently fully displayed.
  712.     --| The other variants would have to make use of an IDL
  713.     --| writer.
  714.  
  715.     ------------------------------------------------------------------
  716.  
  717.     procedure flush_source_text (s : in out source_text);
  718.  
  719.     --| Effects: Deallocates the string associated with the source
  720.     --| text given.
  721.  
  722.     ------------------------------------------------------------------
  723.  
  724. end RQS_ParserDeclarations;
  725.  
  726. ----------------------------------------------------------------------
  727. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  728. --rqslex.spc
  729. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  730.  
  731. ----------------------------------------------------------------------
  732.  
  733. with RQS_ParserDeclarations;        -- declarations for the Parser
  734. with Host_Dependencies;         -- Host dependents constants
  735.  
  736. package RQS_Lex is                  --| perform lexical analysis
  737.  
  738. --| Overview
  739. --|
  740. --| This package is used to identify tokens in the source file and
  741. --| return them to subprogram Parser.
  742. --|
  743. --| The useful reference is Chapter 2 of the Ada (Trade Mark) LRM.
  744.  
  745. --| Effects
  746. --|
  747. --| The subprograms in package Lex are used to sequentially read
  748. --| a source file and identify lexical units (tokens) in the file.
  749. --| Comments and error messages are saved for use by the lister.
  750.  
  751.     package HD renames Host_Dependencies;
  752.     package PD renames RQS_ParserDeclarations;
  753.     -- other package renames are in the package body
  754.  
  755.     ------------------------------------------------------------------
  756.     -- Subprogram Declarations Global to Package Lex
  757.     ------------------------------------------------------------------
  758.  
  759.     procedure Initialization;     --| Initializes the lexer
  760.  
  761.     --| Effects
  762.     --|
  763.     --| This subprogram initializes the lexer.
  764.  
  765.     ------------------------------------------------------------------
  766.  
  767.    function GetNextNonCommentToken  --| returns next non-comment token
  768.                                 --| in source file.
  769.        return PD.ParseStackElement;
  770.  
  771.     --| Effects
  772.     --|
  773.     --| This subprogram scans the source file for the next token not
  774.     --| including comment tokens.
  775.  
  776.     --| Requires
  777.     --|
  778.     --| This subprogram requires an opened source file,
  779.     --| and the state information internal to the package body.
  780.  
  781.     ------------------------------------------------------------------
  782.  
  783.     function GetNextSourceToken  --| returns next token in source file.
  784.     return PD.ParseStackElement;
  785.  
  786.     --| Effects
  787.     --|
  788.     --| This subprogram scans the source file for the next token.
  789.     --| The tokens returned include any comment literal tokens.
  790.  
  791.     --| Requires
  792.     --|
  793.     --| This subprogram requires an opened source file,
  794.     --| and the state information internal to the package body.
  795.  
  796.     ------------------------------------------------------------------
  797.  
  798.     function Show_Current_Line
  799.     return HD.Source_Line;
  800.  
  801.     --| Effects
  802.     --|
  803.     --| Returns the current line number being processed
  804.  
  805.     ------------------------------------------------------------------
  806.  
  807.     procedure Write_Line;
  808.  
  809.     --| Effects
  810.     --|
  811.     --| Write a line to an appropriate file 
  812.  
  813.     ------------------------------------------------------------------
  814.  
  815. end RQS_Lex;
  816.  
  817. ----------------------------------------------------------------------
  818. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  819. --rqslex.bdy
  820. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  821.  
  822. ----------------------------------------------------------------------
  823.  
  824. with Host_Dependencies;         -- Host dependents constants
  825. with RQS_Lex_Identifier_Token_Value;
  826.                             -- contains data structures and subprogram
  827.                             --    to distinguish identifiers from
  828.                             --    reserved words
  829. with Lexical_Error_Message;     -- outputs error messages.
  830. with RQS_ParseTables;               -- tables from parser generator
  831. use RQS_ParseTables;
  832. with RQS_Grammar_Constants;         -- constants from the parser generator
  833. use RQS_Grammar_Constants;
  834. with TEXT_IO;
  835.  
  836.  
  837. package body RQS_Lex is
  838.  
  839. --| Overview
  840. --| 
  841. --| Package Lex is implemented as a state machine via case statements.
  842. --| The implementation is optimized to minimize the number of times
  843. --| each character is handled.  Each character is handled twice: once
  844. --| on input and once on lexing based on the character.
  845. --| 
  846. --| The algorithm depends on having an End_Of_Line_Character
  847. --| terminate each source file line.  This concludes the final token
  848. --| on the line for the case statement scanners.
  849.  
  850. --| Notes
  851. --| 
  852. --| Abbreviations Used:
  853. --|
  854. --| Char : Character
  855. --| CST  : Current_Source_Token
  856. --| gram : grammar
  857. --| sym  : symbol
  858. --| val  : value
  859. --| RW   : Reserved Word
  860. --| 
  861.  
  862.     use RQS_ParserDeclarations;
  863.     package LEM  renames Lexical_Error_Message;
  864.     package PT   renames RQS_ParseTables;
  865.     package GC   renames RQS_Grammar_Constants;
  866.     -- other package renames are in the package spec
  867.  
  868.     ------------------------------------------------------------------
  869.     -- Character Types
  870.     ------------------------------------------------------------------
  871.  
  872.     subtype Graphic_Character
  873.     is character range ' ' .. ASCII.TILDE;
  874.  
  875.     subtype Upper_Case_Letter
  876.     is character range 'A'..'Z';
  877.  
  878.     subtype Lower_Case_Letter
  879.     is character range ASCII.LC_A .. ASCII.LC_Z;
  880.  
  881.     subtype Digit
  882.     is character range '0'..'9';
  883.  
  884.     subtype Valid_Base_Range is GC.ParserInteger
  885.     range 2..16;
  886.  
  887.     subtype End_Of_Line_Character
  888.     is character range ASCII.LF .. ASCII.CR;
  889.  
  890.     ------------------------------------------------------------------
  891.     -- Source position management
  892.     ------------------------------------------------------------------
  893.  
  894.     Current_Column :  HD.Source_Column := 1;
  895.     Current_Line   :  HD.Source_Line   := 1;
  896.     --| the position of Next_Char in the source file.
  897.     --| Visible so the Lexical_Error_message package can use them.
  898.  
  899.     ------------------------------------------------------------------
  900.     -- Source Input Buffers and their Management
  901.     ------------------------------------------------------------------
  902.  
  903.     Next_Char : character := ' ';    --| input buffer for next character
  904.                                  --| to scan from source file
  905.  
  906.     End_Of_Line_Buffer :             --| character that signals end of
  907.                                  --| line buffer
  908.     constant character := End_Of_Line_Character'First;
  909.  
  910.     subtype Line_Buffer_Range is
  911.     positive range 1..(( HD.Source_Column'Last) + 2);
  912.     --| The first extra element is needed to hold the End_Of_Line_Buffer
  913.     --| character. The second extra element allows Line_Buffer_Index
  914.     --| to exceed Line_Buffer_Last.
  915.  
  916.     Line_Buffer : string (Line_Buffer_Range) := (-- 1 =>
  917.     End_Of_Line_Buffer, others => ' ');
  918.     --| input buffer containing source file line being lexed.
  919.  
  920.     Line_Buffer_Last : HD.Source_Column := Line_Buffer'First;
  921.     --| length of source file line being lexed.
  922.  
  923.     Line_Buffer_Index : Line_Buffer_Range;
  924.     --| index of character being lexed.
  925.  
  926.     End_Of_File_Reached : boolean := false;
  927.     --| true when end of the input source has been reached
  928.  
  929.     ------------------------------------------------------------------
  930.     -- Token to be Returned and its Management
  931.     ------------------------------------------------------------------
  932.  
  933.     CST : PD.ParseStackElement;    --| token being assembled for return by
  934.                                --| subprogram GetNextSourceToken
  935.  
  936.     subtype CST_Initialization_Type is PD.ParseStackElement;
  937.  
  938.     CST_Initializer : CST_Initialization_Type;
  939.     --| short cut to initializing discriminants properly
  940.  
  941.     End_Of_File_Token : CST_Initialization_Type;
  942.  
  943.     ------------------------------------------------------------------
  944.     -- Other objects
  945.     ------------------------------------------------------------------
  946.  
  947.     Exit_After_Get_Next_Char : boolean := false;
  948.     --| true; call Get_Next_Char before exiting, so that
  949.     --| Next_Char contains the next character to be scanned.
  950.     --| This object is not located in subprogram GetNextSourceToken,
  951.     --| to save the time of re-elaboration on each call.
  952.  
  953.     Previous_Token_Value : PT.TokenRange := PT.StringTokenValue;
  954.     --| used to resolve tick use as a token in T'('a') versus
  955.     --| use as a delimiter in a character literal.
  956.  
  957.     Source_File : TEXT_IO.FILE_TYPE;
  958.  
  959.     ------------------------------------------------------------------
  960.     -- Declarations for Scan_Numeric_Literal and Scan_Comment
  961.     ------------------------------------------------------------------
  962.  
  963.     Temp_Source_Text : PD.Source_Text; --| temporary to hold value of
  964.                                    --| Source_Text
  965.  
  966.     ------------------------------------------------------------------
  967.  
  968.     subtype Work_String_Range_Plus_Zero is
  969.     natural range 0 .. natural(HD.Source_Column'Last);
  970.  
  971.     Work_String        : string (1..Work_String_Range_Plus_Zero'Last);
  972.  
  973.     Work_String_Length : Work_String_Range_Plus_Zero;
  974.     -- Must initialize to 0 before each use.
  975.  
  976.     ------------------------------------------------------------------
  977.     -- Declarations for Procedures:
  978.     --
  979.     -- Scan_Exponent, Scan_Based_Integer, Scan_Integer,
  980.     -- and Scan_Numeric_Literal
  981.     ------------------------------------------------------------------
  982.  
  983.     Seen_Radix_Point : boolean := false;
  984.     --| true  : real
  985.     --| false : integer
  986.  
  987.     ------------------------------------------------------------------
  988.     -- Subprogram Specifications Local to Package Lex
  989.     ------------------------------------------------------------------
  990.  
  991.     procedure Get_Next_Char;          --| Obtains next character
  992.  
  993.     --| Requires
  994.     --|
  995.     --| This subprogram requires an opened source file, and
  996.     --| Current Column > Line_Buffer_Last on its first call to initialize
  997.     --| the input buffers Next_Char and Line_Buffer correctly.
  998.     --|
  999.  
  1000.     --| Effects
  1001.     --|
  1002.     --| This subprogram places the next character from the source file
  1003.     --| in Next_Char and updates the source file position.
  1004.     --| Subprogram Get_Next_Line sets End_Of_File_Reached true, and causes
  1005.     --| Next_Char to be set to the last character in Line_Buffer.
  1006.     --|
  1007.  
  1008.     --| Modifies
  1009.     --|
  1010.     --| Current_Column
  1011.     --| Current_Line
  1012.     --| Next_Char
  1013.     --| Line_Buffer
  1014.     --| Line_Buffer_Last
  1015.     --| Line_Buffer_Index
  1016.     --| End_Of_File_Reached
  1017.     --|
  1018.  
  1019.     ------------------------------------------------------------------
  1020.  
  1021.     procedure Get_Next_Line;      --| gets next source file line to lex
  1022.  
  1023.     --| Requires
  1024.     --|
  1025.     --| This subprogram requires the source file to be open.
  1026.     --|
  1027.  
  1028.     --| Effects
  1029.     --|
  1030.     --| This subprogram gets next source line from input file.
  1031.     --| Sets Current_Column and Line_Buffer_Index to 1, and
  1032.     --| increments Current_Line.
  1033.     --| If the End of File is detected,
  1034.     --| End_Of_File_Reached is set true,
  1035.     --| End_Of_File_Token is set up,
  1036.     --| and Next_Char is set to End_Of_Line_Buffer.
  1037.     --|
  1038.  
  1039.     --| Modifies
  1040.     --|
  1041.     --| Current_Line
  1042.     --| End_Of_File_Reached
  1043.     --| End_Of_File_Token - only when the end of file is reached.
  1044.     --| Line_Buffer
  1045.     --| Line_Buffer_Last
  1046.     --|
  1047.  
  1048.     ------------------------------------------------------------------
  1049.  
  1050.     function Look_Ahead(        --| Return character n columns ahead
  1051.                             --| in current in current line.
  1052.     In_Columns_Ahead :      --| Number of columns ahead to get
  1053.         in HD.Source_Column --| return character from.
  1054.     ) return character;
  1055.  
  1056.     --| Requires
  1057.     --|
  1058.     --| Line_Buffer
  1059.     --| Line_Buffer_Last
  1060.     --|
  1061.  
  1062.     --| Effects
  1063.     --|
  1064.     --| Return character In_Columns_Ahead in Line_Buffer.
  1065.     --| If this character is off the end of Line_Buffer,
  1066.     --| End_Of_Line_Buffer character is returned.
  1067.     --|
  1068.  
  1069.     ------------------------------------------------------------------
  1070.  
  1071.     procedure Set_CST_Gram_Sym_Val(  --| Sets gram_sym_val for current
  1072.                                  --| token.
  1073.     In_Token_Value : in PT.TokenRange); --| value of token
  1074.  
  1075.     --| Effects
  1076.     --|
  1077.     --| This subprogram fills in gram_sym_val for the current token.
  1078.     --|
  1079.  
  1080.     ------------------------------------------------------------------
  1081.  
  1082.     procedure Set_CST_Source_Rep(    --| Saves the symbol representation
  1083.                                  --| in the current token.
  1084.     In_String : in string);      --| string holding symbol.
  1085.  
  1086.     --| Effects
  1087.     --|
  1088.     --| This subprogram fills in lexed_token.symrep for the current token.
  1089.     --|
  1090.  
  1091.     ------------------------------------------------------------------
  1092.  
  1093.     procedure Initialize_CST;        --| Sets lx_srcpos for current token.
  1094.  
  1095.     --| Requires
  1096.     --|
  1097.     --| This subprogram requires Current_Column and Current_Line.
  1098.     --|
  1099.  
  1100.     --| Effects
  1101.     --|
  1102.     --| This subprogram sets common fields in CST.
  1103.     --|
  1104.  
  1105.     ------------------------------------------------------------------
  1106.  
  1107.     procedure Add_Next_Char_To_Source_Rep;
  1108.                             --| appends Next_Char to growing
  1109.                             --| source representation
  1110.  
  1111.     --| Requires
  1112.     --|
  1113.     --| Next_Char
  1114.     --|
  1115.  
  1116.     --| Effects
  1117.     --|
  1118.     --| This subprogram appends Next_Char to the growing source
  1119.     --| representation.
  1120.     --|
  1121.  
  1122.     --| Modifies
  1123.     --|
  1124.     --| Work_String
  1125.     --| Work_String_Length
  1126.     --|
  1127.  
  1128.     ------------------------------------------------------------------
  1129.  
  1130.     procedure Check_For_Consecutive_Underlines;
  1131.                             --| Issues an error message if
  1132.                             --| consecutive underlines occur.
  1133.  
  1134.     --| Requires
  1135.     --|
  1136.     --| Work_String
  1137.     --| Work_String_Length
  1138.     --|
  1139.  
  1140.     --| Effects
  1141.     --|
  1142.     --| Issues an error message if consecutive underlines occur.
  1143.     --|
  1144.  
  1145.     ------------------------------------------------------------------
  1146.  
  1147.     procedure Check_For_Terminal_Underline;
  1148.                             --| Issues an error message if
  1149.                             --| a terminal underline occurs.
  1150.  
  1151.     --| Requires
  1152.     --|
  1153.     --| Work_String
  1154.     --| Work_String_Length
  1155.     --|
  1156.  
  1157.     --| Effects
  1158.     --|
  1159.     --| This subprogram issues an error message if a terminal underline
  1160.     --| occurs.
  1161.  
  1162.     ------------------------------------------------------------------
  1163.  
  1164.     procedure Scan_Comment;       --| Scans comments.
  1165.  
  1166.     --| Requires
  1167.     --|
  1168.     --| This subprogram requires an opened source file.
  1169.     --|
  1170.  
  1171.     --| Effects
  1172.     --|
  1173.     --| This subprogram scans the rest of a comment.
  1174.     --|
  1175.  
  1176.     --| Modifies
  1177.     --|
  1178.     --| CST
  1179.     --|
  1180.  
  1181.     ------------------------------------------------------------------
  1182.  
  1183.     procedure Scan_Identifier_Including_RW;
  1184.                             --| Scans identifiers including
  1185.                             --| reserved words
  1186.  
  1187.     --| Requires
  1188.     --|
  1189.     --| This subprogram requires an opened source file.
  1190.     --|
  1191.  
  1192.     --| Effects
  1193.     --|
  1194.     --| This subprogram scans the rest of the identifier,
  1195.     --| and determines if its a reserved word.
  1196.     --|
  1197.  
  1198.     --| Modifies
  1199.     --|
  1200.     --| CST
  1201.     --|
  1202.  
  1203.     ------------------------------------------------------------------
  1204.  
  1205.     procedure Scan_Exponent;    --| Scans exponent field in
  1206.                             --| appropriate numeric_literals
  1207.  
  1208.     --| Requires
  1209.     --|
  1210.     --| This subprogram requires an opened source file.
  1211.     --|
  1212.  
  1213.     --| Effects
  1214.     --|
  1215.     --| This subprogram scans the end of numeric_literals which
  1216.     --| contain exponents.
  1217.     --|
  1218.  
  1219.     --| Modifies
  1220.     --|
  1221.     --| Work_String
  1222.     --| Work_String_Length
  1223.     --|
  1224.  
  1225.     ------------------------------------------------------------------
  1226.  
  1227.     procedure Scan_Based_Integer(  --| scans a based integer field of
  1228.                                --| a numeric literal
  1229.     In_Base_To_Use :           --| the base to use for lexing.
  1230.         in Valid_Base_Range);
  1231.  
  1232.     --| Requires
  1233.     --|
  1234.     --| This subprogram requires an opened source file.
  1235.  
  1236.     --| Effects
  1237.     --|
  1238.     --| This subprogram scans a based integer field in a numeric literal,
  1239.     --| verifying that is lexically correct.
  1240.     --|
  1241.  
  1242.     --| Modifies
  1243.     --|
  1244.     --| Work_String
  1245.     --| Work_String_Length
  1246.     --|
  1247.  
  1248.     --| Notes
  1249.     --|
  1250.     --| This subprogram and Scan_Integer are nearly identical.
  1251.     --| They are separate to save the overhead of:
  1252.     --|
  1253.     --| - passing a base in for decimal literals; and
  1254.     --|
  1255.     --| - distinguishing the extended digit 'E' from the exponent
  1256.     --| delimiter 'E'.
  1257.     --|
  1258.  
  1259.     ------------------------------------------------------------------
  1260.  
  1261.     procedure Scan_Integer;     --| scans an integer field of
  1262.                             --|  a numeric literal
  1263.  
  1264.     --| Requires
  1265.     --|
  1266.     --| This subprogram requires an opened source file.
  1267.     --| 
  1268.     
  1269.     --| Effects
  1270.     --| 
  1271.     --| This subprogram scans an integer field in a numeric literal,
  1272.     --| verifying it is lexically correct.
  1273.     --| 
  1274.     
  1275.     --| Modifies
  1276.     --|
  1277.     --| Work_String
  1278.     --| Work_String_Length
  1279.     --| 
  1280.     
  1281.     --| Notes
  1282.     --| 
  1283.     --| This subprogram and Scan_Based_Integer are nearly identical.
  1284.     --| They are separate to save the overhead of:
  1285.     --| 
  1286.     --| - passing a base in for decimal literals; and
  1287.     --| 
  1288.     --| - distinguishing the extended digit 'E' from the exponent
  1289.     --| delimiter 'E'.
  1290.     --| 
  1291.     
  1292.     ------------------------------------------------------------------
  1293.  
  1294.     procedure Scan_Numeric_Literal;   --| Scans numbers
  1295.  
  1296.     --| Requires
  1297.     --|
  1298.     --| This subprogram requires an opened source file, and the
  1299.     --| Universal Arithmetic package to handle conversions.
  1300.     --|
  1301.    
  1302.     --| Effects
  1303.     --|
  1304.     --| This subprogram scans the rest of the numeric literal and converts
  1305.     --| it to internal universal number format.
  1306.     --|
  1307.    
  1308.     --| Modifies
  1309.     --|
  1310.     --| CST
  1311.     --|
  1312.    
  1313.     -------------------------------------------------------------------
  1314.  
  1315.     procedure Scan_String_Literal;   --| Scans string literals
  1316.  
  1317.     --| Requires
  1318.     --| 
  1319.     --| This subprogram requires an opened source file.
  1320.     --| 
  1321.     
  1322.     --| Effects
  1323.     --| 
  1324.     --| This subprogram scans the rest of the string literal.
  1325.     --| 
  1326.     
  1327.     --| Modifies
  1328.     --|
  1329.     --| CST
  1330.     --|
  1331.     
  1332.     ------------------------------------------------------------------
  1333.     -- Subprogram Bodies Global to Package Lex
  1334.     -- (declared in package specification).
  1335.     ------------------------------------------------------------------
  1336.  
  1337.     procedure Initialization is
  1338.  
  1339.     begin
  1340.  
  1341.     End_Of_File_Reached := false;
  1342.     Line_Buffer_Index := Line_Buffer_Last + 1;
  1343.     -- forces Get_Next_Char to call Get_Next_Line
  1344.     Get_Next_Char;
  1345.  
  1346.     end Initialization;
  1347.  
  1348.     ------------------------------------------------------------------
  1349.  
  1350.     function GetNextNonCommentToken return PD.ParseStackElement is
  1351.     separate;
  1352.  
  1353.     ------------------------------------------------------------------
  1354.  
  1355.     function GetNextSourceToken return PD.ParseStackElement is
  1356.  
  1357.     --| Overview
  1358.     --|
  1359.     --| Note the following LRM Sections:
  1360.     --|     LRM Section 2.2  - Lexical Elements, Separators and Delimiters
  1361.     --|     LRM Section 2.2  - Notes
  1362.     --|     LRM Section 2.5  - Character Literals
  1363.     --|     LRM Section 2.7  - Comments
  1364.     --|     LRM Section 2.7  - Note
  1365.     --|     LRM Section 2.10 - Allowed Replacements of Characters
  1366.     --|
  1367.  
  1368.     begin
  1369.  
  1370.     if (End_Of_File_Reached) then
  1371.         CST := End_Of_File_Token;
  1372.     else -- this else terminates
  1373.          -- shortly before the return statement
  1374.  
  1375.     -- This loop performs the following functions:
  1376.     --
  1377.     -- 1) It scans for and ignores repeated separators.
  1378.     -- 2) It reports illegal characters between tokens.
  1379.     -- 3) It identifies and lexes tokens.
  1380.     --    Delimiters and character literals are handled
  1381.     --    by code inside this loop.
  1382.     --    Complex tokens: identifiers, string and
  1383.     --    numeric literals are lexed by called
  1384.     --    subprograms.
  1385.     -- 4) It recognizes and processes comments that
  1386.     --    occur before the first token found.  Comments
  1387.     --    after tokens are processed by a separate loop
  1388.     --    after this one.
  1389.  
  1390.         Scan_For_Token: loop
  1391.             case Next_Char is
  1392.                 when Upper_Case_Letter |
  1393.                     Lower_Case_Letter =>
  1394.                     Initialize_CST;
  1395.                     Scan_Identifier_Including_RW;
  1396.                     exit Scan_For_Token;
  1397.                     -- Next_Char already updated
  1398.  
  1399.                 when Digit =>
  1400.                     Initialize_CST;
  1401.                     Scan_Numeric_Literal;
  1402.                     exit Scan_For_Token;
  1403.                     -- Next_Char already updated
  1404.  
  1405.                 when ASCII.QUOTATION |  -- '"'
  1406.                     ASCII.PERCENT  => -- '%'
  1407.                     Initialize_CST;
  1408.                     Scan_String_Literal;
  1409.                     exit Scan_For_Token;
  1410.                     -- Next_Char already updated
  1411.  
  1412.                 when ''' =>
  1413.                     Initialize_CST;
  1414.                     if ((GC."="(Previous_Token_Value,
  1415.                                 PT.IdentifierTokenValue))
  1416.                         or else (GC."="(Previous_Token_Value,
  1417.                                         PT.AllTokenValue))
  1418.                         or else (GC."="(Previous_Token_Value,
  1419.                                         PT.StringTokenValue))
  1420.                         or else (GC."="(Previous_Token_Value,
  1421.                                         PT.CharacterTokenValue))
  1422.                         or else (GC."="(Previous_Token_Value,
  1423.                                  PT.RightParen_TokenValue)) ) then
  1424.                         --  CST is a ' delimiter
  1425.                         Set_CST_Gram_Sym_Val(
  1426.                             PT.Apostrophe_TokenValue);
  1427.                     elsif (Look_Ahead(2) = ''') then
  1428.                         -- CST is a character literal
  1429.                         CST.gram_sym_val := PT.CharacterTokenValue;
  1430.                         Get_Next_Char;
  1431.                         if not (Next_Char in Graphic_Character) then
  1432.                             -- flag as an error
  1433.                             LEM.Output_Message(
  1434.                                 Current_Line
  1435.                                 , Current_Column
  1436.                                 , Integer'Image(
  1437.                                     Character'Pos(Next_Char))
  1438.                                 -- convert to string
  1439.                                 , LEM.Character_Is_Non_Graphic);
  1440.                         end if;
  1441.                         -- save the source representation.
  1442.                         Set_CST_Source_Rep ("'" & Next_Char);
  1443.                         Get_Next_Char;  -- pass by the closing
  1444.                                         -- single quote
  1445.                     else
  1446.                         -- flag single quote use as illegal
  1447.                         LEM.Output_Message(
  1448.                             Current_Line
  1449.                             , Current_Column
  1450.                             , LEM.Illegal_Use_Of_Single_Quote);
  1451.                             --  assume CST is a ' delimiter;
  1452.                         Set_CST_Gram_Sym_Val(
  1453.                             PT.Apostrophe_TokenValue);
  1454.                     end if;
  1455.                     Exit_After_Get_Next_Char := true;
  1456.  
  1457.  
  1458.                 when ASCII.AMPERSAND =>    -- '&'
  1459.                     Initialize_CST;
  1460.                     Set_CST_Gram_Sym_Val(PT.Ampersand_TokenValue);
  1461.                     Exit_After_Get_Next_Char := true;
  1462.  
  1463.                 when '(' =>
  1464.                     Initialize_CST;
  1465.                     Set_CST_Gram_Sym_Val(PT.LeftParen_TokenValue);
  1466.                     Exit_After_Get_Next_Char := true;
  1467.  
  1468.                 when ')' =>
  1469.                     Initialize_CST;
  1470.                     Set_CST_Gram_Sym_Val(PT.RightParen_TokenValue);
  1471.                     Exit_After_Get_Next_Char := true;
  1472.  
  1473.                 when '*' =>
  1474.                     Initialize_CST;
  1475.                     Get_Next_Char;
  1476.                     case Next_Char is
  1477.                         when '*' =>
  1478.                             Set_CST_Gram_Sym_Val(
  1479.                                 PD.Exponentiation_TokenValue);
  1480.                             Exit_After_Get_Next_Char := true;
  1481.                         when others =>
  1482.                             Set_CST_Gram_Sym_Val(PT.Star_TokenValue);
  1483.                             exit Scan_For_Token;
  1484.                             -- Next_Char already updated
  1485.                     end case;
  1486.  
  1487.                 when '+' =>
  1488.                     Initialize_CST;
  1489.                     Set_CST_Gram_Sym_Val(PT.Plus_TokenValue);
  1490.                     Exit_After_Get_Next_Char := true;
  1491.             
  1492.                 when ',' =>
  1493.                     Initialize_CST;
  1494.                     Set_CST_Gram_Sym_Val(PT.Comma_TokenValue);
  1495.                     Exit_After_Get_Next_Char := true;
  1496.             
  1497.                 when '-' =>                -- Minus_Sign or Hyphen
  1498.                        Initialize_CST;
  1499.                        Get_Next_Char;
  1500.                        case Next_Char is
  1501.                         when '-' =>     -- Minus_Sign or Hyphen
  1502.                             -- two hyphens indicate a comment
  1503.                             Set_CST_Gram_Sym_Val(
  1504.                                 PT.Comment_TokenValue);
  1505.                             Scan_Comment;
  1506.                             Exit_After_Get_Next_Char := true;
  1507.                         when others =>
  1508.                             Set_CST_Gram_Sym_Val(PT.Minus_TokenValue);
  1509.                             exit Scan_For_Token;
  1510.                             -- Next_Char already updated
  1511.                     end case;
  1512.  
  1513.                 when '.' =>
  1514.                     Initialize_CST;
  1515.                     Get_Next_Char;
  1516.                     case Next_Char is
  1517.                         when '.' =>
  1518.                             Set_CST_Gram_Sym_Val(
  1519.                                 PT.DotDot_TokenValue);
  1520.                             Exit_After_Get_Next_Char := true;
  1521.                         when others =>
  1522.                             Set_CST_Gram_Sym_Val(PT.Dot_TokenValue);
  1523.                             exit Scan_For_Token;
  1524.                             -- Next_Char already updated
  1525.                     end case;
  1526.  
  1527.                 when '/' =>
  1528.                     Initialize_CST;
  1529.                     Get_Next_Char;
  1530.                     case Next_Char is
  1531.                         when '=' =>
  1532.                             Set_CST_Gram_Sym_Val(
  1533.                                 PD.NotEquals_TokenValue);
  1534.                             Exit_After_Get_Next_Char := true;
  1535.                         when others =>
  1536.                             Set_CST_Gram_Sym_Val(
  1537.                                 PT.Slash_TokenValue);
  1538.                             exit Scan_For_Token;
  1539.                             -- Next_Char already updated
  1540.                     end case;
  1541.  
  1542.                 when ASCII.COLON =>        -- ':'
  1543.                     Initialize_CST;
  1544.                     Get_Next_Char;
  1545.                     case Next_Char is
  1546.                         when '=' =>
  1547.                             Set_CST_Gram_Sym_Val(
  1548.                                 PD.Assignment_TokenValue);
  1549.                             Exit_After_Get_Next_Char := true;
  1550.                         when others =>
  1551.                             Set_CST_Gram_Sym_Val(PT.Colon_TokenValue);
  1552.                             exit Scan_For_Token;
  1553.                             -- Next_Char already updated
  1554.                     end case;
  1555.  
  1556.                 when ASCII.SEMICOLON =>    -- ';'
  1557.                     Initialize_CST;
  1558.                     Set_CST_Gram_Sym_Val(PT.SemiColon_TokenValue);
  1559.                     Exit_After_Get_Next_Char := true;
  1560.  
  1561.                 when '<' =>
  1562.                     Initialize_CST;
  1563.                     Get_Next_Char;
  1564.                     case Next_Char is
  1565.                         when '=' =>
  1566.                             Set_CST_Gram_Sym_Val(PT.LTEQ_TokenValue);
  1567.                             Exit_After_Get_Next_Char := true;
  1568.                         when '<' =>
  1569.                             Set_CST_Gram_Sym_Val(
  1570.                                 PD.StartLabel_TokenValue);
  1571.                             Exit_After_Get_Next_Char := true;
  1572.                         when '>' =>
  1573.                             Set_CST_Gram_Sym_Val(PD.Box_TokenValue);
  1574.                             Exit_After_Get_Next_Char := true;
  1575.                         when others =>
  1576.                             Set_CST_Gram_Sym_Val(PT.LT_TokenValue);
  1577.                             exit Scan_For_Token;
  1578.                             -- Next_Char already updated
  1579.                     end case;
  1580.  
  1581.                 when '=' =>
  1582.                     Initialize_CST;
  1583.                     Get_Next_Char;
  1584.                     case Next_Char is
  1585.                         when '>' =>
  1586.                             Set_CST_Gram_Sym_Val(PD.Arrow_TokenValue);
  1587.                             Exit_After_Get_Next_Char := true;
  1588.                         when others =>
  1589.                             Set_CST_Gram_Sym_Val(PT.EQ_TokenValue);
  1590.                             exit Scan_For_Token;
  1591.                             -- Next_Char already updated
  1592.                     end case;
  1593.  
  1594.                 when '>' =>
  1595.                     Initialize_CST;
  1596.                     Get_Next_Char;
  1597.                     case Next_Char is
  1598.                         when '=' =>
  1599.                             Set_CST_Gram_Sym_Val(PT.GTEQ_TokenValue);
  1600.                             Exit_After_Get_Next_Char := true;
  1601.                         when '>' =>
  1602.                             Set_CST_Gram_Sym_Val(
  1603.                                 PD.EndLabel_TokenValue);
  1604.                             Exit_After_Get_Next_Char := true;
  1605.                         when others =>
  1606.                             Set_CST_Gram_Sym_Val(PT.GT_TokenValue);
  1607.                             exit Scan_For_Token;
  1608.                             -- Next_Char already updated
  1609.                     end case;
  1610.  
  1611.                 when ASCII.BAR    |  -- '|'
  1612.                     ASCII.EXCLAM => -- '!'
  1613.                     -- vertical bar and its alternative
  1614.                     Initialize_CST;
  1615.                     Set_CST_Gram_Sym_Val(PT.Bar_TokenValue);
  1616.                     Exit_After_Get_Next_Char := true;
  1617.  
  1618.                 when ASCII.HT =>   -- Horizontal Tab
  1619.                     -- a lexical unit separator - skip it.
  1620.                     -- position Current_Column properly. This is done
  1621.                     --     here to save the cost of a test on every
  1622.                     --     character in Get_Next_Char.
  1623.  
  1624.                     Current_Column :=
  1625.                         HD.FindTabColumn(Current_Column);
  1626.  
  1627.                 when ' ' | End_Of_Line_Character =>
  1628.                     -- rest of the lexical unit separators
  1629.  
  1630.                     if (End_Of_File_Reached) then
  1631.                         return End_Of_File_Token;
  1632.                     end if;
  1633.             
  1634.             
  1635.                 when ASCII.UNDERLINE =>    -- '_'
  1636.                     case Look_Ahead(1) is
  1637.                         when Upper_Case_Letter | Lower_Case_Letter =>
  1638.                             -- flag illegal leading under line
  1639.                             LEM.Output_Message(
  1640.                                 Current_Line
  1641.                                 , Current_Column
  1642.                                 , LEM.Leading_Underline);
  1643.                             Initialize_CST;
  1644.                             Scan_Identifier_Including_RW;
  1645.                             exit Scan_For_Token;
  1646.                             -- Next_Char already updated
  1647.                         when Digit =>
  1648.                             -- flag illegal leading under line
  1649.                             LEM.Output_Message(
  1650.                                 Current_Line
  1651.                                 , Current_Column
  1652.                                 , LEM.Leading_Underline);
  1653.                             Initialize_CST;
  1654.                             Scan_Numeric_Literal;
  1655.                             exit Scan_For_Token;
  1656.                             -- Next_Char already updated
  1657.                         when others =>
  1658.                             -- flag illegal character for start
  1659.                             -- of token
  1660.                             LEM.Output_Message(
  1661.                                 Current_Line
  1662.                                 , Current_Column
  1663.                                 , "_"
  1664.                                 , LEM.Character_Can_Not_Start_Token);
  1665.                     end case;
  1666.  
  1667.  
  1668.                 when ASCII.SHARP           |  -- '#'
  1669.                      ASCII.DOLLAR          |  -- '$'
  1670.                      ASCII.QUERY           |  -- '?'
  1671.                      ASCII.AT_SIGN         |  -- '@'
  1672.                      ASCII.L_BRACKET       |  -- '['
  1673.                      ASCII.BACK_SLASH      |  -- '\'
  1674.                      ASCII.R_BRACKET       |  -- ']'
  1675.                      ASCII.CIRCUMFLEX      |  -- '^'
  1676.                      ASCII.GRAVE           |  -- '`'
  1677.                      ASCII.L_BRACE         |  -- '{'
  1678.                      ASCII.R_BRACE         |  -- '}'
  1679.                      ASCII.TILDE           => -- '~'
  1680.                         -- flag illegal character for start of token
  1681.                         LEM.Output_Message(
  1682.                             Current_Line
  1683.                             , Current_Column
  1684.                             , Next_Char & ""  -- convert to string
  1685.                             , LEM.Character_Can_Not_Start_Token);
  1686.  
  1687.                 when ASCII.NUL ..          -- Null to
  1688.                             ASCII.BS  |    --  Back Space
  1689.                      ASCII.SO ..           -- Shift Out to
  1690.                             ASCII.US  |    --  Unit Separator
  1691.                      ASCII.DEL        =>   -- Delete
  1692.                         -- flag as non-graphic ASCII control character
  1693.                     LEM.Output_Message(
  1694.                         Current_Line
  1695.                         , Current_Column
  1696.                         , Integer'Image(Character'Pos(Next_Char))
  1697.                                               -- convert to string
  1698.                         , LEM.Character_Is_Non_Graphic);
  1699.  
  1700.                 when others =>
  1701.                     -- should never happen due to 's
  1702.                     -- definition of CHARACTER. flag as illegal anyhow
  1703.                     LEM.Output_Message(
  1704.                         Current_Line
  1705.                         , Current_Column
  1706.                         , LEM.Character_Is_Non_ASCII);
  1707.             end case;
  1708.  
  1709.             Get_Next_Char;    -- for next time through loop.
  1710.  
  1711.             if (Exit_After_Get_Next_Char) then
  1712.                 Exit_After_Get_Next_Char := false;
  1713.                 exit Scan_For_Token;
  1714.             end if;
  1715.  
  1716.         end loop Scan_For_Token;    -- Next_Char already updated
  1717.  
  1718.         Previous_Token_Value := CST.gram_sym_val;
  1719.         -- for resolving T'('c')
  1720.  
  1721.     end if; -- (End_Of_File_Reached)
  1722.  
  1723.     return CST;
  1724.  
  1725.     -- On leaving: object Next_Char should contain character
  1726.     -- to scan on next call of this function.
  1727.  
  1728.     end GetNextSourceToken;
  1729.  
  1730.     ------------------------------------------------------------------
  1731.     -- Subprogram Bodies Local to Package Lex
  1732.     ------------------------------------------------------------------
  1733.  
  1734.     procedure Get_Next_Char is
  1735.     
  1736.     begin
  1737.     
  1738.     --| Algorithm
  1739.     --| 
  1740.     --| Source File is scanned returning each character until the
  1741.     --| end of the file is found. Proper column positioning for a tab
  1742.     --| character is done in GetNextSourceToken for speed.
  1743.     --| 
  1744.     
  1745.     -- The End_Of_Line_Character that Get_Next_Line
  1746.     -- inserts needs to be seen by the scanning
  1747.     -- case statements to terminate tokens correctly.
  1748.     
  1749.     Current_Column    := Current_Column    + 1;
  1750.     Line_Buffer_Index := Line_Buffer_Index + 1;
  1751.     Next_Char := Line_Buffer (Line_Buffer_Index);
  1752.  
  1753.     if (Line_Buffer_Index > Line_Buffer_Last) then
  1754.         Get_Next_Line;
  1755.         -- Current_Column and Line_Buffer_Index are handled there.
  1756.         Next_Char := Line_Buffer (Line_Buffer_Index);
  1757.     end if;
  1758.     
  1759.     end Get_Next_Char; -- procedure
  1760.     
  1761.     ------------------------------------------------------------------
  1762.  
  1763.     procedure Get_Next_Line is
  1764.     
  1765.     begin
  1766.     
  1767.     -- Get next source line from CURRENT_INPUT. Update column and
  1768.     -- line counts
  1769.     Current_Column := 1;
  1770.     Line_Buffer_Index := 1;
  1771.  
  1772.     Ignore_Null_Line:
  1773.     loop
  1774.         -- do NOT move next statement out of loop
  1775.         if (Current_Line < HD.Source_Line'Last) then
  1776.             begin  -- block
  1777.                 Current_Line := HD.Source_Line  -- type conversion
  1778.                     (TEXT_IO.LINE(FILE => TEXT_IO.CURRENT_INPUT));
  1779.                 if (Current_Line >= HD.Source_Line'Last) then
  1780.                     raise CONSTRAINT_ERROR;
  1781.                 end if;
  1782.             exception
  1783.                 when others =>
  1784.                     Current_Line := HD.Source_Line'Last;
  1785.                     LEM.Output_Message(
  1786.                         Current_Line
  1787.                         , Current_Column
  1788.                         , HD.Source_Line'IMAGE(HD.Source_Line'Last)
  1789.                         , LEM.Source_Line_Maximum_Exceeded);
  1790.             end; -- block
  1791.         end if;
  1792.         TEXT_IO.GET_LINE(
  1793.             FILE => TEXT_IO.CURRENT_INPUT,
  1794.             ITEM => Line_Buffer(1..(Line_Buffer'Last - 1)),
  1795.             LAST => Line_Buffer_Last);
  1796.             -- flag a line that is too long as an error
  1797.             if (Line_Buffer_Last >= Line_Buffer'Last - 1) and then
  1798.                (TEXT_IO.END_OF_LINE(FILE => TEXT_IO.CURRENT_INPUT) )
  1799.             then
  1800.                 LEM.Output_Message(
  1801.                     Current_Line
  1802.                     , Current_Column
  1803.                     , LEM.Source_Line_Too_Long);
  1804.             end if;
  1805.         Write_Line;
  1806.             exit Ignore_Null_Line when
  1807.                 (Line_Buffer_Last /= (Line_Buffer'First - 1));
  1808.     end loop Ignore_Null_Line;
  1809.  
  1810.     Line_Buffer_Last              := Line_Buffer_Last + 1;
  1811.     Line_Buffer(Line_Buffer_Last) := End_Of_Line_Buffer;
  1812.     
  1813.     exception
  1814.     -- when end of file is reached
  1815.     when TEXT_IO.END_ERROR =>
  1816.         -- save that state for GetNextSourceToken
  1817.         End_Of_File_Reached := true;
  1818.  
  1819.         -- update column and line counts
  1820.         Line_Buffer_Last  := 1;
  1821.         Line_Buffer(Line_Buffer_Last) := End_Of_Line_Buffer;
  1822.         Line_Buffer_Index := 1;
  1823.         Current_Column    := 1;
  1824.         -- Current_Line is ok.
  1825.         -- Last call to GET_LINE advanced it one.
  1826.  
  1827.         -- set the value of End_Of_File_Token
  1828.         -- the discriminants were set up by the object declaration
  1829.         End_Of_File_Token.gram_sym_val := PT.EOF_TokenValue;
  1830.         End_Of_File_Token.lexed_token := (
  1831.             srcpos_line     => Current_Line,
  1832.             srcpos_column   => Current_Column,
  1833.             text            => PD.Null_Source_Text);
  1834.  
  1835.     end Get_Next_Line;
  1836.  
  1837.     ------------------------------------------------------------------
  1838.  
  1839.     function Look_Ahead(
  1840.     In_Columns_Ahead : in HD.Source_Column) return character is
  1841.  
  1842.     ------------------------------------------------------------------
  1843.     -- Declarations for subprogram Look_Ahead
  1844.     ------------------------------------------------------------------
  1845.     
  1846.     Position_To_Try : Integer := Integer   --type conversion
  1847.                                     ( Line_Buffer_Index
  1848.                                 + In_Columns_Ahead);
  1849.     
  1850.     ------------------------------------------------------------------
  1851.     
  1852.     begin
  1853.     
  1854.     -- if request is past the end of line
  1855.     if (Position_To_Try > Integer(Line_Buffer_Last) ) then
  1856.                                -- type conversion
  1857.         -- return the end_of_line character
  1858.         return End_Of_Line_Buffer;
  1859.     else
  1860.         -- else return the requested character
  1861.         return Line_Buffer(Position_To_Try);
  1862.     end if;
  1863.     
  1864.     end Look_Ahead; -- function
  1865.  
  1866.     ------------------------------------------------------------------
  1867.  
  1868.     procedure Set_CST_Gram_Sym_Val(
  1869.     In_Token_Value : in PT.TokenRange) is
  1870.  
  1871.     begin
  1872.     
  1873.     CST.gram_sym_val := In_Token_Value;
  1874.     
  1875.     end Set_CST_Gram_Sym_Val;
  1876.     
  1877.     ----------------------------------------------------------------------
  1878.     
  1879.     procedure Set_CST_Source_Rep(
  1880.     In_String : in string) is
  1881.     
  1882.     begin
  1883.     
  1884.     -- store the representation
  1885.     PD.Put_Source_Text(
  1886.         In_String,
  1887.         CST.lexed_token.text);
  1888.     
  1889.     end Set_CST_Source_Rep;
  1890.  
  1891.     ------------------------------------------------------------------
  1892.  
  1893.     procedure Initialize_CST is
  1894.     
  1895.     begin
  1896.     
  1897.     -- Set up discriminants, and source position properly
  1898.     -- Set other CST fields to null values
  1899.     CST := CST_Initializer;
  1900.     
  1901.     CST.lexed_token := (
  1902.         srcpos_line     => Current_Line,
  1903.         srcpos_column   => Current_Column,
  1904.         text            => PD.Null_Source_Text);
  1905.     
  1906.     end Initialize_CST;
  1907.  
  1908.     ------------------------------------------------------------------
  1909.  
  1910.     procedure Add_Next_Char_To_Source_Rep is
  1911.     
  1912.     begin
  1913.     
  1914.     -- append the character to growing source representation
  1915.     Work_String_Length              := Work_String_Length + 1;
  1916.     Work_String(Work_String_Length) := Next_Char;
  1917.     
  1918.     end Add_Next_Char_To_Source_Rep;
  1919.  
  1920.     ------------------------------------------------------------------
  1921.  
  1922.     procedure Check_For_Consecutive_Underlines is
  1923.  
  1924.     begin
  1925.  
  1926.     -- flag consecutive underlines as an error (leading
  1927.     -- underlines are handled in GetNextSourceToken).
  1928.     if (Work_String(Work_String_Length) = ASCII.UNDERLINE)
  1929.     then
  1930.         LEM.Output_Message(
  1931.             Current_Line
  1932.             , Current_Column
  1933.             , LEM.Consecutive_Underlines);
  1934.     end if;
  1935.     
  1936.     end Check_For_Consecutive_Underlines; -- procedure
  1937.  
  1938.     ------------------------------------------------------------------
  1939.  
  1940.     procedure Check_For_Terminal_Underline is
  1941.  
  1942.     begin
  1943.  
  1944.     -- flag a trailing underline as an error.
  1945.     -- trailing underlines are saved for the same
  1946.     -- reason as leading ones.
  1947.     -- See comment in GetNextSourceToken.
  1948.     
  1949.     if (Work_String(Work_String_Length) = ASCII.UNDERLINE)
  1950.     -- check the preceeding character
  1951.     then
  1952.         LEM.Output_Message(
  1953.             Current_Line
  1954.             , Current_Column
  1955.             , LEM.Terminal_Underline);
  1956.     end if;
  1957.     
  1958.     end Check_For_Terminal_Underline;
  1959.  
  1960.     ------------------------------------------------------------------
  1961.  
  1962.     procedure Scan_Comment is
  1963.     
  1964.     --| Overview
  1965.     --|
  1966.     --| Note the following LRM Sections:
  1967.     --|     LRM Section 2.7  - Comments
  1968.     --|     LRM Section 2.7  - Note
  1969.     --|
  1970.     
  1971.     begin
  1972.     
  1973.     -- get to the beginning of the comment
  1974.     Get_Next_Char;
  1975.     Set_CST_Source_Rep(
  1976.         Line_Buffer(Line_Buffer_Index .. Line_Buffer_Last - 1));  
  1977.         -- subtract 1 so that the carridge return is not also returned.
  1978.     
  1979.     Line_Buffer_Index := Line_Buffer_Last + 1;
  1980.     -- force next call to Get_Next_Char to call Get_Next_Line
  1981.     
  1982.     end Scan_Comment;
  1983.  
  1984.     ------------------------------------------------------------------
  1985.  
  1986.     procedure Scan_Identifier_Including_RW is
  1987.     
  1988.     --| Overview
  1989.     --|
  1990.     --| Note the following LRM Sections:
  1991.     --|     LRM Section 2.3 - Identifiers
  1992.     --|     LRM Section 2.3 - Note
  1993.     --|     LRM Section 2.9 - Reserved Words
  1994.     --|     LRM Section 2.9 - Notes
  1995.     --|
  1996.     
  1997.     ------------------------------------------------------------------
  1998.     
  1999.     begin
  2000.     
  2001.     Work_String_Length := 0;
  2002.     
  2003.     -- scan source file for rest of token
  2004.     -- note that first character of the token is stored first
  2005.     Scan_For_Identifier_Including_RW: loop
  2006.         Add_Next_Char_To_Source_Rep;
  2007.  
  2008.         -- set up for processing next characte
  2009.         Get_Next_Char;
  2010.     
  2011.         case Next_Char is
  2012.             when Upper_Case_Letter | Lower_Case_Letter | Digit =>
  2013.                 -- action is at start of next loop cycle
  2014.                 null;
  2015.             when ASCII.UNDERLINE =>        -- '_'
  2016.                 Check_For_Consecutive_Underlines;
  2017.             when others =>
  2018.                 Check_For_Terminal_Underline;
  2019.  
  2020.                 -- token is terminated by any character except letter
  2021.                 --     digit, or underline;
  2022.                 exit Scan_For_Identifier_Including_RW; -- this loop
  2023.         end case;
  2024.  
  2025.     end loop Scan_For_Identifier_Including_RW;
  2026.  
  2027.     -- find out what kind of token it is
  2028.     RQS_Lex_Identifier_Token_Value.Find(
  2029.         In_Identifier       =>
  2030.             Work_String(1..Work_String_Length),
  2031.         Out_Token_Value     => CST.gram_sym_val);
  2032.     
  2033.     -- store the source representation of the token found
  2034.     Set_CST_Source_Rep(Work_String(1..Work_String_Length) );
  2035.     
  2036.     end Scan_Identifier_Including_RW;
  2037.  
  2038.     ------------------------------------------------------------------
  2039.  
  2040.     procedure Scan_Exponent is
  2041.     
  2042.     --| Overview
  2043.     --|
  2044.     --| Note the following LRM Sections:
  2045.     --|     LRM Section 2.4.1 - Decimal Literals
  2046.     --|     LRM Section 2.4.1 - Notes
  2047.     --|     LRM Section 2.4.2 - Based Literals
  2048.     --|
  2049.  
  2050.     begin
  2051.     
  2052.     -- Check for missing 'E' or 'e',
  2053.     -- and for existence of the exponent
  2054.     case Next_Char is
  2055.         when 'E' | 'e' =>
  2056.             null;    -- normal case
  2057.         when others =>
  2058.             return;  -- no exponent to process
  2059.     end case;
  2060.     -- add first character to growing literal
  2061.     Add_Next_Char_To_Source_Rep;
  2062.     
  2063.     
  2064.     -- scan source file for rest of the exponent
  2065.     -- verify that next character is legal for an integer field
  2066.     Get_Next_Char;
  2067.     
  2068.     case Next_Char is
  2069.         when '+' =>
  2070.             -- add sign character to growing literal
  2071.             Add_Next_Char_To_Source_Rep;
  2072.  
  2073.             Get_Next_Char;
  2074.         when '-' =>     -- Minus_Sign
  2075.             if not (Seen_Radix_Point) then
  2076.                 -- flag negative exponent as illegal in an integer
  2077.                 LEM.Output_Message(
  2078.                     Current_Line
  2079.                     , Current_Column
  2080.                     , LEM.Negative_Exponent_Illegal_In_Integer);
  2081.             end if;
  2082.  
  2083.             -- add sign character to growing literal
  2084.             Add_Next_Char_To_Source_Rep;
  2085.  
  2086.             Get_Next_Char;
  2087.         when others =>
  2088.             null;
  2089.     end case;
  2090.  
  2091.     case Next_Char is
  2092.         when Digit =>
  2093.             -- scan the integer field of the exponent
  2094.             Scan_Integer;
  2095.         when ASCII.UNDERLINE =>        -- '_'
  2096.             if (Look_Ahead(1) in Digit) then
  2097.                 -- flag illegal leading under line
  2098.                 LEM.Output_Message(
  2099.                     Current_Line
  2100.                     , Current_Column
  2101.                     , LEM.Leading_Underline);
  2102.                 -- scan the integer field of the exponent
  2103.                 Scan_Integer;
  2104.             else
  2105.                 -- issue error message that integer field is missing
  2106.                 LEM.Output_Message(
  2107.                 Current_Line
  2108.                     , Current_Column
  2109.                     , LEM.Exponent_Missing_Integer_Field);
  2110.             end if;
  2111.         when others =>
  2112.             -- issue an error message that integer field is missing
  2113.             LEM.Output_Message(
  2114.                 Current_Line
  2115.                 , Current_Column
  2116.                 , LEM.Exponent_Missing_Integer_Field);
  2117.     end case;
  2118.     
  2119.     end Scan_Exponent;
  2120.  
  2121.     ------------------------------------------------------------------
  2122.  
  2123.     procedure Scan_Based_Integer(
  2124.     In_Base_To_Use : in Valid_Base_Range) is
  2125.  
  2126.     --| Overview
  2127.     --|
  2128.     --| Note the following LRM Sections:
  2129.     --|     LRM Section 2.4   - Numeric Literals
  2130.     --|     LRM Section 2.4.2 - Based Literals
  2131.     --|
  2132.     
  2133.     ------------------------------------------------------------------
  2134.     -- Declarations for Procedure Scan_Based_Integer
  2135.     ------------------------------------------------------------------
  2136.     
  2137.     BAD : constant GC.ParserInteger := GC.ParserInteger'Last;
  2138.     --| an integer value greater than 15 to use as a flag to indicate
  2139.     --| illegal values.
  2140.  
  2141.     Transform : constant array(CHARACTER) of GC.ParserInteger :=
  2142.     
  2143.     -------- ( nul,  soh,  stx,  etx,     eot,  enq,  ack,  bel,
  2144.          ( BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2145.     --------   bs,   ht,   lf,   vt,      ff,   cr,   so,   si,
  2146.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2147.     --------   dle,  dc1,  dc2,  dc3,     dc4,  nak,  syn,  etb,
  2148.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2149.     --------   can,  em,   sub,  esc,     fs,   gs,   rs,   us,
  2150.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2151.  
  2152.     --------   ' ',  '!',  '"',  '#',     '$',  '%',  '&',  ''',
  2153.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2154.     --------   '(',  ')',  '*',  '+',     ',',  '-',  '.',  '/',
  2155.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2156.     --------   '0',  '1',  '2',  '3',     '4',  '5',  '6',  '7',
  2157.             0 ,   1 ,   2 ,   3 ,      4 ,   5 ,   6 ,   7 ,
  2158.     --------   '8',  '9',  ':',  ';',     '<',  '=',  '>',  '?',
  2159.             8 ,   9 ,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2160.     
  2161.     --------   '@',  'A',  'B',  'C',     'D',  'E',  'F',  'G',
  2162.            BAD,  10 ,  11 ,  12 ,     13 ,  14 ,  15 ,  BAD,
  2163.     --------   'H',  'I',  'J',  'K',     'L',  'M',  'N',  'O',
  2164.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2165.     --------   'P',  'Q',  'R',  'S',     'T',  'U',  'V',  'W',
  2166.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2167.     --------   'X',  'Y',  'Z',  '[',     '\',  ']',  '^',  '_',
  2168.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2169.     
  2170.     --------   '`',  'a',  'b',  'c',     'd',  'e',  'f',  'g',
  2171.            BAD,  10 ,  11 ,  12 ,     13 ,  14 ,  15 ,  BAD,
  2172.     --------   'h',  'i',  'j',  'k',     'l',  'm',  'n',  'o',
  2173.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2174.     --------   'p',  'q',  'r',  's',     't',  'u',  'v',  'w',
  2175.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD,
  2176.     --------   'x',  'y',  'z',  '{',     '|',  '}',  '~',   del);
  2177.            BAD,  BAD,  BAD,  BAD,     BAD,  BAD,  BAD,  BAD );
  2178.     --| used to transform a character value to an integer value for
  2179.     --| purpose of checking that a digit is within the legal range
  2180.     --| for the base passed in via In_Base_To_Use.
  2181.  
  2182.     ------------------------------------------------------------------
  2183.  
  2184.     begin
  2185.  
  2186.     -- check that first character, if not an under line,
  2187.     -- is a valid digit for base being used.
  2188.     if (Next_Char /= ASCII.UNDERLINE) and then
  2189.        (Transform(Next_Char) >= In_Base_To_Use)
  2190.     then
  2191.         -- flag digit as invalid for base
  2192.         LEM.Output_Message(
  2193.             Current_Line
  2194.             , Current_Column
  2195.             , Next_Char & ""  -- convert to string
  2196.             , LEM.Digit_Invalid_For_Base);
  2197.     end if;
  2198.  
  2199.     -- scan source file for rest of the field
  2200.     -- note that first character of the field is stored first
  2201.     Scan_For_Based_Integer: loop
  2202.     
  2203.         Add_Next_Char_To_Source_Rep;
  2204.     
  2205.         -- set up for processing next character
  2206.         Get_Next_Char;
  2207.     
  2208.         case Next_Char is
  2209.             when 'A' .. 'F' | 'a' .. 'f' | Digit =>
  2210.                 -- check if Next_Char is in valid base range
  2211.                 if (Transform(Next_Char) >= In_Base_To_Use) then
  2212.                     -- flag digit as invalid for base
  2213.                     LEM.Output_Message(
  2214.                         Current_Line
  2215.                         , Current_Column
  2216.                         , Next_Char & ""  -- convert to string
  2217.                         , LEM.Digit_Invalid_For_Base);
  2218.                 end if;
  2219.                 -- rest of action is at start of next loop cycle
  2220.             when ASCII.UNDERLINE =>    -- '_'
  2221.                 Check_For_Consecutive_Underlines;
  2222.             when others =>
  2223.                 Check_For_Terminal_Underline;
  2224.                 -- field is terminated by any character except
  2225.                 -- extended digit (letters a to f and digits),
  2226.                 -- or underline
  2227.                 exit Scan_For_Based_Integer; -- this loop
  2228.         end case;
  2229.  
  2230.     end loop Scan_For_Based_Integer;
  2231.     -- Next_Char already updated
  2232.  
  2233.     end Scan_Based_Integer;
  2234.  
  2235.     ------------------------------------------------------------------
  2236.  
  2237.     procedure Scan_Integer is
  2238.     
  2239.     --| Overview
  2240.     --|
  2241.     --| Note the following LRM Sections:
  2242.     --|     LRM Section 2.4   - Numeric Literals
  2243.     --|     LRM Section 2.4.1 - Decimal Literals
  2244.     --|     LRM Section 2.4.1 - Notes
  2245.     --|
  2246.     
  2247.     begin
  2248.     
  2249.     -- scan source file for rest of the field
  2250.     -- note that first character of the field is stored first
  2251.     Scan_For_Integer: loop
  2252.     
  2253.         Add_Next_Char_To_Source_Rep;
  2254.     
  2255.         -- set up for processing next character
  2256.         Get_Next_Char;
  2257.     
  2258.         case Next_Char is
  2259.             when Digit =>
  2260.                 -- rest of action is at start of next loop cycle
  2261.                 null;
  2262.             when ASCII.UNDERLINE =>    -- '_'
  2263.                 Check_For_Consecutive_Underlines;
  2264.             when others =>
  2265.                 Check_For_Terminal_Underline;
  2266.  
  2267.                 -- field is terminated by any character except
  2268.                 --     digit, or underline
  2269.                 exit Scan_For_Integer; -- this loop
  2270.         end case;
  2271.  
  2272.     end loop Scan_For_Integer; -- Next_Char already updated
  2273.  
  2274.     end Scan_Integer;
  2275.  
  2276.     ------------------------------------------------------------------
  2277.  
  2278.     procedure Scan_Numeric_Literal is
  2279.     
  2280.     --| Overview
  2281.     --|
  2282.     --| Note the following LRM Sections:
  2283.     --|     LRM Section 2.4   - Numeric Literals
  2284.     --|     LRM Section 2.4.1 - Decimal Literals
  2285.     --|     LRM Section 2.4.1 - Notes
  2286.     --|     LRM Section 2.4.2 - Based Literals
  2287.     --|     LRM Section 2.10  - Allowed Replacements of Characters
  2288.     --|
  2289.     
  2290.     ------------------------------------------------------------------
  2291.     -- Declarations for Scan_Numeric_Literal
  2292.     ------------------------------------------------------------------
  2293.  
  2294.     Based_Literal_Delimiter : character;
  2295.     --| holds value of first based_literal delimeter:
  2296.     --| ASCII.COLON (':') or ASCII.SHARP ('#');
  2297.     --| so the second one can be checked to be identical.
  2298.     
  2299.     Base_Being_Used : GC.ParserInteger;
  2300.     --| base value to be passed to Scan_Based_Literal.
  2301.     
  2302.     ------------------------------------------------------------------
  2303.     
  2304.     begin
  2305.     
  2306.     CST.gram_sym_val := PT.NumericTokenValue;
  2307.  
  2308.     Work_String_Length := 0;
  2309.     -- also used by sub-scanners called from this subprogram.
  2310.  
  2311.     -- Scan first field
  2312.     Scan_Integer;
  2313.  
  2314.     -- Now, scan rest of literal dependent on what Next_char is
  2315.     case Next_Char is
  2316.  
  2317.         -- have a decimal_literal
  2318.         when '.' =>
  2319.             if (Look_Ahead(1) = '.') then
  2320.                 -- next token is a range double delimiter.
  2321.                 -- finished with numeric_literal.
  2322.                 Seen_Radix_Point := false;  -- have an integer_literal
  2323.                 -- already set_up for next scanner,
  2324.                 -- no call to Get_Next_Char.
  2325.             else
  2326.                 Seen_Radix_Point := true;
  2327.                 Add_Next_Char_To_Source_Rep;
  2328.                 Get_Next_Char;
  2329.                 case Next_Char is
  2330.                     when Digit =>
  2331.                         Scan_Integer;
  2332.                         -- check and flag multiple radix points
  2333.                         while (Next_Char = '.') and then
  2334.                             (Look_Ahead(1) in digit) loop
  2335.                                 LEM.Output_Message
  2336.                                     ( Current_Line
  2337.                                     , Current_Column
  2338.                                     , LEM.Too_Many_Radix_Points);
  2339.                                 Add_Next_Char_To_Source_Rep;
  2340.                                 Get_Next_Char;
  2341.                                 Scan_Integer;
  2342.                         end loop;
  2343.                     when ASCII.UNDERLINE =>        -- '_'
  2344.                         -- flag illegal leading under line
  2345.                         LEM.Output_Message(
  2346.                             Current_Line
  2347.                             , Current_Column
  2348.                             , LEM.Leading_Underline);
  2349.                         Scan_Integer;
  2350.                         -- not flagging an integer consisting of a
  2351.                         -- single underline as a trailing radix
  2352.                         -- point case.  Check and flag multiple radix
  2353.                         -- points.
  2354.                         while (Next_Char = '.') and then
  2355.                             (Look_Ahead(1) in digit) loop
  2356.                             LEM.Output_Message(
  2357.                                 Current_Line
  2358.                                 , Current_Column
  2359.                                 , LEM.Too_Many_Radix_Points);
  2360.                             Add_Next_Char_To_Source_Rep;
  2361.                             Get_Next_Char;
  2362.                             Scan_Integer;
  2363.                         end loop;
  2364.                     when others =>
  2365.                         -- flag trailing radix point as an error
  2366.                         LEM.Output_Message(
  2367.                             Current_Line
  2368.                             , Current_Column
  2369.                             , LEM.Digit_Needed_After_Radix_Point);
  2370.                 end case;
  2371.  
  2372.                 Scan_Exponent;  -- check for and process exponent
  2373.  
  2374.             end if;
  2375.  
  2376.         -- have a based_literal
  2377.         when ASCII.SHARP |     -- '#'
  2378.              ASCII.COLON =>    -- ':'
  2379.                 if (Next_Char = ASCII.COLON) and (Look_Ahead(1) = '=') then
  2380.                     -- next token is an assignment compound delimiter
  2381.                     -- finished with numeric literal.
  2382.                     Seen_Radix_Point := false;  -- have an integer literal
  2383.                     -- already set up for next scanner, no call to
  2384.                     -- Get_Next_Char.
  2385.                 else
  2386.                     Based_Literal_Delimiter := Next_Char;
  2387.                     Base_Being_Used := GC.ParserInteger'VALUE
  2388.                         (Work_String(1..Work_String_Length));
  2389.                     if (Base_Being_Used not in Valid_Base_Range) then
  2390.                         -- flag illegal bases as errors
  2391.                         LEM.Output_Message(
  2392.                             Current_Line
  2393.                             , Current_Column
  2394.                             , Work_String(1..Work_String_Length)
  2395.                             , LEM.Base_Out_Of_Legal_Range_Use_16);
  2396.                         Base_Being_Used := 16;
  2397.                         -- we use the maximum base to pass all the
  2398.                         -- extended_digits as legal.
  2399.                     end if;
  2400.     
  2401.                     Add_Next_Char_To_Source_Rep;  -- save the base delimiter
  2402.                     Get_Next_Char;
  2403.         
  2404.                     case Next_Char is
  2405.                         when 'A' .. 'F' | 'a' .. 'f' | Digit =>
  2406.                             Scan_Based_Integer(Base_Being_Used);
  2407.                         when ASCII.UNDERLINE =>    -- '_'
  2408.                             -- flag illegal leading under line
  2409.                             LEM.Output_Message(
  2410.                                 Current_Line
  2411.                                 , Current_Column
  2412.                                 , LEM.Leading_Underline);
  2413.                             -- not flagging an integer consisting of a single
  2414.                             -- under line as a trailing radix point case.
  2415.                             Scan_Based_Integer(Base_Being_Used);
  2416.                         when '.' =>
  2417.                             -- flag leading radix point as an error
  2418.                             LEM.Output_Message(
  2419.                                 Current_Line
  2420.                                 , Current_Column
  2421.                                 , LEM.Digit_Needed_Before_Radix_Point);
  2422.                         when ASCII.SHARP |         -- '#'
  2423.                              ASCII.COLON =>        -- ':'
  2424.                             -- flag missing field as an error
  2425.                             LEM.Output_Message(
  2426.                                 Current_Line
  2427.                                 , Current_Column
  2428.                                 , LEM.No_Integer_In_Based_Number);
  2429.             
  2430.                             -- based_literal_delimiter_mismatch handled in
  2431.                             -- next case statement.
  2432.                         when others =>
  2433.                             -- flag missing field as an error
  2434.                             LEM.Output_Message(
  2435.                                 Current_Line
  2436.                                 , Current_Column
  2437.                                 , LEM.No_Integer_In_Based_Number);
  2438.                     end case;
  2439.             
  2440.                     case Next_Char is
  2441.                         when '.' =>
  2442.                             Seen_Radix_Point := true;  -- have a real_literal
  2443.                             Add_Next_Char_To_Source_Rep;
  2444.             
  2445.                             Get_Next_Char;
  2446.                             case Next_Char is
  2447.                                 when 'A' .. 'F' | 'a' .. 'f' | Digit =>
  2448.                                     Scan_Based_Integer(Base_Being_Used);
  2449.                                     -- check and flag multiple radix points
  2450.                                     while (Next_Char = '.') and then
  2451.                                         ((Look_Ahead(1) in digit) or
  2452.                                         (Look_Ahead(1) in 'A' .. 'F') or
  2453.                                         (Look_Ahead(1) in 'a' .. 'f')) loop
  2454.                                         LEM.Output_Message(
  2455.                                             Current_Line
  2456.                                             , Current_Column
  2457.                                             , LEM.Too_Many_Radix_Points);
  2458.                                         Add_Next_Char_To_Source_Rep;
  2459.                                         Get_Next_Char;
  2460.                                         Scan_Based_Integer(Base_Being_Used);
  2461.                                     end loop;
  2462.                                 when ASCII.UNDERLINE =>        -- '_'
  2463.                                     -- flag illegal leading under lined
  2464.                                     LEM.Output_Message(
  2465.                                         Current_Line
  2466.                                         , Current_Column
  2467.                                         , LEM.Leading_Underline);
  2468.                                     -- not flagging an integer consisting of
  2469.                                     -- a single underline as a trailing
  2470.                                     -- radix point case.
  2471.                                     Scan_Based_Integer(Base_Being_Used);
  2472.                                 when others =>
  2473.                                     -- flag trailing radix point as an error
  2474.                                     LEM.Output_Message(
  2475.                                         Current_Line
  2476.                                         , Current_Column
  2477.                                         , LEM.Digit_Needed_After_Radix_Point);
  2478.                             end case;
  2479.  
  2480.                             case Next_Char is
  2481.                                 when ASCII.SHARP |         -- '#'
  2482.                                      ASCII.COLON =>        -- ':'
  2483.             
  2484.                                     Add_Next_Char_To_Source_Rep;
  2485.                                     -- save the base delimiter
  2486.  
  2487.                                     if (Next_Char /= Based_Literal_Delimiter)
  2488.                                     then
  2489.                                         -- flag based_literal delimiter
  2490.                                         -- mismatch as an error
  2491.                                         LEM.Output_Message(
  2492.                                             Current_Line
  2493.                                             , Current_Column
  2494.                                             ,   "Opener: "
  2495.                                             & Based_Literal_Delimiter
  2496.                                             & " Closer: " & Next_Char
  2497.                                             , LEM.Based_Literal_Delimiter_Mismatch);
  2498.                                     end if;
  2499.             
  2500.                                     Get_Next_Char; -- after base delimiter
  2501.                                     -- check for and process exponent
  2502.                                     Scan_Exponent;
  2503.             
  2504.                                 when others =>
  2505.                                     -- flag missing second
  2506.                                     -- based_literal delimiter as an error
  2507.                                     LEM.Output_Message(
  2508.                                         Current_Line
  2509.                                         , Current_Column
  2510.                                         , LEM.Missing_Second_Based_Literal_Delimiter);
  2511.                             end case;
  2512.  
  2513.                         when ASCII.SHARP |         -- '#'
  2514.                              ASCII.COLON =>        -- ':'
  2515.                             -- have an integer_literal
  2516.                             Seen_Radix_Point := false;
  2517.                             -- save the base delimiter
  2518.                             Add_Next_Char_To_Source_Rep;
  2519.             
  2520.                             if (Next_Char /= Based_Literal_Delimiter) then
  2521.                             -- flag based_literal delimiter mismatch error
  2522.                                 LEM.Output_Message(
  2523.                                     Current_Line
  2524.                                     , Current_Column
  2525.                                     ,   "Opener: "  & Based_Literal_Delimiter
  2526.                                       & " Closer: " & Next_Char
  2527.                                     , LEM.Based_Literal_Delimiter_Mismatch);
  2528.                             end if;
  2529.             
  2530.                             Get_Next_Char;  -- get character after base delimiter
  2531.                             Scan_Exponent;  -- check for and process exponent
  2532.             
  2533.                         when others =>
  2534.                             -- assume an integer_literal
  2535.                             Seen_Radix_Point := false;
  2536.                             -- flag missing second
  2537.                             -- based_literal delimiter as an error
  2538.                             LEM.Output_Message(
  2539.                                 Current_Line
  2540.                                 , Current_Column
  2541.                                 , LEM.Missing_Second_Based_Literal_Delimiter);
  2542.                     end case;
  2543.  
  2544.                 end if;
  2545.             
  2546.         --we have an integer_literal
  2547.         when others =>
  2548.             Seen_Radix_Point := false;  -- have an integer_literal
  2549.             Scan_Exponent;  -- check for and process exponent
  2550.     end case;
  2551.             
  2552.     -- one last error check
  2553.     if (Next_Char in Upper_Case_Letter) or
  2554.        (Next_Char in Lower_Case_Letter) then
  2555.         -- flag missing space between numeric_literal and
  2556.         -- identifier (including RW) as an error.
  2557.         LEM.Output_Message
  2558.             ( Current_Line
  2559.             , Current_Column
  2560.             , LEM.Space_Must_Separate_Num_And_Ids);
  2561.     end if;
  2562.  
  2563.     -- now store the source representation of the token found.
  2564.     Set_CST_Source_Rep(Work_String(1..Work_String_Length));
  2565.  
  2566.     end Scan_Numeric_Literal;
  2567.  
  2568.     ------------------------------------------------------------------
  2569.     
  2570.     procedure Scan_String_Literal is
  2571.     
  2572.     --| Overview
  2573.     --|
  2574.     --| Note the following LRM Sections:
  2575.     --|     LRM Section 2.6  - String Literals
  2576.     --|     LRM Section 2.6  - Note
  2577.     --|     LRM Section 2.10 - Allowed Replacements of Characters
  2578.     --|
  2579.     
  2580.     String_Delimiter : character := Next_Char;
  2581.     
  2582.     begin
  2583.     
  2584.     Work_String_Length := 0;
  2585.     
  2586.     CST.gram_sym_val := PT.StringTokenValue;
  2587.     
  2588.     -- scan until matching string delimiter or end of line is found
  2589.     Scan_For_String: loop
  2590.         Get_Next_Char;
  2591.     
  2592.         if (Next_Char = String_Delimiter) then
  2593.             Get_Next_Char;
  2594.             if (Next_Char = String_Delimiter) then
  2595.                 -- add one string delimiter to growing string
  2596.                 Add_Next_Char_To_Source_Rep;
  2597.             else     -- string is ended
  2598.                 exit Scan_For_String;
  2599.             end if;
  2600.         elsif (Next_Char in Graphic_Character) then
  2601.             -- add graphic character to growing string
  2602.             Add_Next_Char_To_Source_Rep;
  2603.         elsif (Next_Char in End_Of_Line_Character) then
  2604.             -- string is ended. flag the error.
  2605.             LEM.Output_Message(
  2606.                 Current_Line
  2607.                 , Current_Column
  2608.                 , LEM.No_Ending_String_Delimiter);
  2609.             exit Scan_For_String;
  2610.         else    -- flag non-graphic characters as errors
  2611.             LEM.Output_Message(
  2612.                 Current_Line
  2613.                 , Current_Column
  2614.                 , Integer'Image(Character'Pos(Next_Char))
  2615.                                   -- convert to string
  2616.                 , LEM.Only_Graphic_Characters_In_Strings);
  2617.         end if;
  2618.  
  2619.     end loop Scan_For_String;    -- Next_Char already updated
  2620.  
  2621.     -- now store the source representation found without the
  2622.     -- string delimiters
  2623.     Set_CST_Source_Rep(Work_String(1..Work_String_Length));
  2624.  
  2625.     return;
  2626.  
  2627.     end Scan_String_Literal;
  2628.  
  2629.     ------------------------------------------------------------------
  2630.  
  2631.     function Show_Current_Line
  2632.     return HD.Source_Line is
  2633.  
  2634.     --| Overview
  2635.     --| Return current line number
  2636.  
  2637.     begin
  2638.  
  2639.     return Current_Line;
  2640.  
  2641.     end Show_Current_Line;
  2642.  
  2643.     ------------------------------------------------------------------
  2644.  
  2645.     procedure Write_Line is separate;
  2646.  
  2647.     ------------------------------------------------------------------
  2648. end RQS_Lex;
  2649.  
  2650. ----------------------------------------------------------------------
  2651. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2652. --rqswritel.sub
  2653. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2654. ----------------------------------------------------------------------
  2655.  
  2656. separate (RQS_Lex)
  2657. procedure Write_Line is
  2658.     begin
  2659.     null;
  2660.     end Write_Line;
  2661.  
  2662. ----------------------------------------------------------------------
  2663. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2664. --rqsptbls.bdy
  2665. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2666. --+ PTBLS.BDY +--
  2667.  
  2668. package body RQS_ParseTables is
  2669. ----------------------------------------------------------------------
  2670. -- The rest of the constants used to define the Parse Tables
  2671. ----------------------------------------------------------------------
  2672.  
  2673.     DefaultValue : constant := 1 ; -- default for aggregates.
  2674.     
  2675.     ActionTableOneLength : constant GC.ParserInteger :=
  2676.          8286 ;
  2677.         --| Length (number of entries) in map ActionTableOne.
  2678.     subtype ActionTableOneRange is GC.ParserInteger
  2679.             range 1..ActionTableOneLength;
  2680.     
  2681.     ActionTableTwoLength : constant GC.ParserInteger :=
  2682.          8286 ;
  2683.         --| Length (number of entries) in map ActionTableTwo.
  2684.     subtype ActionTableTwoRange is GC.ParserInteger
  2685.             range 1..ActionTableTwoLength;
  2686.     
  2687.     DefaultMapLength : constant GC.ParserInteger :=
  2688.           942 ;
  2689.         --| Length (number of entries) in map Defaults.
  2690.     subtype DefaultMapRange is GC.ParserInteger range 1..DefaultMapLength;
  2691.     
  2692.     FollowMapLength : constant GC.ParserInteger :=
  2693.           219 ;
  2694.         --| Length (number of entries) in the FollowMap.
  2695.     
  2696.     GrammarSymbolCountPlusOne : constant GC.ParserInteger :=
  2697.           316 ;
  2698.         --| Number of symbols plus one in the parse tables.
  2699.         -- NYU Reference Name: NUM_INPUTS
  2700.     
  2701.     ActionTableSize : constant GC.ParserInteger :=
  2702.          5501 ;
  2703.         --| Maximum entry in Action Tables referenced by hash
  2704.         --| function. Entries above TableSize are collision chains.
  2705.         -- NYU Reference Name: TABLE_SIZE
  2706.     
  2707.     ------------------------------------------------------------------
  2708.     -- Tables generated by Parse Tables Generator
  2709.     ------------------------------------------------------------------
  2710.  
  2711.     subtype GrammarSymbolRepRangePlusZero is
  2712.         GrammarSymbolRepRangePlusZeroCommon;
  2713.  
  2714.     GrammarSymbolTableIndex : constant
  2715.         array (GrammarSymbolRange'first .. GrammarSymbolRange'last * 2)
  2716.         of GC.ParserInteger :=
  2717.          (    1,    0,    1,    5,    6,    8,    9,   14,   15,   20
  2718. ,   21,   23,   24,   26,   27,   31,   32,   33,   34,   38
  2719. ,   39,   42,   43,   46,   47,   54,   55,   61,   62,   66
  2720. ,   67,   71,   72,   77,   78,   79,   80,   83,   84,   88
  2721. ,   89,   91,   92,   96,   97,  105,  106,  109,  110,  112
  2722. ,  113,  120,  121,  127,  128,  131,  132,  133,  134,  135
  2723. ,  136,  137,  138,  144,  145,  148,  149,  151,  152,  154
  2724. ,  155,  157,  158,  161,  162,  163,  164,  165,  166,  171
  2725. ,  172,  174,  175,  181,  182,  187,  188,  194,  195,  203
  2726. ,  204,  208,  209,  213,  214,  219,  220,  222,  223,  229
  2727. ,  230,  235,  236,  242,  243,  248,  249,  256,  257,  263
  2728. ,  264,  267,  268,  276,  277,  280,  281,  284,  285,  287
  2729. ,  288,  291,  292,  296,  297,  300,  301,  303,  304,  313
  2730. ,  314,  328,  329,  342,  343,  359,  360,  360,  361,  361
  2731. ,  362,  362,  363,  363,  364,  364,  365,  365,  366,  366
  2732. ,  367,  367,  368,  368,  369,  369,  370,  370,  371,  371
  2733. ,  372,  372,  373,  373,  374,  374,  375,  377,  378,  379
  2734. ,  380,  381,  382,  383,  384,  385,  386,  387,  388,  389
  2735. ,  390,  391,  392,  393,  394,  395,  396,  397,  398,  412
  2736. ,  413,  416,  417,  420,  421,  431,  432,  461,  462,  467
  2737. ,  468,  485,  486,  502,  503,  520,  521,  536,  537,  555
  2738. ,  556,  577,  578,  596,  597,  612,  613,  631,  632,  652
  2739. ,  653,  673,  674,  693,  694,  708,  709,  726,  727,  740
  2740. ,  741,  768,  769,  778,  779,  791,  792,  812,  813,  839
  2741. ,  840,  863,  864,  878,  879,  904,  905,  933,  934,  960
  2742. ,  961,  983,  984, 1003, 1004, 1024, 1025, 1046, 1047, 1068
  2743. , 1069, 1091, 1092, 1100, 1101, 1110, 1111, 1132, 1133, 1148
  2744. , 1149, 1173, 1174, 1195, 1196, 1212, 1213, 1245, 1246, 1281
  2745. , 1282, 1300, 1301, 1328, 1329, 1346, 1347, 1371, 1372, 1401
  2746. , 1402, 1425, 1426, 1452, 1453, 1468, 1469, 1472, 1473, 1486
  2747. , 1487, 1503, 1504, 1508, 1509, 1522, 1523, 1535, 1536, 1558
  2748. , 1559, 1579, 1580, 1591, 1592, 1607, 1608, 1614, 1615, 1623
  2749. , 1624, 1629, 1630, 1638, 1639, 1662, 1663, 1678, 1679, 1682
  2750. , 1683, 1706, 1707, 1728, 1729, 1749, 1750, 1759, 1760, 1781
  2751. , 1782, 1792, 1793, 1801, 1802, 1816, 1817, 1828, 1829, 1837
  2752. , 1838, 1854, 1855, 1872, 1873, 1881, 1882, 1889, 1890, 1909
  2753. , 1910, 1931, 1932, 1940, 1941, 1974, 1975, 1995, 1996, 2022
  2754. , 2023, 2052, 2053, 2070, 2071, 2099, 2100, 2134, 2135, 2172
  2755. , 2173, 2180, 2181, 2203, 2204, 2225, 2226, 2248, 2249, 2277
  2756. , 2278, 2305, 2306, 2345, 2346, 2352, 2353, 2409, 2410, 2445
  2757. , 2446, 2449, 2450, 2456, 2457, 2490, 2491, 2496, 2497, 2526
  2758. , 2527, 2550, 2551, 2559, 2560, 2579, 2580, 2598, 2599, 2620
  2759. , 2621, 2641, 2642, 2661, 2662, 2684, 2685, 2697, 2698, 2709
  2760. , 2710, 2718, 2719, 2729, 2730, 2751, 2752, 2767, 2768, 2785
  2761. , 2786, 2793, 2794, 2807, 2808, 2827, 2828, 2841, 2842, 2857
  2762. , 2858, 2871, 2872, 2886, 2887, 2901, 2902, 2916, 2917, 2930
  2763. , 2931, 2944, 2945, 2956, 2957, 2970, 2971, 2984, 2985, 2999
  2764. , 3000, 3015, 3016, 3031, 3032, 3036, 3037, 3074, 3075, 3122
  2765. , 3123, 3152, 3153, 3161, 3162, 3173, 3174, 3199, 3200, 3227
  2766. , 3228, 3245, 3246, 3257, 3258, 3271, 3272, 3286, 3287, 3319
  2767. , 3320, 3355, 3356, 3374, 3375, 3398, 3399, 3421, 3422, 3447
  2768. , 3448, 3457, 3458, 3461, 3462, 3483, 3484, 3499, 3500, 3520
  2769. , 3521, 3542, 3543, 3564, 3565, 3580, 3581, 3598, 3599, 3617
  2770. , 3618, 3640, 3641, 3659, 3660, 3690, 3691, 3707, 3708, 3734
  2771. , 3735, 3748, 3749, 3770, 3771, 3786, 3787, 3804, 3805, 3828
  2772. , 3829, 3854, 3855, 3872, 3873, 3889, 3890, 3910, 3911, 3934
  2773. , 3935, 3941, 3942, 3959, 3960, 3972, 3973, 3988, 3989, 4002
  2774. , 4003, 4027, 4028, 4034, 4035, 4059, 4060, 4077, 4078, 4088
  2775. , 4089, 4104, 4105, 4123, 4124, 4140, 4141, 4161, 4162, 4180
  2776. , 4181, 4211, 4212, 4240, 4241, 4263, 4264, 4281, 4282, 4300
  2777. , 4301, 4322, 4323, 4374, 4375, 4398, 4399, 4422, 4423, 4435
  2778. , 4436, 4468, 4469, 4482, 4483, 4510, 4511, 4528, 4529, 4544
  2779. , 4545, 4560, 4561, 4573, 4574, 4586, 4587, 4608, 4609, 4623
  2780.  ) ;
  2781.         
  2782.     GrammarSymbolTable : constant String :=
  2783.          ('A','B','O','R','T','A','B','S','A','C'
  2784. ,'C','E','P','T','A','C','C','E','S','S'
  2785. ,'A','L','L','A','N','D','A','R','R','A'
  2786. ,'Y','A','T','B','E','G','I','N','B','O'
  2787. ,'D','Y','C','A','S','E','C','O','N','S'
  2788. ,'T','A','N','T','D','E','C','L','A','R'
  2789. ,'E','D','E','L','A','Y','D','E','L','T'
  2790. ,'A','D','I','G','I','T','S','D','O','E'
  2791. ,'L','S','E','E','L','S','I','F','E','N'
  2792. ,'D','E','N','T','R','Y','E','X','C','E'
  2793. ,'P','T','I','O','N','E','X','I','T','F'
  2794. ,'O','R','F','U','N','C','T','I','O','N'
  2795. ,'G','E','N','E','R','I','C','G','O','T'
  2796. ,'O','I','F','I','N','I','S','L','I','M'
  2797. ,'I','T','E','D','L','O','O','P','M','O'
  2798. ,'D','N','E','W','N','O','T','N','U','L'
  2799. ,'L','O','F','O','R','O','T','H','E','R'
  2800. ,'S','O','U','T','P','A','C','K','A','G'
  2801. ,'E','P','R','A','G','M','A','P','R','I'
  2802. ,'V','A','T','E','P','R','O','C','E','D'
  2803. ,'U','R','E','R','A','I','S','E','R','A'
  2804. ,'N','G','E','R','E','C','O','R','D','R'
  2805. ,'E','M','R','E','N','A','M','E','S','R'
  2806. ,'E','T','U','R','N','R','E','V','E','R'
  2807. ,'S','E','S','E','L','E','C','T','S','E'
  2808. ,'P','A','R','A','T','E','S','U','B','T'
  2809. ,'Y','P','E','T','A','S','K','T','E','R'
  2810. ,'M','I','N','A','T','E','T','H','E','N'
  2811. ,'T','Y','P','E','U','S','E','W','H','E'
  2812. ,'N','W','H','I','L','E','W','I','T','H'
  2813. ,'X','O','R','i','d','e','n','t','i','f'
  2814. ,'i','e','r','n','u','m','e','r','i','c'
  2815. ,'_','l','i','t','e','r','a','l','s','t'
  2816. ,'r','i','n','g','_','l','i','t','e','r'
  2817. ,'a','l','c','h','a','r','a','c','t','e'
  2818. ,'r','_','l','i','t','e','r','a','l','&'
  2819. ,''','(',')','*','+',',','-','.','/',':'
  2820. ,';','<','=','>',''','|',''','=','>','.'
  2821. ,'.','*','*',':','=','/','=','>','=','<'
  2822. ,'=','<','<','>','>','<','>','c','o','m'
  2823. ,'m','e','n','t','_','l','i','t','e','r'
  2824. ,'a','l','$','E','O','F','$','A','C','C'
  2825. ,'c','o','m','p','i','l','a','t','i','o'
  2826. ,'n','g','e','n','e','r','a','l','_','c'
  2827. ,'o','m','p','o','n','e','n','t','_','a'
  2828. ,'s','s','o','c','i','a','t','i','o','n'
  2829. ,'s','p','r','a','g','m','a','o','b','j'
  2830. ,'e','c','t','_','d','e','c','l','a','r'
  2831. ,'a','t','i','o','n','b','a','s','i','c'
  2832. ,'_','d','e','c','l','a','r','a','t','i'
  2833. ,'o','n','n','u','m','b','e','r','_','d'
  2834. ,'e','c','l','a','r','a','t','i','o','n'
  2835. ,'t','y','p','e','_','d','e','c','l','a'
  2836. ,'r','a','t','i','o','n','s','u','b','t'
  2837. ,'y','p','e','_','d','e','c','l','a','r'
  2838. ,'a','t','i','o','n','s','u','b','p','r'
  2839. ,'o','g','r','a','m','_','d','e','c','l'
  2840. ,'a','r','a','t','i','o','n','p','a','c'
  2841. ,'k','a','g','e','_','d','e','c','l','a'
  2842. ,'r','a','t','i','o','n','t','a','s','k'
  2843. ,'_','d','e','c','l','a','r','a','t','i'
  2844. ,'o','n','g','e','n','e','r','i','c','_'
  2845. ,'d','e','c','l','a','r','a','t','i','o'
  2846. ,'n','e','x','c','e','p','t','i','o','n'
  2847. ,'_','d','e','c','l','a','r','a','t','i'
  2848. ,'o','n','g','e','n','e','r','i','c','_'
  2849. ,'i','n','s','t','a','n','t','i','a','t'
  2850. ,'i','o','n','r','e','n','a','m','i','n'
  2851. ,'g','_','d','e','c','l','a','r','a','t'
  2852. ,'i','o','n','i','d','e','n','t','i','f'
  2853. ,'i','e','r','_','l','i','s','t','s','u'
  2854. ,'b','t','y','p','e','_','i','n','d','i'
  2855. ,'c','a','t','i','o','n','[',':','=','e'
  2856. ,'x','p','r','e','s','s','i','o','n',']'
  2857. ,'c','o','n','s','t','r','a','i','n','e'
  2858. ,'d','_','a','r','r','a','y','_','d','e'
  2859. ,'f','i','n','i','t','i','o','n','e','x'
  2860. ,'p','r','e','s','s','i','o','n','{',','
  2861. ,'i','d','e','n','t','i','f','i','e','r'
  2862. ,'}','f','u','l','l','_','t','y','p','e'
  2863. ,'_','d','e','c','l','a','r','a','t','i'
  2864. ,'o','n','i','n','c','o','m','p','l','e'
  2865. ,'t','e','_','t','y','p','e','_','d','e'
  2866. ,'c','l','a','r','a','t','i','o','n','p'
  2867. ,'r','i','v','a','t','e','_','t','y','p'
  2868. ,'e','_','d','e','c','l','a','r','a','t'
  2869. ,'i','o','n','t','y','p','e','_','d','e'
  2870. ,'f','i','n','i','t','i','o','n','d','i'
  2871. ,'s','c','r','i','m','i','n','a','n','t'
  2872. ,'_','s','p','e','c','i','f','i','c','a'
  2873. ,'t','i','o','n','{',';','d','i','s','c'
  2874. ,'r','i','m','i','n','a','n','t','_','s'
  2875. ,'p','e','c','i','f','i','c','a','t','i'
  2876. ,'o','n','}','e','n','u','m','e','r','a'
  2877. ,'t','i','o','n','_','t','y','p','e','_'
  2878. ,'d','e','f','i','n','i','t','i','o','n'
  2879. ,'i','n','t','e','g','e','r','_','t','y'
  2880. ,'p','e','_','d','e','f','i','n','i','t'
  2881. ,'i','o','n','r','e','a','l','_','t','y'
  2882. ,'p','e','_','d','e','f','i','n','i','t'
  2883. ,'i','o','n','a','r','r','a','y','_','t'
  2884. ,'y','p','e','_','d','e','f','i','n','i'
  2885. ,'t','i','o','n','r','e','c','o','r','d'
  2886. ,'_','t','y','p','e','_','d','e','f','i'
  2887. ,'n','i','t','i','o','n','a','c','c','e'
  2888. ,'s','s','_','t','y','p','e','_','d','e'
  2889. ,'f','i','n','i','t','i','o','n','d','e'
  2890. ,'r','i','v','e','d','_','t','y','p','e'
  2891. ,'_','d','e','f','i','n','i','t','i','o'
  2892. ,'n','t','y','p','e','_','m','a','r','k'
  2893. ,'c','o','n','s','t','r','a','i','n','t'
  2894. ,'t','y','p','e','_','n','a','m','e','|'
  2895. ,'s','u','b','t','y','p','e','_','n','a'
  2896. ,'m','e','r','a','n','g','e','_','c','o'
  2897. ,'n','s','t','r','a','i','n','t','f','l'
  2898. ,'o','a','t','i','n','g','_','p','o','i'
  2899. ,'n','t','_','c','o','n','s','t','r','a'
  2900. ,'i','n','t','f','i','x','e','d','_','p'
  2901. ,'o','i','n','t','_','c','o','n','s','t'
  2902. ,'r','a','i','n','t','s','i','m','p','l'
  2903. ,'e','_','e','x','p','r','e','s','s','i'
  2904. ,'o','n','e','n','u','m','e','r','a','t'
  2905. ,'i','o','n','_','l','i','t','e','r','a'
  2906. ,'l','_','s','p','e','c','i','f','i','c'
  2907. ,'a','t','i','o','n','{',',','e','n','u'
  2908. ,'m','e','r','a','t','i','o','n','_','l'
  2909. ,'i','t','e','r','a','l','_','s','p','e'
  2910. ,'c','i','f','i','c','a','t','i','o','n'
  2911. ,'}','e','n','u','m','e','r','a','t','i'
  2912. ,'o','n','_','l','i','t','e','r','a','l'
  2913. ,'f','l','o','a','t','i','n','g','_','a'
  2914. ,'c','c','u','r','a','c','y','_','d','e'
  2915. ,'f','i','n','i','t','i','o','n','[','r'
  2916. ,'a','n','g','e','_','c','o','n','s','t'
  2917. ,'r','a','i','n','t',']','f','i','x','e'
  2918. ,'d','_','a','c','c','u','r','a','c','y'
  2919. ,'_','d','e','f','i','n','i','t','i','o'
  2920. ,'n','u','n','c','o','n','s','t','r','a'
  2921. ,'i','n','e','d','_','a','r','r','a','y'
  2922. ,'_','d','e','f','i','n','i','t','i','o'
  2923. ,'n','i','n','d','e','x','_','s','u','b'
  2924. ,'t','y','p','e','_','d','e','f','i','n'
  2925. ,'i','t','i','o','n','{',',','i','n','d'
  2926. ,'e','x','_','s','u','b','t','y','p','e'
  2927. ,'_','d','e','f','i','n','i','t','i','o'
  2928. ,'n','}','i','n','d','e','x','_','c','o'
  2929. ,'n','s','t','r','a','i','n','t','n','a'
  2930. ,'m','e','d','i','s','c','r','e','t','e'
  2931. ,'_','r','a','n','g','e','{',',','d','i'
  2932. ,'s','c','r','e','t','e','_','r','a','n'
  2933. ,'g','e','}','r','a','n','g','e','c','o'
  2934. ,'m','p','o','n','e','n','t','_','l','i'
  2935. ,'s','t','{','p','r','a','g','m','a','_'
  2936. ,'d','e','c','l','}','{','c','o','m','p'
  2937. ,'o','n','e','n','t','_','d','e','c','l'
  2938. ,'a','r','a','t','i','o','n','}','c','o'
  2939. ,'m','p','o','n','e','n','t','_','d','e'
  2940. ,'c','l','a','r','a','t','i','o','n','v'
  2941. ,'a','r','i','a','n','t','_','p','a','r'
  2942. ,'t','{','p','r','a','g','m','a','_','v'
  2943. ,'a','r','i','a','n','t','}','v','a','r'
  2944. ,'i','a','n','t','{','v','a','r','i','a'
  2945. ,'n','t','}','c','h','o','i','c','e','{'
  2946. ,'|','c','h','o','i','c','e','}','{','b'
  2947. ,'a','s','i','c','_','d','e','c','l','a'
  2948. ,'r','a','t','i','v','e','_','i','t','e'
  2949. ,'m','}','d','e','c','l','a','r','a','t'
  2950. ,'i','v','e','_','p','a','r','t','b','o'
  2951. ,'d','y','{','l','a','t','e','r','_','d'
  2952. ,'e','c','l','a','r','a','t','i','v','e'
  2953. ,'_','i','t','e','m','}','b','a','s','i'
  2954. ,'c','_','d','e','c','l','a','r','a','t'
  2955. ,'i','v','e','_','i','t','e','m','r','e'
  2956. ,'p','r','e','s','e','n','t','a','t','i'
  2957. ,'o','n','_','c','l','a','u','s','e','u'
  2958. ,'s','e','_','c','l','a','u','s','e','l'
  2959. ,'a','t','e','r','_','d','e','c','l','a'
  2960. ,'r','a','t','i','v','e','_','i','t','e'
  2961. ,'m','p','r','o','p','e','r','_','b','o'
  2962. ,'d','y','b','o','d','y','_','s','t','u'
  2963. ,'b','s','u','b','p','r','o','g','r','a'
  2964. ,'m','_','b','o','d','y','p','a','c','k'
  2965. ,'a','g','e','_','b','o','d','y','t','a'
  2966. ,'s','k','_','b','o','d','y','i','n','d'
  2967. ,'e','x','e','d','_','c','o','m','p','o'
  2968. ,'n','e','n','t','s','e','l','e','c','t'
  2969. ,'e','d','_','c','o','m','p','o','n','e'
  2970. ,'n','t','a','t','t','r','i','b','u','t'
  2971. ,'e','s','e','l','e','c','t','o','r','a'
  2972. ,'t','t','r','i','b','u','t','e','_','d'
  2973. ,'e','s','i','g','n','a','t','o','r','c'
  2974. ,'o','m','p','o','n','e','n','t','_','a'
  2975. ,'s','s','o','c','i','a','t','i','o','n'
  2976. ,'s','a','g','g','r','e','g','a','t','e'
  2977. ,'e','x','p','r','e','s','s','i','o','n'
  2978. ,',','e','x','p','r','e','s','s','i','o'
  2979. ,'n','{',',','e','x','p','r','e','s','s'
  2980. ,'i','o','n','}','[',',','o','t','h','e'
  2981. ,'r','s','=','>','e','x','p','r','e','s'
  2982. ,'s','i','o','n',']','c','h','o','i','c'
  2983. ,'e','{','|','c','h','o','i','c','e','}'
  2984. ,'=','>','e','x','p','r','e','s','s','i'
  2985. ,'o','n','{',',','c','h','o','i','c','e'
  2986. ,'{','|','c','h','o','i','c','e','}','='
  2987. ,'>','e','x','p','r','e','s','s','i','o'
  2988. ,'n','}','o','t','h','e','r','s','=','>'
  2989. ,'e','x','p','r','e','s','s','i','o','n'
  2990. ,'g','a','_','e','x','p','r','e','s','s'
  2991. ,'i','o','n','{',',','g','a','_','e','x'
  2992. ,'p','r','e','s','s','i','o','n','}','i'
  2993. ,'d','e','n','t','i','f','i','e','r','{'
  2994. ,'|','i','d','e','n','t','i','f','i','e'
  2995. ,'r','}','=','>','e','x','p','r','e','s'
  2996. ,'s','i','o','n','{',',','i','d','e','n'
  2997. ,'t','i','f','i','e','r','{','|','i','d'
  2998. ,'e','n','t','i','f','i','e','r','}','='
  2999. ,'>','e','x','p','r','e','s','s','i','o'
  3000. ,'n','}','r','e','l','a','t','i','o','n'
  3001. ,'r','e','l','a','t','i','o','n','{','A'
  3002. ,'N','D','_','_','r','e','l','a','t','i'
  3003. ,'o','n','}','r','e','l','a','t','i','o'
  3004. ,'n','{','O','R','_','_','r','e','l','a'
  3005. ,'t','i','o','n','}','r','e','l','a','t'
  3006. ,'i','o','n','{','X','O','R','_','_','r'
  3007. ,'e','l','a','t','i','o','n','}','r','e'
  3008. ,'l','a','t','i','o','n','{','A','N','D'
  3009. ,'_','_','T','H','E','N','_','_','r','e'
  3010. ,'l','a','t','i','o','n','}','r','e','l'
  3011. ,'a','t','i','o','n','{','O','R','_','_'
  3012. ,'E','L','S','E','_','_','r','e','l','a'
  3013. ,'t','i','o','n','}','[','r','e','l','a'
  3014. ,'t','i','o','n','a','l','_','o','p','e'
  3015. ,'r','a','t','o','r','_','_','s','i','m'
  3016. ,'p','l','e','_','e','x','p','r','e','s'
  3017. ,'s','i','o','n',']','[','N','O','T',']'
  3018. ,'I','N','[','u','n','a','r','y','_','a'
  3019. ,'d','d','i','n','g','_','o','p','e','r'
  3020. ,'a','t','o','r',']','t','e','r','m','{'
  3021. ,'b','i','n','a','r','y','_','a','d','d'
  3022. ,'i','n','g','_','o','p','e','r','a','t'
  3023. ,'o','r','_','_','t','e','r','m','}','f'
  3024. ,'a','c','t','o','r','{','m','u','l','t'
  3025. ,'i','p','l','y','i','n','g','_','o','p'
  3026. ,'e','r','a','t','o','r','_','_','f','a'
  3027. ,'c','t','o','r','}','t','e','r','m','p'
  3028. ,'r','i','m','a','r','y','[','e','x','p'
  3029. ,'o','n','e','n','t','i','a','t','i','n'
  3030. ,'g','_','o','p','e','r','a','t','o','r'
  3031. ,'_','_','p','r','i','m','a','r','y',']'
  3032. ,'f','a','c','t','o','r','h','i','g','h'
  3033. ,'_','p','r','e','c','e','d','e','n','c'
  3034. ,'e','_','u','n','a','r','y','_','o','p'
  3035. ,'e','r','a','t','o','r','p','a','r','e'
  3036. ,'n','t','h','e','s','i','z','e','d','_'
  3037. ,'e','x','p','r','e','s','s','i','o','n'
  3038. ,'a','l','l','o','c','a','t','o','r','q'
  3039. ,'u','a','l','i','f','i','e','d','_','e'
  3040. ,'x','p','r','e','s','s','i','o','n','r'
  3041. ,'e','l','a','t','i','o','n','a','l','_'
  3042. ,'o','p','e','r','a','t','o','r','b','i'
  3043. ,'n','a','r','y','_','a','d','d','i','n'
  3044. ,'g','_','o','p','e','r','a','t','o','r'
  3045. ,'u','n','a','r','y','_','a','d','d','i'
  3046. ,'n','g','_','o','p','e','r','a','t','o'
  3047. ,'r','m','u','l','t','i','p','l','y','i'
  3048. ,'n','g','_','o','p','e','r','a','t','o'
  3049. ,'r','e','x','p','o','n','e','n','t','i'
  3050. ,'a','t','i','n','g','_','o','p','e','r'
  3051. ,'a','t','o','r','e','x','p','a','n','d'
  3052. ,'e','d','_','n','a','m','e','{','p','r'
  3053. ,'a','g','m','a','_','s','t','m','}','s'
  3054. ,'t','a','t','e','m','e','n','t','{','s'
  3055. ,'t','a','t','e','m','e','n','t','}','s'
  3056. ,'e','q','u','e','n','c','e','_','o','f'
  3057. ,'_','s','t','a','t','e','m','e','n','t'
  3058. ,'s','s','i','m','p','l','e','_','s','t'
  3059. ,'a','t','e','m','e','n','t','c','o','m'
  3060. ,'p','o','u','n','d','_','s','t','a','t'
  3061. ,'e','m','e','n','t','{','l','a','b','e'
  3062. ,'l','}','+','n','u','l','l','_','s','t'
  3063. ,'a','t','e','m','e','n','t','a','s','s'
  3064. ,'i','g','n','m','e','n','t','_','s','t'
  3065. ,'a','t','e','m','e','n','t','e','x','i'
  3066. ,'t','_','s','t','a','t','e','m','e','n'
  3067. ,'t','r','e','t','u','r','n','_','s','t'
  3068. ,'a','t','e','m','e','n','t','g','o','t'
  3069. ,'o','_','s','t','a','t','e','m','e','n'
  3070. ,'t','d','e','l','a','y','_','s','t','a'
  3071. ,'t','e','m','e','n','t','a','b','o','r'
  3072. ,'t','_','s','t','a','t','e','m','e','n'
  3073. ,'t','r','a','i','s','e','_','s','t','a'
  3074. ,'t','e','m','e','n','t','c','o','d','e'
  3075. ,'_','s','t','a','t','e','m','e','n','t'
  3076. ,'c','a','l','l','_','s','t','a','t','e'
  3077. ,'m','e','n','t','i','f','_','s','t','a'
  3078. ,'t','e','m','e','n','t','c','a','s','e'
  3079. ,'_','s','t','a','t','e','m','e','n','t'
  3080. ,'l','o','o','p','_','s','t','a','t','e'
  3081. ,'m','e','n','t','b','l','o','c','k','_'
  3082. ,'s','t','a','t','e','m','e','n','t','a'
  3083. ,'c','c','e','p','t','_','s','t','a','t'
  3084. ,'e','m','e','n','t','s','e','l','e','c'
  3085. ,'t','_','s','t','a','t','e','m','e','n'
  3086. ,'t','l','a','b','e','l','c','o','n','d'
  3087. ,'i','t','i','o','n','_','T','H','E','N'
  3088. ,'_','_','s','e','q','u','e','n','c','e'
  3089. ,'_','o','f','_','s','t','a','t','e','m'
  3090. ,'e','n','t','s','{','E','L','S','I','F'
  3091. ,'_','_','c','o','n','d','i','t','i','o'
  3092. ,'n','_','_','T','H','E','N','_','_','s'
  3093. ,'e','q','u','e','n','c','e','_','o','f'
  3094. ,'_','s','t','a','t','e','m','e','n','t'
  3095. ,'s','}','[','E','L','S','E','_','_','s'
  3096. ,'e','q','u','e','n','c','e','_','o','f'
  3097. ,'_','s','t','a','t','e','m','e','n','t'
  3098. ,'s',']','c','o','n','d','i','t','i','o'
  3099. ,'n','{','p','r','a','g','m','a','_','a'
  3100. ,'l','t','}','c','a','s','e','_','s','t'
  3101. ,'a','t','e','m','e','n','t','_','a','l'
  3102. ,'t','e','r','n','a','t','i','v','e','{'
  3103. ,'c','a','s','e','_','s','t','a','t','e'
  3104. ,'m','e','n','t','_','a','l','t','e','r'
  3105. ,'n','a','t','i','v','e','}','[','l','o'
  3106. ,'o','p','_','i','d','e','n','t','i','f'
  3107. ,'i','e','r',':',']','[','i','d','e','n'
  3108. ,'t','i','f','i','e','r',']','i','t','e'
  3109. ,'r','a','t','i','o','n','_','r','u','l'
  3110. ,'e','b','e','g','i','n','_','e','n','d'
  3111. ,'_','b','l','o','c','k','d','e','c','l'
  3112. ,'a','r','a','t','i','v','e','_','p','a'
  3113. ,'r','t','_','_','b','e','g','i','n','_'
  3114. ,'e','n','d','_','b','l','o','c','k','{'
  3115. ,'p','r','a','g','m','a','_','a','l','t'
  3116. ,'}','_','_','e','x','c','e','p','t','i'
  3117. ,'o','n','_','h','a','n','d','l','e','r'
  3118. ,'_','l','i','s','t','[','b','l','o','c'
  3119. ,'k','_','i','d','e','n','t','i','f','i'
  3120. ,'e','r',':',']','s','u','b','p','r','o'
  3121. ,'g','r','a','m','_','s','p','e','c','i'
  3122. ,'f','i','c','a','t','i','o','n','p','a'
  3123. ,'r','a','m','e','t','e','r','_','s','p'
  3124. ,'e','c','i','f','i','c','a','t','i','o'
  3125. ,'n','{',';','p','a','r','a','m','e','t'
  3126. ,'e','r','_','s','p','e','c','i','f','i'
  3127. ,'c','a','t','i','o','n','}','d','e','s'
  3128. ,'i','g','n','a','t','o','r','m','o','d'
  3129. ,'e','g','e','n','e','r','i','c','_','p'
  3130. ,'a','r','a','m','e','t','e','r','_','m'
  3131. ,'o','d','e','[','e','n','d','_','d','e'
  3132. ,'s','i','g','n','a','t','o','r',']','p'
  3133. ,'a','c','k','a','g','e','_','s','p','e'
  3134. ,'c','i','f','i','c','a','t','i','o','n'
  3135. ,'p','a','c','k','a','g','e','_','s','p'
  3136. ,'e','c','_','i','n','d','i','c','a','t'
  3137. ,'o','r','p','a','c','k','a','g','e','_'
  3138. ,'b','o','d','y','_','i','n','d','i','c'
  3139. ,'a','t','o','r','{',',','e','x','p','a'
  3140. ,'n','d','e','d','_','n','a','m','e','}'
  3141. ,'t','a','s','k','_','s','p','e','c','i'
  3142. ,'f','i','c','a','t','i','o','n','{','e'
  3143. ,'n','t','r','y','_','d','e','c','l','a'
  3144. ,'r','a','t','i','o','n','}','{','r','e'
  3145. ,'p','r','e','s','e','n','t','a','t','i'
  3146. ,'o','n','_','c','l','a','u','s','e','}'
  3147. ,'t','a','s','k','_','b','o','d','y','_'
  3148. ,'i','n','d','i','c','a','t','o','r','['
  3149. ,'(','d','i','s','c','r','e','t','e','_'
  3150. ,'r','a','n','g','e',')',']','[','f','o'
  3151. ,'r','m','a','l','_','p','a','r','t',']'
  3152. ,'e','n','t','r','y','_','d','e','c','l'
  3153. ,'a','r','a','t','i','o','n','[','(','e'
  3154. ,'x','p','r','e','s','s','i','o','n',')'
  3155. ,']','[','f','o','r','m','a','l','_','p'
  3156. ,'a','r','t',']','s','e','l','e','c','t'
  3157. ,'i','v','e','_','w','a','i','t','c','o'
  3158. ,'n','d','i','t','i','o','n','a','l','_'
  3159. ,'e','n','t','r','y','_','c','a','l','l'
  3160. ,'t','i','m','e','d','_','e','n','t','r'
  3161. ,'y','_','c','a','l','l','s','e','l','e'
  3162. ,'c','t','_','a','l','t','e','r','n','a'
  3163. ,'t','i','v','e','{','O','R','_','_','s'
  3164. ,'e','l','e','c','t','_','a','l','t','e'
  3165. ,'r','n','a','t','i','v','e','}','s','e'
  3166. ,'l','e','c','t','i','v','e','_','w','a'
  3167. ,'i','t','_','a','l','t','e','r','n','a'
  3168. ,'t','i','v','e','a','c','c','e','p','t'
  3169. ,'_','a','l','t','e','r','n','a','t','i'
  3170. ,'v','e','d','e','l','a','y','_','a','l'
  3171. ,'t','e','r','n','a','t','i','v','e','t'
  3172. ,'e','r','m','i','n','a','t','e','_','a'
  3173. ,'l','t','e','r','n','a','t','i','v','e'
  3174. ,'[','s','e','q','u','e','n','c','e','_'
  3175. ,'o','f','_','s','t','a','t','e','m','e'
  3176. ,'n','t','s',']','{',',','n','a','m','e'
  3177. ,'}','{','c','o','m','p','i','l','a','t'
  3178. ,'i','o','n','_','u','n','i','t','}','p'
  3179. ,'r','a','g','m','a','_','h','e','a','d'
  3180. ,'e','r','c','o','m','p','i','l','a','t'
  3181. ,'i','o','n','_','u','n','i','t','c','o'
  3182. ,'n','t','e','x','t','_','c','l','a','u'
  3183. ,'s','e','l','i','b','r','a','r','y','_'
  3184. ,'o','r','_','s','e','c','o','n','d','a'
  3185. ,'r','y','_','u','n','i','t','s','u','b'
  3186. ,'u','n','i','t','{','w','i','t','h','_'
  3187. ,'c','l','a','u','s','e','{','u','s','e'
  3188. ,'_','c','l','a','u','s','e','}','}','{'
  3189. ,',','u','s','e','d','_','i','d','e','n'
  3190. ,'t','i','f','i','e','r','}','w','i','t'
  3191. ,'h','_','c','l','a','u','s','e','e','x'
  3192. ,'c','e','p','t','i','o','n','_','c','h'
  3193. ,'o','i','c','e','{','|','e','x','c','e'
  3194. ,'p','t','i','o','n','_','c','h','o','i'
  3195. ,'c','e','}','e','x','c','e','p','t','i'
  3196. ,'o','n','_','h','a','n','d','l','e','r'
  3197. ,'g','e','n','e','r','i','c','_','s','p'
  3198. ,'e','c','i','f','i','c','a','t','i','o'
  3199. ,'n','g','e','n','e','r','i','c','_','f'
  3200. ,'o','r','m','a','l','_','p','a','r','t'
  3201. ,'{','g','e','n','e','r','i','c','_','p'
  3202. ,'a','r','a','m','e','t','e','r','_','d'
  3203. ,'e','c','l','a','r','a','t','i','o','n'
  3204. ,'}','g','e','n','e','r','i','c','_','p'
  3205. ,'a','r','a','m','e','t','e','r','_','d'
  3206. ,'e','c','l','a','r','a','t','i','o','n'
  3207. ,'g','e','n','e','r','i','c','_','t','y'
  3208. ,'p','e','_','d','e','f','i','n','i','t'
  3209. ,'i','o','n','[','I','S','_','_','n','a'
  3210. ,'m','e','_','_','o','r','_','_','<','>'
  3211. ,']','g','e','n','e','r','i','c','_','a'
  3212. ,'s','s','o','c','i','a','t','i','o','n'
  3213. ,'{',',','g','e','n','e','r','i','c','_'
  3214. ,'a','s','s','o','c','i','a','t','i','o'
  3215. ,'n','}','[','g','e','n','e','r','i','c'
  3216. ,'_','f','o','r','m','a','l','_','p','a'
  3217. ,'r','a','m','e','t','e','r','=','>',']'
  3218. ,'g','e','n','e','r','i','c','_','a','c'
  3219. ,'t','u','a','l','_','p','a','r','a','m'
  3220. ,'e','t','e','r','g','e','n','e','r','i'
  3221. ,'c','_','f','o','r','m','a','l','_','p'
  3222. ,'a','r','a','m','e','t','e','r','g','e'
  3223. ,'n','e','r','i','c','_','a','c','t','u'
  3224. ,'a','l','_','p','a','r','a','m','e','t'
  3225. ,'e','r','l','e','n','g','t','h','_','c'
  3226. ,'l','a','u','s','e','e','n','u','m','e'
  3227. ,'r','a','t','i','o','n','_','r','e','p'
  3228. ,'r','e','s','e','n','t','a','t','i','o'
  3229. ,'n','_','c','l','a','u','s','e','a','d'
  3230. ,'d','r','e','s','s','_','c','l','a','u'
  3231. ,'s','e','r','e','c','o','r','d','_','r'
  3232. ,'e','p','r','e','s','e','n','t','a','t'
  3233. ,'i','o','n','_','c','l','a','u','s','e'
  3234. ,'{','c','o','m','p','o','n','e','n','t'
  3235. ,'_','c','l','a','u','s','e','}','a','l'
  3236. ,'i','g','n','m','e','n','t','_','c','l'
  3237. ,'a','u','s','e','c','o','m','p','o','n'
  3238. ,'e','n','t','_','c','l','a','u','s','e'
  3239. ,'g','a','_','e','x','p','r','e','s','s'
  3240. ,'i','o','n','{','|','i','d','e','n','t'
  3241. ,'i','f','i','e','r','}','e','x','c','e'
  3242. ,'p','t','i','o','n','_','h','a','n','d'
  3243. ,'l','e','r','_','l','i','s','t','u','s'
  3244. ,'e','_','c','l','a','u','s','e','_','l'
  3245. ,'i','s','t')  ;
  3246.         --| Table of symbols used in the grammar.
  3247.         -- NYU Reference Name: NO_SYM
  3248.     
  3249.     LeftHandSide :
  3250.          constant array (LeftHandSideRange)
  3251.          of GrammarSymbolRange :=
  3252.           (  100,  100,  102,  102,  102,  102,  102,  102,  102,  102
  3253. ,  102,  102,  102,  101,  101,  101,  101,  103,  113,  104
  3254. ,  104,  104,  119,  119,  122,  122,  122,  122,  122,  122
  3255. ,  122,  105,  114,  114,  132,  133,  133,  133,  133,  131
  3256. ,  135,  135,  125,  139,  141,  141,  126,  127,  127,  136
  3257. ,  142,  137,  144,  128,  128,  145,  116,  146,  148,  150
  3258. ,  150,  152,  152,  129,  153,  153,  153,  156,  123,  157
  3259. ,  159,  159,  161,  161,  161,  130,  120,  120,  164,  164
  3260. ,  167,  167,  167,  170,  170,  170,  170,  170,  170,  170
  3261. ,  165,  165,  171,  171,  171,  149,  149,  149,  149,  149
  3262. ,  149,  176,  177,  177,  179,  179,  179,  178,  180,  180
  3263. ,  180,  180,  182,  181,  181,  181,  181,  181,  181,   99
  3264. ,   99,   99,  117,  117,  117,  117,  117,  117,  191,  191
  3265. ,  138,  201,  204,  204,  206,  202,  202,  202,  202,  202
  3266. ,  202,  202,  209,  209,  209,  209,  209,  209,  210,  210
  3267. ,  210,  211,  211,  205,  205,  212,  212,  212,  212,  213
  3268. ,  208,  208,  207,  207,  207,  207,  218,  216,  216,  216
  3269. ,  216,  219,  219,  219,  219,  219,  219,  219,  219,  219
  3270. ,  219,  220,  220,  220,  220,  220,  220,  238,  222,  223
  3271. ,  232,  242,  233,  244,  244,  234,  234,  248,  248,  248
  3272. ,  250,  249,  249,  235,  235,  224,  224,  224,  224,  225
  3273. ,  225,  226,  106,  253,  253,  253,  253,  256,  256,  254
  3274. ,  257,  257,  258,  258,  258,  173,  231,  107,  260,  260
  3275. ,  261,  174,  174,  262,  121,  121,  121,  121,  169,  112
  3276. ,  112,  112,  112,  108,  264,  264,  264,  264,  175,  267
  3277. ,  269,  236,  236,  227,  237,  237,  237,  271,  274,  274
  3278. ,  276,  276,  276,  277,  278,  279,  272,  273,  228,   98
  3279. ,  283,  284,  284,  284,  286,  286,  286,  286,  286,  286
  3280. ,  286,  285,  290,  172,  172,  172,  287,  110,  293,  291
  3281. ,  291,  229,  229,  109,  294,  294,  295,  297,  297,  297
  3282. ,  297,  298,  298,  298,  298,  298,  298,  298,  298,  111
  3283. ,  111,  111,  111,  111,  111,  300,  303,  303,  304,  168
  3284. ,  168,  168,  168,  305,  306,  308,  308,  311,  310,  307
  3285. ,  230,  154,  154,  158,  158,  215,  215,  243,  243,  115
  3286. ,  115,  118,  118,  134,  214,  214,  140,  140,  143,  143
  3287. ,  147,  147,  151,  151,  155,  155,  124,  124,  160,  160
  3288. ,  162,  162,  163,  163,  166,  166,  183,  183,  185,  186
  3289. ,  186,  184,  184,  187,  312,  312,  312,  188,  188,  189
  3290. ,  190,  190,  313,  313,  192,  192,  193,  193,  194,  194
  3291. ,  195,  195,  196,  196,  197,  197,  198,  198,  199,  199
  3292. ,  199,  200,  200,  203,  203,  217,  217,  221,  221,  239
  3293. ,  240,  240,  241,  241,  245,  245,  246,  246,  247,  247
  3294. ,  252,  252,  251,  314,  314,  255,  255,  259,  259,  259
  3295. ,  263,  263,  265,  265,  266,  266,  268,  268,  268,  268
  3296. ,  270,  270,  270,  270,  275,  275,  280,  280,  281,  281
  3297. ,  282,  282,  288,  288,  315,  315,  289,  289,  292,  292
  3298. ,  296,  296,  299,  299,  299,  301,  301,  302,  302,  309
  3299. ,  309)  ;
  3300.         --| Map of the grammar rule number (constant array index) to
  3301.         --| numeric value of left hand side symbol.
  3302.         -- NYU Reference Name: LHS
  3303.  
  3304.     RightHandSide :
  3305.          constant array (RightHandSideRange)
  3306.          of GC.ParserInteger :=
  3307.           (    6,    3,    1,    1,    1,    1,    1,    1,    1,    1
  3308. ,    1,    1,    1,    5,    6,    5,    6,    6,    2,    1
  3309. ,    1,    1,    5,    9,    1,    1,    1,    1,    1,    1
  3310. ,    1,    5,    1,    2,    1,    1,    1,    1,    3,    2
  3311. ,    2,    4,    4,    1,    1,    1,    1,    1,    1,    2
  3312. ,    2,    2,    2,    1,    1,    7,    4,    3,    4,    2
  3313. ,    1,    1,    3,    4,    4,    4,    3,    5,    4,    9
  3314. ,    5,    4,    1,    3,    2,    2,    3,    7,    1,    3
  3315. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3316. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3317. ,    1,    4,    3,    3,    1,    1,    1,    3,    1,    1
  3318. ,    1,    1,    3,    2,    5,    5,    3,    3,    1,    1
  3319. ,    4,    2,    1,    1,    1,    1,    1,    1,    2,    3
  3320. ,    1,    1,    2,    2,    3,    1,    1,    1,    1,    1
  3321. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3322. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3323. ,    3,    3,    2,    5,    4,    4,    3,    1,    1,    2
  3324. ,    2,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3325. ,    1,    1,    1,    1,    1,    1,    1,    3,    2,    4
  3326. ,    7,    1,    9,    5,    4,    7,    8,    2,    4,    5
  3327. ,    2,    3,    5,    5,    4,    2,    4,    3,    5,    2
  3328. ,    3,    3,    2,    2,    6,    4,    8,    1,    1,    4
  3329. ,    1,    2,    1,    2,    3,    5,    2,    2,    4,    6
  3330. ,    3,    5,    4,    4,    6,   10,    5,    9,    4,    6
  3331. ,    6,    5,    4,    2,    2,    3,    7,    8,    4,    4
  3332. ,    4,    4,    8,    3,    1,    1,    1,    7,    5,    2
  3333. ,    1,    1,    1,    2,    2,    3,    9,   10,    4,    1
  3334. ,    2,    5,    2,    2,    1,    1,    1,    1,    1,    1
  3335. ,    1,    1,    4,    4,    6,    6,    5,    4,    5,    1
  3336. ,    1,    2,    3,    2,    2,    2,    2,    5,    5,    9
  3337. ,    4,    3,    2,    2,    2,    2,    1,    1,    1,    6
  3338. ,   10,    6,   10,    5,    9,    1,    1,    1,    1,    1
  3339. ,    1,    1,    1,    5,    5,    8,    9,    5,    4,    6
  3340. ,    4,    0,    2,    0,    2,    0,    2,    0,    2,    0
  3341. ,    2,    0,    3,    1,    1,    3,    0,    3,    0,    1
  3342. ,    0,    3,    0,    3,    0,    3,    0,    3,    0,    2
  3343. ,    0,    3,    1,    3,    1,    3,    3,    3,    4,    0
  3344. ,    3,    0,    2,    3,    1,    3,    2,    1,    3,    4
  3345. ,    0,    3,    0,    3,    3,    3,    3,    3,    3,    3
  3346. ,    4,    4,    4,    4,    0,    2,    1,    2,    1,    2
  3347. ,    3,    1,    3,    0,    2,    1,    3,    1,    2,    3
  3348. ,    0,    5,    0,    2,    0,    2,    0,    2,    0,    1
  3349. ,    0,    2,    2,    1,    2,    0,    3,    0,    1,    1
  3350. ,    0,    3,    1,    3,    0,    3,    0,    4,    3,    7
  3351. ,    0,    4,    3,    7,    0,    3,    1,    1,    0,    3
  3352. ,    1,    2,    0,    3,    1,    3,    0,    3,    0,    3
  3353. ,    0,    2,    0,    2,    2,    0,    3,    1,    3,    1
  3354. ,    3)  ;
  3355.         --| Map of the grammar rule number (constant array index) to
  3356.         --| size of right hand sides (number of symbols).
  3357.         -- NYU Reference Name: RHS
  3358.  
  3359.     ActionTableOne :
  3360.          constant array (ActionTableOneRange)
  3361.          of GC.ParserInteger :=
  3362.           (    0,  401,  644,    0,    0,    0,    0,    0,    0,    0
  3363. ,    0,  468,    0,    0,  469,    0,    0,    0,    0,  159
  3364. ,    0,    0,  515,  516,    0,    0,  102,   39,   40,   41
  3365. ,    0,    0,   42,    0,    0,   43,    0,   44,  517,    0
  3366. ,    0, 6917,    0, 6921,  621,  622,    0,    0,   34,    0
  3367. ,  519,    0,  217,  124, 6923, 6925,  122,    0,    0,  403
  3368. ,  404,  207,  208,  209,  210,  211,  942, 6927,    0,    0
  3369. ,    0,    0,    0,    0,    0,    0,    0,  521,    0,    0
  3370. ,   35,   36,   37,    0,    0,    0, 6929, 6931,   37, 6933
  3371. , 6935,  101,    0,    0,    0,  376, 6937,    0,    0,  262
  3372. ,    0,    0,  127,  217,    0,  580,    0,    0,    0,    0
  3373. , 6939, 6942, 6944,   41,    0,    0, 6946,   39, 6948, 6950
  3374. ,   37,   44, 6954, 6956,    0,   43,    0,   44, 6958,    0
  3375. ,    0,  523,  524,  525,  526, 6960,  528, 6962,   50,   51
  3376. ,    0,  530,  531, 6966,   35,   36, 6970,    0, 6972,   39
  3377. , 6974, 6977, 6981,   37, 6984,    0,    0, 6986,    0,   44
  3378. ,   61,   62,   63,   64,    0,   65,   66,   67, 6988,   69
  3379. ,    0,  409,   70,    0,  102,   39, 6991,   41,    0,    0
  3380. ,   42,  102, 6993, 6996, 7000, 7002,    0,   42,    0,  104
  3381. ,   97,    0,   98,  102,  151,   40,   41,  242,    0,    0
  3382. , 7004,    0,    0,    0,  468,    0,    0,  469,    0,    0
  3383. ,  169,    0,  106,    0,    0, 7006, 7008,   37,    0,    0
  3384. ,    0, 7010, 7013,   51,  677,    0,  654, 7015, 7018,   51
  3385. ,    0,  472, 7020,   52, 7023,   41,  109,    0,  110,    0
  3386. ,    0,  166,   55, 7027, 7029, 7032, 7036, 7040,   41,   65
  3387. , 7044, 7046, 7051, 7053, 7055, 7057, 7059,   67, 7063, 7065
  3388. , 7067,   51,   70,    0,    0, 7069,    0,  421,    0,    0
  3389. ,  475,    0,   99,    0, 7071,   56,   57, 7073,   59, 7075
  3390. ,    0,    0,   61,   62, 7077, 7079, 7083, 7086,   66,   67
  3391. , 7089, 7091, 7093, 7095, 7097,   44,    0, 7099,   52,    0
  3392. ,   55,   56,   57,   58, 7101, 7103,   51,  112,   61, 7106
  3393. ,   63,   64,    0, 7108,   66, 7110, 7113, 7116, 7118,    0
  3394. , 7120,   66,   67,   68,   69,    0,    0,  477,    0, 7123
  3395. ,    0,    0,    0,    0,    0,    0,  329,    0,  576,    0
  3396. ,    0,    0,  805,   49, 7125, 7127,    0,    0,    0,  827
  3397. ,    0,    0,    0,    0,    0,  300,   49, 7129, 7131, 7133
  3398. , 7135,    0,   52,    0,   34,    0,  118,  119, 7137,   85
  3399. ,  167,   55,   56,   57,   58,   59,   60,    0,    0,   61
  3400. ,   62,   63,   64,  788,   65, 7139, 7141, 7143,   69,    0
  3401. ,    0,   70,    0,    0,  680, 7146, 7149, 7152, 7155,    0
  3402. ,    0,   52,    0, 7157,    0,    0,    0,    0,    0,    0
  3403. ,   55,   56,   57,   58, 7160, 7162,    0,    0,   61,   62
  3404. ,   63,   64,    0,   65,   66,   67, 7164, 7166,   40,   41
  3405. ,   70,    0,   42,  899,  629, 7168,    0,   44,    0,    0
  3406. ,    0,    0,    0,  683,  684, 7170,  686,  624,    0,    0
  3407. ,    0,    0,    0,    0,  699,    0,  168,    0,    0,  577
  3408. ,    0,    0,  493,    0,   16,  849,    0,    0,    0,    0
  3409. ,    0,    0,    0,    0,  121,  122,    0,    0,    0,    0
  3410. ,    0,    0,    0,    0,    0,    0,  123,    0,    0,    0
  3411. ,    0,    0,    0,    0,    0,  357,    0,  838,    0,  243
  3412. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3413. ,  151,    0,    0, 7173,    0,    0,    0,    0,    0,    0
  3414. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3415. ,    0,    0,    0,    0,    0,  358,    0,   49, 7175,   51
  3416. ,  655,    0,  776,   52,    0,    0,    0,    0,    0,    0
  3417. ,  744,    0,    0,    0,    0,    0,  761,    0,    0,  762
  3418. ,   61,   62,   63,   64,    0,   65,   66, 7177, 7179,   69
  3419. ,   35,   36, 7181,    0,    0,    0,  612,    0,    0,  454
  3420. ,    0,    0,    0,    0,    0,    0,    0,  217,  316,    0
  3421. ,    0,  912,    0,   96,    0,    0,    0,    0,    4,    5
  3422. , 7183, 7185, 7187, 7189,    8,    0,   42,    0,    0,   43
  3423. ,    0,   44,    0,    0,    0,    0,    0,  807,    0,    0
  3424. ,    0, 7191,  595,    0,    0,    0,    0,    0,    0,    0
  3425. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3426. ,    0,    0,    0,    0,    0,    0,    0,  700,    0,    0
  3427. ,    0,    0, 7193,    0,    0,    0,    0,    0,    0,    0
  3428. ,  920,    0,    0,    0,    0,  301,  808,    0,  701,  605
  3429. ,    0,  302, 7195,  262,    0,  814,    0,    0,  723,    0
  3430. ,   34,  631, 7197,  126, 7199,    0,   73,    0,    0,  127
  3431. ,    0,  702,    0,    0,    0,    0,    0,    9,    0,    0
  3432. ,    0,  378,    0,    0,    0,    0,    0,    0,    0,    0
  3433. ,    0, 7201, 7203, 7205,   37,    0,  777,   52,    0,  921
  3434. ,    0,    0,    0,    0,    0,    0,   55,   56,   57,   58
  3435. ,   59,   60,    0,    0,   61,   62,   63,   64,    0,   65
  3436. ,   66,   67, 7207, 7210,   40,   41,   70,    0,   42,    0
  3437. ,    0, 7212,    0,   44,    0,    0,    0,    0,  687,    0
  3438. ,    0,  578,    0,  625,    0,    0,    0,    0,    0,  407
  3439. ,    0,    0,    0,  335,  913,    0,    0,    0,    0,    0
  3440. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3441. ,    0,    0,    0, 7214,    0,    0,    0,    0,    0,    0
  3442. ,    0,    0,    0,    0,    0,    0,    0,    0,    0, 1365
  3443. ,    0,  359,    0, 1365,    0, 7216,    0,    0,    0,  778
  3444. ,    0,    0,    0,    0, 1361,    0,  151,    0,    0,  488
  3445. ,    0,    0, 1361,    0,    0,    0,    0,    0,    0,    0
  3446. , 7218,    0,  409,    0,    0,    0,    0,   35, 7221,   37
  3447. ,  410,    0, 1364, 7223,   50,   51, 7226,    0,    0,   52
  3448. ,    0, 7228,  412, 1360,    0,    0, 7230, 7232,    0,    0
  3449. ,    0, 1360,  761,    0,    0, 7234,   61, 7237, 7239, 7242
  3450. ,   41, 7244,   66, 7246, 7248,   69,   43,    0, 7251,  417
  3451. ,    0,  418,    0,  664,    0,    0,    0,    0,    0,   35
  3452. , 7253,   37,    0,  419,    0,   40,   41,    0,    0,    0
  3453. ,    0,  839,   34,    0,    0,    0,  132,    0,    0,    0
  3454. ,    0,    0,    0,    0,    0,    0,    0,    0,    0, 7255
  3455. , 7257,   40, 7259,    0,    0,   42,    0,  764,  421,    0
  3456. ,    0,  133,    0,    0,   35,   36,   37,    0,    0,    0
  3457. ,  262,    0,    0,    0,    0,    0,  922,    0,    0,    0
  3458. ,    0,  151,    0,    0,    0,    0,    0,    0,    0,    0
  3459. ,    0,    0,    0,    0,  102,   39,   40,   41,    0,    0
  3460. ,   42,    0,    0,   43,    0,   44,    0, 7261, 7263, 7265
  3461. ,   51,    0,  172,   13, 7267,    0,    0,    0,    0,  665
  3462. ,  220,    0,    0,   55,   56,   57,   58,   59,   60, 7269
  3463. ,  246, 7271, 7273, 7275, 7278,   50, 7280, 7282,   67,   68
  3464. ,   69,    0,  175, 7284,    0,    0,  177,  178,    0,  536
  3465. ,  308,    0,  159,  316,  537,    0, 7286,    0,    0,    0
  3466. , 7288,   50, 7291,    0,  943, 1039,   52,  262,    0,    0
  3467. ,    0,    0,    0, 1039,  423, 1039,    0,  424, 7293,  426
  3468. , 7296,  428,  429,  430, 7298, 7301, 7304,  434, 7306, 7309
  3469. , 7313, 7317, 7320, 7323, 7325, 7327, 7330, 7334, 7336, 7338
  3470. , 7342, 1039, 1039, 1039, 7344,   49, 7346, 7348, 7351, 1039
  3471. , 7353, 7355, 1039, 1039,    0, 1039, 1039, 1039,    0,    0
  3472. ,  349,    0,    0,    0,    0,   34,    0,    0,   61, 7357
  3473. , 7359, 7361,  613,   65, 7363, 7366, 7368,   69,    0,    0
  3474. ,   70,    0,   96,    0,    0,    0,    0,    0,    0,    0
  3475. ,  283,    0,  169,    0,  195,  196,  197,   35,   36,   37
  3476. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3477. ,  815,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3478. ,    0,    0,    0,    0,    0,    0,    0,  747,   39,   40
  3479. , 7370,  361,  851, 7372,    0, 7374,   43,  450,   44,    0
  3480. ,    0,    0,    0,    0,    0,    0,    0,    0,  761,  699
  3481. ,    0,  762,    0,    0,    0,    0,    0,  235,  666, 7376
  3482. ,  134,    0,   35,   36,   37,    0,    0,  101,  688,  409
  3483. ,    0,    0,  726,    0,    0,  278,    0,    0,    0,  748
  3484. , 7378,    0,    0,    0,    0,    0,    0,   25,   26,    0
  3485. ,    0,  199,  102,   39,   40,   41,    0,    0,   42,    0
  3486. ,  262,   43,    0,   44,    0,    0,    0,    0,  902,    0
  3487. ,    0,  151,    0,  765,    0,    0,    0,    0,    0,    0
  3488. ,    0,   30, 7380,  306,    0,    0,  511,    0,   98,    0
  3489. ,    0,  657,  200,  201,  202, 7382,    0,    0,   49,   50
  3490. ,   51,    0,    0,  462, 7384,    0,    0,    0,    0,  225
  3491. , 7386, 1396,  463, 7388,   56, 7390,   58,   59,   60,    0
  3492. ,    0,   61,   62, 7392,   64,  104, 7395, 7398,   67, 7400
  3493. ,   69,  710,   34,   70,  380,    0,  105,    0, 1396, 7403
  3494. ,    0,    0,    0,    0,    0,    0,    0, 1396, 7405,    0
  3495. ,    0,    0,    0,  816,    0,    0,    0,    0,    0,    0
  3496. ,    0,  538,    0,   49, 7407, 7410,   37,    0,  277, 7412
  3497. , 7414, 7416, 7418,    0,  333,    0,  749,    0,   55,   56
  3498. , 7420,   58,   59,   60,    0,    0,   61,   62,   63,   64
  3499. ,    0,   65,   66,   67, 7422, 7424, 7426, 7430, 7432,    0
  3500. ,   42,    0,   35, 7434,   37,   44,    0,    0,    0,    0
  3501. ,    0,    0,    0,    0,    0,    0,    0,    0,  579,  126
  3502. ,    0,    0,   34,    0,    0,  127,  102,   39, 7436,   41
  3503. ,    0,  154, 7439,   39,   40, 7441,  581,   44, 7443,    0
  3504. ,    0,   43,    0,   44,    0,    0,   46,    0,    0,    0
  3505. ,    0,  155,  680,    0,   35,   36, 7445,    0,    0,    0
  3506. ,    0,  682,  362,    0,    0,    0,    0, 7447,  246,    0
  3507. ,   83,  156,  304,    0,    0,    0,    0,    0,   48, 7449
  3508. ,  167,    0,    0,    0,  495,   39,  496,   41,    0,    0
  3509. ,   42,    0,    0,   43,  711,   44,    0,    0,  247,  455
  3510. ,    0,  865,  684,  685,  686, 7451, 7453,   51,  314,    0
  3511. ,  105,   52,    0,    0,    0,    0, 7455,   53, 7457,    0
  3512. ,   55,   56, 7459,   58,   59,   60,    0,    0,   61,   62
  3513. ,   63,   64,    0,   65, 7462,   67, 7464, 7466, 7469, 7471
  3514. , 7473,    0,    0, 7476,   50,   51,    0,    0,    0,   52
  3515. ,    0,    0,    0,    0,    0,    0,    0, 7478,    0,    0
  3516. ,   61,   62,   63,   64,    0,   65, 7481, 7484, 7487, 7493
  3517. , 7497, 7499, 7501,   67, 7504,   69,    0,   43, 7506,   44
  3518. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  464
  3519. ,    0,    0,    0,    0,    0,   49,   50,   51,    0,    0
  3520. ,  923,   52,    0,    0,    0,    0,    0,    0,  467,    0
  3521. ,   55,   56,   57,   58, 7508, 7510,    0,    0,   61,   62
  3522. ,   63,   64,    0,   65,   66,   67,   68,   69,    0,    0
  3523. ,   70,  249,    0,  689,    0,    0,    0,    0,    0,    0
  3524. ,    0, 7512,    0,    0, 7514,    0,    0,   35,   36,   37
  3525. ,    0,  253,  151,    0,    0,    0,    0,    0,    0,    0
  3526. ,  668,    0,    0,    0,  828,    0,    0,    0,    0,    0
  3527. ,    0, 7516,    0,    0,    0,    0,    0,  102,   39, 7518
  3528. , 7520,   51,    0,   42,  381,   52,   43,  607,   44,    0
  3529. ,    0,    0,    0,    0,  540,    0,    0,    0,    0,    0
  3530. ,    0,    0,   61,   62,   63,   64,    0,   65,   66,   67
  3531. , 7524,   69, 7526, 7528, 7530,    0,    0,    0,    0,  498
  3532. ,  541,  499, 7532,  501,    0,    0,    0,    0,    0,    0
  3533. ,    0, 7534,    0,    0,  285,  640,    0,    0, 7536,    0
  3534. ,   98,    0,  102,   39,   40,   41,    0,    0,   42,    0
  3535. ,  241,   43,    0,   44,    0,    0,  316,    0,    0,  866
  3536. ,    0,  650,  829,    0,  652,    0,    0,    0,    0,    0
  3537. ,    0,    0,    0,    0,    0,  157,    0,    0,    0,  158
  3538. ,    0,  159,    0,    0,    0,    0,    0,  933,   49, 7538
  3539. ,   51,    0,    0,    0, 7541,  467,    0,  340,    0,    0
  3540. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  852
  3541. ,    0, 7543,   62, 7545,   64,  262,   65,   66,   67,   68
  3542. , 7547,  817,    0,   70,  257,    0,  151,    0,    0,  160
  3543. ,    0,    0,    0,  903,    0,    0,    0,    0,    0,    0
  3544. ,    0,    0,    0,    0,    0,  614,    0,  316,    0,    0
  3545. ,  317,    0,    0,   49,   50,   51,  376,  126,    0,   52
  3546. ,    0,    0,    0,  127,    0,    0,    0,    0,   55,   56
  3547. ,   57,   58,   59, 7549,    0,    0,   61,   62,   63, 7551
  3548. ,  363, 7554, 7556,   67,   68,   69,    0,    0,   70,    0
  3549. ,    0,    0,    0,    0,    0,    0,    0,  713,    0,   34
  3550. ,  714,    0,    0,    0,    0,    0,  596,    0,    0,  136
  3551. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3552. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,   96
  3553. ,  124,   35,   36,   37,    0,    0,    0,    0,    0,  703
  3554. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3555. ,    0,    0,    0,  125,  126,    0,    0,    0,    0,    0
  3556. ,  127, 7558, 7560,   40,   41,    0,  382,   42,    0,    0
  3557. ,   43,    0, 7562,    0,    0,    0,    0,    0,    0,    0
  3558. ,  217,    0,    0,  515,  516,    0,    0,    0,    0,    0
  3559. ,    0,  468,    0,    0,  469,    0,  465,  752,   98,    0
  3560. ,    0,    0, 7564,  516,    0,    0,    0,    0,  791,    0
  3561. ,    0,    0,    0, 7566,  124,    0,    0,    0, 7569,    0
  3562. ,    0,  518,    0,    0,    0,    0,    0,    0,    0,    0
  3563. ,  854,    0,    0,  124, 7571,    0,    0,    0,  548,    0
  3564. ,    0,    0,    0,    0,    0,  151,    0,    0,    0,    0
  3565. ,    0,    0,    0,    0,  286,    0,    0,  521,    0,    0
  3566. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  376
  3567. ,  126,    0, 7573,   50,   51,    0,  127,    0, 7575,    0
  3568. ,    0,    0,    0,    0,    0,    0,   34,   55,   56,   57
  3569. ,   58, 7577,   60,    0,    0,   61,   62, 7579,   64,    0
  3570. , 7581,   66, 7583, 7586, 7588,  659,    0,   70, 7590,  533
  3571. ,    0, 7592,  524,  525,  526,  527, 7594,  529,   35,   36
  3572. ,   37,  530,  531,  532,    0,    0,    0,  308,  533,    0
  3573. ,  534,  479,    0,    0,   80,    0,    0,    0,  669,    0
  3574. ,    0,    0,    0,    0,   34,    0,    0,    0,  102,   39
  3575. ,   40,   41,    0,    0,   42,    0,    0, 7596,    0,   44
  3576. ,    0,    0,  888,    0,    0,    0,    0,    0,  137,    0
  3577. ,  238,    0,    0,    0,    0,    0,   35, 7598,   37,  878
  3578. ,    0,    0,    0,   81,    0,    0,    0,    0,  411,  558
  3579. ,    0,    0,  221,    0,    0, 7600,    0,    0,    0,    0
  3580. , 7602,    0,    0,  714,    0,    0,  102,   39,   40,   41
  3581. ,    0,    0,   42,    0,    0,   43,  169,   44,    0,  335
  3582. ,  336,  262,    0,    0,    0,    0,    0,    0,    0,    0
  3583. ,  677,    0,  151,    0,  678,    0,    0,    0,    0,    0
  3584. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3585. ,   83,    0,    0,    0,    0,    0,    0,    0, 7604, 7606
  3586. , 7609,   51,  169,    0,    0, 7611,    0,    0,    0,    0
  3587. ,    0,    0,  316,  421, 7613, 7615,   57, 7617,   59, 7619
  3588. ,   34,    0, 7621,   62,   63,   64,   17,   65,   66,   67
  3589. , 7623,   69,    0,   34,   70,    0,    0,    0,    0,    0
  3590. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3591. ,    0,    0,   35,   36,   37,    0,  889,   49,   50, 7625
  3592. ,    0,    0,  384,   52,    0,   35, 7627,   37,    0,    0
  3593. ,  101,  385,   55,   56,   57, 7629,   59,   60,   18,   19
  3594. ,   61, 7631, 7633, 7636,   40, 7639, 7641,   67, 7643,   69
  3595. ,  735,   43,   70, 7645,    0,  102,   39,   40,   41,    0
  3596. ,    0,   42,    0,    0,   43,    0,   44,    0,    0,    0
  3597. ,   34,    0,    0,    0,    0,    0,   34,    0,    0,  163
  3598. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3599. ,    0,    0,    0,    0,   46,    0,    0,    0,    0,    0
  3600. , 7647,    0, 7649,   36, 7651,   22, 7653,  103, 7655, 7658
  3601. ,   37,    0,    0,    0,    0,   47,    0,    0,    0, 1039
  3602. ,    0,    0,    0,    0,    0,    0,   48,    0,  104,    0
  3603. ,    0,    0,   38,   39, 7661,   41,    0,  513, 7663, 7665
  3604. , 7667, 7669, 7671,   44,   42, 7673, 1039,   43, 7675, 7677
  3605. ,  684, 7679,  686,   49,   50,   51,    0,    0,    0,   52
  3606. ,    0, 1039,    0,    0,    0,    0, 7682, 7687, 7690, 7693
  3607. ,   57, 7695, 7697, 7699,    0,  109, 7702, 7704,   63,   64
  3608. ,    0, 7706, 7709, 7712, 7715, 7720, 7724, 1039, 7726, 7728
  3609. , 7730,   63, 7735, 7738, 7741, 7744, 7747, 7749, 7752, 7755
  3610. ,   36, 7760, 7763, 7765,    0, 7767,    0,   44,    0,  935
  3611. ,    0,  262,    0,    0,    0,    0, 7769,   49, 7771, 7773
  3612. ,    0,    0,  151,    0,    0,    0,   30,   31,    0,  102
  3613. ,   39,   40,   41,    0,    0,   42,    0,  716,    0,    0
  3614. ,    0,    0,    0,   49,   50,   51,    0,    0,  628, 7775
  3615. ,   50,   51,    0,    0,    0, 7777,   54,    0,   55,   56
  3616. ,   57,   58,   59,   60,   55,   56, 7779, 7781, 7783, 7786
  3617. ,    0,   65, 7789, 7791, 7793, 7796,  467,   65, 7798,   67
  3618. , 7800,   69,    0,    0,   70,    0,    0,    0,    0, 7802
  3619. ,    0,    0,  755,    0,  364,  178,    0,    0,    0,    0
  3620. ,    0,   49,   50,   51,    0,  225,    0,   49, 7805,   51
  3621. ,    0,   32,  766, 7807,  408,  819,  409,    0,    0,    0
  3622. ,    0,    0, 1364,    0,  410,    0, 7809,  411,    0,    0
  3623. ,   61,   62,   63,   64,    0,   65, 7811, 7813,   68,   69
  3624. , 7815, 7818, 7820,    0,  225, 1360,   52,    0,    0,  415
  3625. ,    0,    0,  793,    0,    0,    0,    0,    0,  416,    0
  3626. ,   34,    0,    0,  417,    0,  418,   64,    0, 7824, 7826
  3627. ,   67,   68,   69,    0, 1360,    0,    0,  419,    0, 7828
  3628. ,   41,    0,    0,    0,  936,    0,    0,    0,    0,    0
  3629. ,    0,  316,   35,   36, 7830,    0,  102,    0,   40, 7832
  3630. ,    0,    0,    0,    0, 7834,   34,    0,    0,    0,  890
  3631. , 7836,    0,    0,    0,    0,    0,    0,  408,    0,  409
  3632. ,    0,    0,   38, 7838, 7840, 7842,    0,  410, 7844, 1364
  3633. ,  411,   43,    0,   44, 1110, 7846, 1110,   35, 7849, 7851
  3634. , 1360,    0,    0,  413,  414,    0,    0,    0, 1360,    0
  3635. ,    0,    0, 7853,    0, 1110,    0,  661,    0, 1041,    0
  3636. ,    0, 7855, 1041,    0, 1041,    0,  417, 7857, 7859,   40
  3637. , 7861,    0,    0,   42,   46,    0, 7863, 7865,   44,    0
  3638. , 7867,    0,   40,   41,    0,    0,    0,    0,   49,   50
  3639. , 7869,    0, 1041,    0,    0,   47,    0, 1041, 1041, 1041
  3640. , 1041, 1041, 7871, 7873, 7875, 1041, 7877, 7880,   50, 7883
  3641. , 1041, 1041,    0, 1261,  767, 1041,    0, 7885, 1041, 7887
  3642. ,  469,    0,  937,    0,  587,    0,    0,    0, 7889,  471
  3643. ,  386,  584, 7891, 7894, 7896, 7899,  429,  430, 7902, 7905
  3644. , 7907, 7909,  435, 7911, 7913, 7915, 7917, 7919, 7921, 7923
  3645. , 7925, 7927,   59, 7929,    0,    0, 7931,   62, 7933, 7936
  3646. ,   35, 7938, 7941,   67, 7944,   69,    0,  140,   70,  141
  3647. ,    0,    0,  925,    0,    0,    0,    0,    0,   49,   50
  3648. ,   51,    0,    0, 7947, 7949,  448,  515,  516,    0,   83
  3649. ,  102, 7953, 7956, 7958,   56,   57, 7961,   59, 7965,   43
  3650. ,    0, 7967,   62,   63,   64,  104, 7969, 7971,   67,   68
  3651. ,   69,    0,   34,   70,    0,    0,  105,  124,    0,    0
  3652. ,  547,  225,    0,    0, 7973,    0,    0,    0, 7975,    0
  3653. ,    0,  691,    0,    0,  424,  425,  426, 7977,  428,  429
  3654. , 7980, 7982, 7984, 7987, 7989, 7994, 7998,  437, 8000, 8002
  3655. ,  440, 8004, 8006,  443,  339,    0,    0,  479,   55,   56
  3656. ,   57, 8008,   59, 8010,    0,   98,   61, 8013, 8016, 8018
  3657. ,   36, 8021, 8023,   67, 8025, 8028, 8030, 8033, 8035,    0
  3658. ,   42,  101,    0,   43,    0,   44,  446,  447,  448,   34
  3659. ,    0,    0,    0,    0,    0,    0,    0,  390,    0, 8037
  3660. ,   39, 8039, 8041, 8043,    0, 8046, 8048, 8050, 8053,   41
  3661. ,   44,    0, 8056,    0,  534, 8058,  350, 8060,    0,    0
  3662. ,    0,   35,   36,   37,   61,   62,   63,   64,    0,   65
  3663. ,   66,   67, 8062,   69,    0,    0,   70,    0,   89,    0
  3664. ,    0,    0,    0,    0,    0, 8064,    0, 8066,    0,    0
  3665. ,    0,  495,   39,  496, 8069,    0,    0, 8071,  151,    0
  3666. , 8073,    0,   44,    0,  880,    0,    0,    0,  367,    0
  3667. ,  505,    0,  241,    0,    0,    0,    0,    0,    0,  455
  3668. ,    0,    0,    0,  650,  856,   49, 8075,   51,    0,    0
  3669. ,  105,   52,   35,   36,   37,    0,    0,  277,    0,    0
  3670. ,  263,    0,  106,  497,    0,    0,    0,  892,   61,   62
  3671. , 8077, 8080,   51, 8083,   66, 8085, 8087, 8089,   50,   51
  3672. ,   70,  905,  102, 8091, 8095, 8098,  459,    0, 8100,  591
  3673. ,    0,   43,    0, 8102,   62, 8104,   64,    0,   65,   66
  3674. , 8106, 8108, 8110, 8112,   34, 8114, 8116, 8118,   68,   69
  3675. ,    0,    0,   70,  127,    0,    0,   35,   36, 8120,    0
  3676. ,    0,    0,   49,   50,   51,    0,    0,    0,   52,    0
  3677. ,  170,    0,    0,    0,  561,    0,   35, 8122, 8124,   57
  3678. ,   58, 8126, 8130,  368,  631, 8132, 8134, 8137, 8141,   41
  3679. ,   65,   66, 8144, 8146, 8148, 8150,    0, 8152,    0,    0
  3680. ,    0,    0,    0,    0,    0,   83, 8154,   39,   40,   41
  3681. ,    0,  734,   42,    0,   85, 8156,    0,   44,    0,    0
  3682. ,    0,   34,    0,    0,    0,    0,    0,  737,   34,    0
  3683. ,    0,    0,    0,   49, 8158,   51,    0,    0,  223,   52
  3684. ,    0,  481,  169,    0,  264,    0,    0,    0,   55,   56
  3685. ,   57, 8160, 8162, 8164, 8168, 8170, 8172, 8174,   63, 8176
  3686. ,   35, 8178, 8180, 8182,   68, 8185, 8187,   36, 8189,    0
  3687. ,  650,  869,    0,  652,   27,    0,    0,    0,    0, 8191
  3688. ,    0,    0,    0, 8193,   39, 8195, 8197,    0,  499, 8199
  3689. , 8201,   39, 8204, 8206,   44,    0, 8208, 8210, 8212, 8214
  3690. ,    0, 8218,   42,   52,    0,   43,    0,   44,    0,    0
  3691. ,  111,    0,    0,    0,    0,    0,    0,   49,   50,   51
  3692. , 8220, 8222,   63, 8225,    0,   65,   66, 8227,   68,   69
  3693. ,    0, 8229, 8231,    0,  795,    0,    0,    0,    0,    0
  3694. ,   61,   62,   63,   64,    0,   65,   66,   67,   68,   69
  3695. ,    0,    0,   70,    0,    0,    0, 8234,    0,    0,    0
  3696. ,    0,    0,  247,  262, 8236,    0,    0,  706,  651,  632
  3697. ,  652,    0,    0,    0,  151,    0,   34,    0,    0,    0
  3698. , 8238,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3699. ,    0,    0,    0,    0, 8240,   50,   51,  893,    0,  370
  3700. ,   52,   49,   50,   51,    0,  225,    0, 8242, 8244, 8247
  3701. ,   37,    0,    0,   52,    0,    0,  265,   61,   62,   63
  3702. ,   64,    0,   65,   66, 8249, 8251, 8253,   64,    0, 8255
  3703. , 8257, 8259, 8261, 8263,    0,   65, 8265,   67, 8267, 8270
  3704. ,   40,   41,   70,    0, 8272,    0,  467, 8274,  169, 8276
  3705. ,   83,    0,    0,    0,    0,    0,    0,    0,  453,   85
  3706. ,  167,    0,    0,    0,    0,  124,    0,    0,    0,    0
  3707. ,    0,    0,    0,    0,  340,    0,    0, 8278,   39,   40
  3708. ,   41,    0,    0,   42,    0,    0,    0,    0,    0,    0
  3709. ,    0,    0,    0,    0,    0,  249,    0,    0,    0,   34
  3710. ,    0,    0,    0,    0,    0,  170,    0,    0,    0,  102
  3711. ,    0, 8280,   41,    0,    0,    0,    0,    0,    0,    0
  3712. ,    0,    0,  151,    0,    0,    0,    0,    0,    0,    0
  3713. ,    0, 8282, 8284, 8286,    0,    0,  821,    0,  483,    0
  3714. ,    0,    0,    0,  738,   34,    0,  168,    0,    0,   49
  3715. , 8288,   51,    0,  645,    0,   52,    0,    0,    0,  320
  3716. ,    0, 8291,   39, 8294,   41,    0,    0,   42,  609,    0
  3717. ,   43,    0, 8296,   62,   63, 8298, 8300, 8302, 8304,   67
  3718. ,   68,   69,   35, 8306, 8308,  225,    0,    0,   49,   50
  3719. ,   51,    0,    0,  484,   52,   45,    0,    0,    0,    0
  3720. ,    0,  769,    0,    0,    0,    0,  102,   39, 8310, 8312
  3721. ,   37,    0, 8314, 8316, 8319, 8321,    0,   44, 8323,   68
  3722. , 8325, 8327,   51,   44,    0,    0,  844,    0,    0,    0
  3723. ,    0,    0,    0,  917, 8329,    0,    0,  857,  102,   39
  3724. ,   40,   41,    0,    0, 8331,   48,    0,   43,  637,   44
  3725. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3726. ,    0,  615,    0,    0,  290,    0, 8333,   36,   37,  755
  3727. ,  756,    0,   49,   50,   51,    0,    0,    0,   52,  262
  3728. ,    0,    0,    0,    0,   53, 8335,    0,   55,   56,   57
  3729. , 8337,   59,   60,    0,    0,   61, 8339, 8342, 8344,   41
  3730. ,   65,   66, 8347,   68,   69,   43,    0, 8349,    0,    0
  3731. ,    0,  460,    0,    0,    0,    0,  673,   49,   50,   51
  3732. ,    0,    0, 8351, 8353,   50,   51,    0,    0,    0,   52
  3733. ,   35,   36, 8355,    0,    0,    0,    0,    0,    0,    0
  3734. ,   61,   62, 8357,   64,    0,   65, 8359, 8361, 8363, 8365
  3735. , 8368, 8370, 8372,   67, 8374, 8376,    0,    0,   70,    0
  3736. ,  747,   39,   40,   41,  938,  639,   42,    0,    0, 8378
  3737. ,    0,   44,   61,   62,   63,   64,    0,   65,   66,   67
  3738. , 8381, 8383,    0,    0,   70,    0,  102,    0,   40,   41
  3739. ,    0,    0,    0,    0,    0,    0,  488,    0,  125,  126
  3740. ,    0,    0,    0,    0,    0,  127,    0,   49, 8385,   51
  3741. ,    0,    0,    0,   52,    0,    0,    0,    0,  217,    0
  3742. ,    0,    0,    0,  783,    0,    0,  797,    0,  148,    0
  3743. ,   61,   62,   63, 8388,    0,   65,   66,   67,   68,   69
  3744. , 8390,    0,   70,    0,  650,  845,    0,  652,    0,  555
  3745. ,  674,    0,    0,    0,    0,    0,    0,    0,  292,  739
  3746. ,   34,    0,    0,    0,    0,    0,    0,    0,    0, 8392
  3747. ,  720,   49,   50,   51,    0,    0,  225, 8394,    0,    0
  3748. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3749. ,    0,  757, 8396,   36, 8398,   62, 8400, 8402, 8404, 8406
  3750. , 8409,   67,   68, 8411,    0,    0, 8413,  634,    0,    0
  3751. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  321
  3752. ,    0,    0,  102,   39, 8415, 8418,   37,    0,   42,  610
  3753. ,    0,   43,    0,   44,    0,    0,    0,    0,    0,    0
  3754. ,    0,    0,    0,    0,  149,    0,    0,    0,    0,  846
  3755. ,    0, 8420,  115,  116, 8422, 8425, 8427, 8429,    0,  118
  3756. , 8431,  120,  467, 8433,    0, 8435,    0, 1364,  411,    0
  3757. ,    0,  882, 1390,    0, 1390,    0,    0,  412, 1360,    0
  3758. , 8437,  413,  414,    0,  310,    0, 1360,    0,    0,   34
  3759. ,  415,    0, 1390,    0,    0,  262,  169,    0,    0,  416
  3760. ,  870,    0,    0,    0,  417,    0, 8439,   49, 8441,   51
  3761. ,    0,  335, 8443,    0,    0, 1360,    0,    0,  419,    0
  3762. ,   40, 8445, 8447,   37,    0,    0,    0,  461,    0,    0
  3763. ,    0,    0,  721,   49,   50,   51,    0,    0, 8449,   52
  3764. ,    0,    0,    0,    0,  692,  420,    0,    0,  267, 8451
  3765. ,    0,  102, 8453, 8455,   41,  784,   61, 8457,   63,   64
  3766. ,   43,   65, 8459, 8461,   68, 8463,   50, 8465, 8467,    0
  3767. ,   96,   52,    0,    0,    0,    0,    0,  616,    0, 8469
  3768. ,    0,    0,    0,    0,    0,    0,  488,    0,   61,   62
  3769. ,   63, 8471,    0,   65,   66,   67,   68,   69,    0,    0
  3770. ,   70,    0, 8473,    0,    0,    0,    0,    0,    0,    0
  3771. ,    0,    0,    0,  908,    0,    0,  833,    0,    0,    0
  3772. ,    0,    0,    0,    0,  240,    0,    0,    0,    0,   49
  3773. ,   50,   51,    0,    0,    0,  151,    0,    0,    0,    0
  3774. ,    0,  486,    0,    0,    0,  310,    0,    0,  895,    0
  3775. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3776. ,    0,  508,   49,   50,   51,    0,    0,    0,   52,  423
  3777. ,    0,    0, 8475,  425, 8477, 8479, 8481,  429,  430,  431
  3778. ,  432, 8483,  434, 8485, 8487, 8489, 8491, 8493, 8495,  441
  3779. , 8497, 8499,   67, 8502,   69,   73,    0,   70,    0, 8504
  3780. ,  227,    0,    0,    0,    0,  445,    0,    0,   35,   36
  3781. ,   37,    0,    0,    0,    0,    0,    0,    0,    0, 8507
  3782. ,    0,    0,    0,    0,  446,  447,  448,    0,    0,    0
  3783. ,    0,    0,    0,  124,    0,    0,    0,    0,  102,   39
  3784. ,   40,   41,    0,    0, 8509,    0,    0,   43,    0,   44
  3785. ,    0,    0,    0,    0,  169,  940,  125,  126,    0,    0
  3786. ,    0,    0,    0,  127,    0,    0,    0,    0,    0,    0
  3787. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3788. ,    0,    0,    0,    0,    0,    0,    0,  169,    0,    0
  3789. ,    0,    0,    0,  635,    0,    0,    0,    0,    0,    0
  3790. ,  311,  599,    0,    0,    0,    0,    0,    0,    0,    0
  3791. ,    0, 8511,    0,   98,  323,    0,    0,    0,    0,    0
  3792. ,    0, 8515,  151,    0,   34,    0,    0,    0,  217,    0
  3793. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3794. ,    0,   89,    0,    0,  170,    0,  722,    0,  301,   49
  3795. ,   50,   51,    0,    0,  302,   52, 8517, 8519,   37,    0
  3796. ,   16,    0,    0,    0,  268,    0,    0,    0,    0,    0
  3797. ,  883,    0,   61,   62,   63, 8521,    0,   65,   66,   67
  3798. ,   68,   69,    0,    0, 8523,    0,  102,   39, 8525,   41
  3799. ,   98,    0,   42,  277,  909,   43,    0,   44,    0,    0
  3800. ,    0,    0,    0,    0,    0,  159,    0,   35, 8527,   37
  3801. ,   37,    0,  929,    0,    0,    0,    0,    0,    0,    0
  3802. ,    0,    0,    0,    0,    0,    0,    0,    0,  230,    0
  3803. ,    0,   96,    0,  487,    0,    0,    0,  102, 8529, 8532
  3804. , 8534,   41,    0,   42,   42,    0,   43,    0,   44,    0
  3805. ,    0,    0,    0,  481,    0,    0,    0,    0,  411,  262
  3806. ,    0,    0,    0, 8536,    0,   40,   41,    0,    0,    0
  3807. , 8538,    0,    0,    0,    0,    0,    0,    0,    0,   34
  3808. ,    0,    0,    0,    0,    0,    0,  169,    0,    0,    0
  3809. ,  772,    0,   34,    0,    0,    0,    0,   49,   50,   51
  3810. ,    0,    0,    0,   52,    0,    0,    0,  376,  126,    0
  3811. , 8541,   35, 8544, 8546, 8549,   58, 8551, 8553,    0,    0
  3812. ,   61, 8555, 8557,   64,   35, 8559, 8561,   67, 8563,   69
  3813. ,    0,    0,   70,  930,    0,    0,  834,    0,    0,    0
  3814. ,    0,   38,   39, 8565,   41,    0,    0, 8567,   49, 8569
  3815. , 8572, 8576,   44,    0, 8578, 8581,   40,   41,    0,    0
  3816. , 8583,    0,    0, 8585,    0,   44,    0,    0,   91,    0
  3817. ,    0,   61,   62,   63, 8587, 8589, 8594,   66,   67, 8597
  3818. , 8600, 8604,   41,   70, 1299, 8607,   13,   14,   43,    0
  3819. ,   44,    0,    0, 8609,    0,    0,  260,    0,    0,    0
  3820. ,    0,    0,  173,    0,  174,   16,    0,  662,    0,    0
  3821. ,    0,    0,  217,    0, 8611, 8613,  176,    0,    0, 8615
  3822. ,  178,    0,    0,    0,    0, 8617,    0,  262,    0,    0
  3823. ,    0,  159,    0, 1008,    0,    0,    0, 1299,  151,    0
  3824. ,    0,    0,    0,    0,   96,    0,   35,   36,   37,    0
  3825. ,    0,    0, 8619,   50,   51,    0,    0,    0,   52,    0
  3826. ,    0,  179,  180, 8621, 8624, 8626, 8629, 8631, 8634, 8636
  3827. , 8638, 8641, 8644,  191,    0, 8648, 8650, 8652, 8654, 8656
  3828. , 8659, 8662, 8664,   68,   69,   43,  169, 8666,   61,   62
  3829. , 8668, 8670,   51, 8672,   66,   67, 8674,   69,    0,    0
  3830. ,   70,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3831. ,    0, 8678,    0, 8680,   62,   63,   64,  570,   65,   66
  3832. ,   67, 8682,   69,    0,  345,   70,    0,  195, 8684,  197
  3833. ,    0,  714,    0,    0,    0,    0,    0,    0,    0,    0
  3834. ,   75,    0,    0,  170,    0,    0,    0,    0,    0, 8687
  3835. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  312
  3836. ,  151,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3837. ,    0, 8689,    0,    0,    0,    0,    0,    0,    0,    0
  3838. ,    0,    0,    0,    0,    0,  872,  873,   49, 8691,   51
  3839. ,    0,    0,    0, 8693,  294,    0,  488,    0,    0,    0
  3840. ,    0,    0,   55,   56,   57,   58,   59,   60,    0,    0
  3841. ,   61,   62,   63, 8695,    0,   65,   66, 8697,   68,   69
  3842. , 8699,   26,   70,  489,  199,   77,    0,    0,    0,    0
  3843. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  897
  3844. ,    0,    0,    0,    0, 8702,    0,    0,  836,  637,    0
  3845. ,    0,    0,    0,  694,   30,   31,    0,    0,    0,    0
  3846. ,    0,    0,    0, 8704,    0,  200,  201,  202,  203,    0
  3847. ,  707,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3848. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3849. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3850. ,    0,  172,   13,   14,    0,    0,    0,    0,    0,    0
  3851. ,    0,  837,    0,    0,    0,    0,    0,    0,  204,    0
  3852. ,  823,   16,    0,  663,    0,    0,  512,    0,  295,    0
  3853. ,   40, 8706,  205,    0,    0,  177,  178,    0,  593,    0
  3854. ,  824,  159,    0,   34,    0,    0,  594,   96,    0,    0
  3855. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3856. ,  695,    0,    0,    0,  638,  639,    0,    0,    0,    0
  3857. ,    0,    0,    0,    0,  325,   35,   36, 8709,  180,  181
  3858. ,  182,  183,  184,  185,  186,  187,  188,  189, 8711,  191
  3859. ,    0,    0,    0,    0,  759,  192, 8713, 8716,  326,    0
  3860. ,    0,   34,  169,    0,    0,  102,   39,   40,   41,    0
  3861. ,    0,   42,  296,    0, 8718,    0, 8720,    0,   96,    0
  3862. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3863. ,    0,    0,    0, 8722,   36,   37,    0, 1039,    0,   49
  3864. ,   50, 8724,    0,  195,  196,  197,    0,  207,  208,  209
  3865. ,  210,  211,    0,    0,    0,    0,    0,   96,    0,  170
  3866. , 1039,    0,    0,  102, 8726,   40, 8728,    0,    0, 8730
  3867. ,    0,    0,   43,    0,   44,  862,    0, 1039,  618, 1039
  3868. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  151
  3869. ,    0,   34,    0,    0, 1039,  490,  277,    0,    0, 1039
  3870. , 1039, 8732, 1039, 1039, 8735, 1285, 1039, 1039, 1039, 1285
  3871. ,    0, 1039, 1039, 8737, 8739,    0, 8741, 8743,   51, 1039
  3872. , 8745, 1039,   52, 8747, 8749,   37,   98,    0,    0,  212
  3873. ,    0,    0,    0,    0,    0,  229, 8751,   26, 8753,   61
  3874. , 8756, 8759,   64,  213,   65,   66,   67, 8761, 8763,    0
  3875. , 8766,   70,    0,  102,   39,   40,   41,    0,    0,   42
  3876. ,    0,    0,   43,    0, 8768,    0,    0,  572,    0,    0
  3877. ,   30,   31,    0,  327,   49,   50,   51,    0,    0,    0
  3878. ,   52,  200, 8770,  202,  203,    0,    0,    0,    0,    0
  3879. ,    0,    0,  640,    0,    0, 8772,    0,   61,   62,   63
  3880. ,   64,    0, 8774,   66,   67,   68, 8776,  800,    0,   70
  3881. ,    0,    0,    0,  215,    0,    0,    0,    0,    0,    0
  3882. ,    0,    0,    0,    0,    0,    0,  244,    0, 8778,    0
  3883. ,    0,  346,    0,   34,    0,    0,    0,  151,    0,    0
  3884. ,    0,    0,    0,    0,  298,    0,    0,    0,    0,    0
  3885. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3886. ,    0,    0,   95,    0,   49, 8780, 8783,   37,  643,  602
  3887. ,   52,    0,   34,    0,    0,    0,    0,    0,    0,    0
  3888. ,    0,    0,    0,    0,  375,  170,    0,   61,   62,   63
  3889. ,   64,    0,   65,   66,   67, 8786, 8788,   40,   41,   70
  3890. ,    0,   42,    0,    0, 8790,   36, 8792,    0,    0,    0
  3891. ,    0,    0,    0,    0,    0,    0,  316,    0,    0,  773
  3892. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3893. ,    0,    0,    0,    0,  102,   39,   40,   41,    0,    0
  3894. ,   42,    0,    0,   43,  941, 8794,  539,  567,    0,  573
  3895. ,    0,    0,  653,    0,    0,  347,    0,    0,    0,    0
  3896. ,    0,    0,    0,    0,    0,  513,    0,    0, 8796,    0
  3897. ,    0,  874,    0,  159,    0,    0,    0,    0,    0,  151
  3898. ,    0,    0,    0,    0,    0,    0, 8798,    0,    0,    0
  3899. ,    0,    0,    0,    0,    0,    0,    0,   83,    0,    0
  3900. ,    0,    0,    0,    0,    0,    0, 8800, 8802,   51,  112
  3901. ,  620,    0, 8805,    0,    0,  113,    0,    0, 8807,    0
  3902. ,  467, 8810,   56,   57,   58,   59,   60,    0,    0,   61
  3903. ,   62, 8812, 8814,    0,   65,   66,   67, 8816, 8818,    0
  3904. ,    0, 8820,    0, 1338,    0, 8822,   50,   51,    0,    0
  3905. ,    0, 8824,  676,  396, 1338,    0,   16,    0,    0,    0
  3906. , 8826, 8828, 8830, 8832, 8835, 8837,    0,  205, 8839, 8841
  3907. , 8843, 8845,  760,   65,   66,   67, 8848,   69,    0,    0
  3908. ,   70,    0,  217,    0,    0,   34,    0,  801,    0,  328
  3909. ,    0,    0,    0,  696,    0,   96,    0,    0,    0,    0
  3910. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3911. ,    0,    0,    0,    0,  159,    0,    0, 8850, 8853, 8855
  3912. ,  400,  278,  708,  518,  279,  884,   98,   34,  520,  402
  3913. ,  121,  802,  123,   34,   35,   36,  603,  376,  354,  126
  3914. ,  355,  126,  127,  803,  151,  102,  804,   39,   34,   40
  3915. ,  102,   42,   35,   40,   36,   41,   43,   34,   42,  476
  3916. ,  277,   96,  522,   83,  848,  527,  911,  529,   49,  299
  3917. ,  774,  532,  405,   52,   37,   76,  495,  533,  496,  534
  3918. ,   25,   41,  479,   26,   35,   27,  348,   36,   42,  199
  3919. ,   43,  213,  623,   68,  280,   40,  343,  918,  411,   39
  3920. ,   43,   34,  241,   40,   30,   41,   44,   31,  497,  105
  3921. ,  470,   35,  471,   36,  262,   49,  124,   34,   50,  825
  3922. ,   49,   52,  678,   50,  151,  102,  107,  743,   40,  108
  3923. ,  218,  473,   56,   57,   61,  125,   58,  102,   62,  126
  3924. ,  474,   59,   39,   63,  262,   60,   40,   64,   61,   66
  3925. ,  217,   62,   42,   67,  127,   63,   68,   64,   69,   43
  3926. ,   35,   65,   36,   66,   44,   37,   70,  151,   68,   49
  3927. ,   69,   50,  406,   52,  151,  875,   55,  876,   58,   60
  3928. ,  575,   63,  102,   64,  697,   49,   39,  826,   50,   40
  3929. ,   65,   51,   41,   68,   42,   69,   52,  775,   49,   43
  3930. ,   50,   70,   51,  709,  611,   49,   59,   50,  710,   60
  3931. ,   62,  232,   65,  113,  863,  476,   67,  679,   68,   62
  3932. ,   69,  153,  262,   64,   70,   65,  129,  478,  151,  479
  3933. ,   50,  806,   51,   50,  262,   51,  114,  115,    2,   83
  3934. ,  116,  120,  151,  499,   66,  500,   67,  501,   68,  159
  3935. ,  885,  377,   49,  813,   50,   35,  169,   51,   36,  681
  3936. ,   37,  682,  604,  356,   59,    3,  698,   60,   68,  102
  3937. ,   69,   39,  481,   43,  685,  535,   89,  488,  340,   34
  3938. ,   50,   96,   67,  776,   68,   37,   70,  102,    6,   39
  3939. ,    7,  864,   40,  169,   41,  919,  763,  330,  233,  316
  3940. ,  281,  376,  163,  151,   72,  886,   49,   50,   35,   51
  3941. ,   36,  777,   68,  102,   69,   39,   43,  130,  900,  724
  3942. ,   34,  244,  877,  231,  408,   36, 1364,  411,  282,   49
  3943. ,  850,  656,  745, 1361,  746,  413,  414,   34,  762,  415
  3944. ,  219,  495,   62,   39,   63,  234,  496,   64,  169,   65
  3945. ,   42,   67,  416,   68,  131,   44,   70, 1360,   36,  497
  3946. ,  102,  420,   39,  169,   41,  422,  303,   49,  379,  421
  3947. ,   50,   52,   14,  173,  245,   61,  314,   62,   16,   63
  3948. ,  151, 1039,   64,   49,   65,   51,  914,   66,   70,  176
  3949. ,  901, 1039,   49,  247, 1039,   51, 1039,  425,  151,  248
  3950. ,  427,   81,  431,   62,   42,  725,  432,  272,  433,   64
  3951. ,  435,  179,   65,  172,  436,  180,   66,  437,  181,   67
  3952. , 1039,  438,  182,   68,  439,  183,   69,  440,  184,  441
  3953. ,  185,  442,  186, 1039,  225,  443,  187, 1039,  188, 1039
  3954. ,  189, 1039,  626,  190,  360, 1039,  191, 1039,  444, 1039
  3955. ,  192,   50,  193,   51, 1039,  194, 1039,  445, 1326,   52
  3956. , 1326,  446,   62,  447,   63,  448,   64,  499,  494,   66
  3957. ,  500,   67,  501,   68,   41,   34,   42,  249,  449,  250
  3958. ,   96,  251,  411,  198,  677,   31,  667,  203,   52,  331
  3959. ,  809, 1396,  810,   55,   57,  556,   63,  733,   96,   65
  3960. ,  236, 1396,   66,    2,   68,  284, 1396,  169,  100,  159
  3961. ,  106,   34,   50,   35,   51,   36,  200,   52,   34,  201
  3962. ,  202,  606,  203,  332,   57, 1213,   68,   38,   69,   39
  3963. ,  278,  421,   35,   40,   36,   41,   37,   70,   36,   43
  3964. ,  580,   40,  252,  102,   42,   41,   43,   42,  539,  750
  3965. ,   37,  245,   47,  932,   85,  789,   49,   34,   50,  151
  3966. ,  248,  751,   54,  505,  456,   57,  727,   66,  497,   68
  3967. ,  887,   49,   69,   50,   35,   51,   36,  712,   37,   70
  3968. ,   49,   52,  698,   81,  262,   61,   66,  315,   62,   67
  3969. ,    5,   63,  151,   68,  102,  135,   10,   64,   69,   39
  3970. ,    7,  451,   40,   65,   41,   66,   70,    8,   68,   42
  3971. ,   70,  362,  387,   59,   34,   60,  334,   71,  225,  237
  3972. ,   96,   11,   40,   49,   41,   34,   50,   12,   68,  254
  3973. ,   35,  255,   36,  256,   37,   70,  542,  500,  790,  627
  3974. ,  641,  511,   50,  779,  658,   52,  457,  643,   61,   63
  3975. ,   96,   69,  277,  557,   60,  840,  582,   64,  583,   65
  3976. ,   66,   98,  830,  102,   39,  277,   44,  543,  515,  544
  3977. ,  567,  217,  161,  853,  734,  520,  262,  867,   49,   52
  3978. ,  277,  124,   59,   63,  162,   65,  549,  476,   67,  550
  3979. ,   68,  551,   69,  552,  855,  307,  523,  534,  934,  528
  3980. ,   43,   81,  409,   36,  841,  318,  780,  690,  497,   13
  3981. ,   49,   85,   14,   50,  167,  831,   52,   55,   15,  818
  3982. ,   56,   58,   16,  262,   60,   61,  383,  151,   68,   51
  3983. ,  170,  488,   36,   58,   96,   62,   20,  915,   63,   38
  3984. ,   64,   39,   21,   65,   41,   66,  168,   68,   42,  545
  3985. ,   44,  680,  159,  704,   35,   98,   37,  102,   23,   35
  3986. ,  728,   40,  682,   36,   41,   34,   40,  102,   42,   39
  3987. ,  105,  879,   40,   41,   43,  169, 1039,  715,   96, 1039
  3988. ,  278,  683,   44,  685, 1039,  106,   35,  753,  502,  258
  3989. ,   49,   36,   34,   50,   37,   55,   51,  792,   56,   58
  3990. ,  107,   59,   52,  309,   60,  108, 1039,   61,   62,  110
  3991. , 1039,   65,   55, 1039,   66,   56, 1039,   67,   57,  277
  3992. , 1039,   46,   68,   58, 1039,   69,   59,   24, 1039,   60
  3993. , 1039,   70, 1039,   61,  567,  660, 1039,  102,   62,   40
  3994. ,   64,   25, 1039,   41,   26, 1039,   65,   27, 1039,  458
  3995. ,   66,  102,   67,   39, 1260,   68,  904,   40,   69,   41
  3996. ,  421, 1039,   35,   82, 1039,   37,   70,   42, 1039, 1039
  3997. ,  452,   43,   47,   48,  138,   50,   28,   51,   29,   49
  3998. ,   52,   52,   53,   57,   61,   58,   62,   59,   63,  466
  3999. ,  842,   60,   64,   61,   66,   62,   67,   63,  559,   68
  4000. ,   64,   69,   66,   70,  151,   68,  670,  287,  259,   50
  4001. ,  671,   52,  151,  916, 1364,   66,  412,   67, 1360,  832
  4002. ,  413,   49,  414,   50,   70,  169,  488,   51,  273,  260
  4003. ,  546,   66,   40,   71,  924,   37,   41,  170,  420,  222
  4004. ,  820,  344,   39,  288,  919,   40, 1364,   41,   42,  225
  4005. , 1110, 1041,  164,   36, 1110,   37,  412,  415,  239,  416
  4006. ,  422,  102, 1041,   39,  418,   41,   34,   43, 1110, 1360
  4007. , 1041,  720,  419,  169,   51, 1041,   35, 1041,   36, 1041
  4008. ,   37,   48, 1041,  560,   49,  420,  101,   51, 1041, 1041
  4009. ,  468,  567, 1041,  470,   34,  588,  585,  102,   49,   39
  4010. ,   50,  427,   40,   51,  428,   41,  431,   42,   33,   52
  4011. ,  432,  262,  433,  434,   43,  436,   44,  437,  472,   53
  4012. ,  438,   54,  439,  170,  440,   55,  441,   56,  442,   57
  4013. ,  586,  151,   58,  717,   60,   61,  473,  868,   63,  444
  4014. ,   64,  474,   65,  589,   36,   66,   37,  139,  422,   68
  4015. ,  445,  446,  475,  891,   52,  447,  337,   49,  387,   39
  4016. ,   50,   40,   55,   51,   41,   58,   96,  388,   42,   60
  4017. ,   84,   61,   44,   65,  389,  781,   66,  815,  672,  476
  4018. ,  106,   34,  427,  629,  430,  477,  431,  548,  721,  432
  4019. ,  478,  433,   49,  754,  434,   34,   50,   35,  736,  435
  4020. ,   51,   36,  436,   37,  438,   96,  439,   52,  441,  365
  4021. ,  442,  338,  444,   58,  511,  262,   60,  445,   62,  261
  4022. ,  794,   63,   35,   71,   64,   37,   65,  172,   66,  151
  4023. ,   68,  102,   69,   39,   35,  319,   40,   36,   41,   37
  4024. ,   70,  102,  391,   40,   49,   41,   50,  549,   51,  142
  4025. ,   42,  550,  551,  102,  552,   39,   52,   43,  503,   40
  4026. ,  533,   42,   43,  392,   44,   98,   68,   96,  277,   96
  4027. ,  590,  504,  262,   41,  366,   42,   16,   43,   34,  652
  4028. ,   50,   49,  480,   63,   50,  843,   64,  169,   65,  726
  4029. ,   67,   52,   68,   49,   69,  782,  718,   39,   52,   34
  4030. ,  262,   40,  214,   41,   42,  339,   61,   44,   63,  151
  4031. ,   67,   61,   68,   62,   69,   63,   64,  143,   70,   65
  4032. ,  125,   66,  126,   67,   37,  144,   55,   36,   56,   37
  4033. ,  630,   59,  506,  289,   60,  145,   61,  209,  102,   62
  4034. ,  210,   39,   63,  211,  146,  926,   40,   64,   42,   67
  4035. ,   68,  159,   69,  165,   43,  262,   44,   70,  151,  102
  4036. ,   43,   86,   34,   50,   58,  482,  200,   59,  201,   35
  4037. ,  608,   60,  202,   36,  203,   37,   61,  376,   62,  126
  4038. ,  241,   64,   65,   36,   66,   37,   67,  127,  155,   69
  4039. ,  369,   35,  553,   37,   70,  213,  262,  102,  156,  768
  4040. ,   40,   41,  597,   42,  500,  501,  151,  102,   43,   40
  4041. ,  214,   41,  102,   42,   49,   39,   50,   40,   51,   41
  4042. ,  170,   43,   44,   87,   61,  376,   62,  126,  147,   64
  4043. ,   52,   67,  127,  245,  166,   70,  246,  351,  729,  241
  4044. ,  705,  592,  151,  248,  316,   49,   49,   52,   50,   35
  4045. ,  371,   51,   36,   67,   61,   68,   62,   69,   63,   70
  4046. ,   65,   61,   66,   62,   67,   63,   68,   64,   69,   66
  4047. ,   70,  906,   68,  102,   69,   39,  217,   42,   43,   35
  4048. ,   44,   37,  927,  102,  562,   40,  796,   35,  216,   36
  4049. ,  554,   37,   34,   50,  166,  646,  151,   38,  881,   40
  4050. ,   61,   44,  894,   64,   34,   35,   65,   36,   66,   37
  4051. ,   36,  341,   37,   70,   35,   40,   36,   41,  102,   42
  4052. ,  730,   39,   46,   40,  274,   41,   43,   42,   67,   49
  4053. ,   69,   43,   50,   34,   47,  217,   42,   35,  291,  633
  4054. ,   54,  151,   58,  151,  102,   62,   39,   63,   34,   40
  4055. ,   64,   42,   67,   44,   70,  822,  151,   49,   52,   37
  4056. ,  266,  719,   63,   61,   66,   62,   67,   63,   68,   64
  4057. ,   49,   69,  563,   50,   65,   51,   66,   70,   68,   96
  4058. ,   69,   52,   43,  564,  507,  151,   68,  124,   69,  278
  4059. ,   50,   71,  241,   64,  907,  485,  645,  224,   52,  647
  4060. ,   34,   35,   61,   37,   63,  102,   64,   49,   50,   40
  4061. ,   65,   51,   41,   66,  112,   69,  565,   70,  113,   35
  4062. ,  322,   40,   36,   41,  169,  114,  858,  102,  150,  408
  4063. ,   39,   40,  117,  409,   41,   42,  119, 1364,   43,  410
  4064. ,   44,  393,  293,  418,  151,  170,   50,  939,   96,   41
  4065. ,   35,  488,   36,  151,  298,  798,  598,  770,   39,  421
  4066. ,   40,   62,   42,   66,   44,  731,   67,   49,   69,   51
  4067. ,  121,   70,  122,  123,   88,  847,   64,  871,  422,  424
  4068. ,  225,  426,  648,  427,  740,  428,   34,  433,  316,  435
  4069. ,  771,  436,  758,  437,   61,  438,   62,  439,   63,  440
  4070. ,   64,  442,   65,  443,  620,   66,   68,   72,  444,   77
  4071. ,  226,  859,  566,   96,   42,  928,  170,  511,  262,   96
  4072. ,  128,   35,  372,   36,   90,   34,   64,   70,   74,  511
  4073. ,   40,   36,   35,   39,  567,  102,   40,   39,   41,   40
  4074. ,  102,  785,  277,  151,   96,  455,  316,  509,   55,   36
  4075. ,  693,   56,   37,  127,   57,   59,  228,   34,   60,  105
  4076. ,   62,   63,  151,   65,   36,   66,   37,   68,  394,  421
  4077. ,   40,  811,   42,   50,   35,   49,   51,   36,   43,   50
  4078. ,   37,   51,   52,  860,  102,   39,   52,  568,   42,  569
  4079. ,   43,   64,   49,   50,  636,  324,  152,   92,   65,   51
  4080. ,   26,   68,  102,   67,   69,   39,  649,   68,   40,  171
  4081. ,   69,   42,  172, 1008,   46,   34,   47,  169,  175,  352
  4082. ,  177,   48,  159,  455,   49,  105,  373,  181,   53,  182
  4083. ,   54,   49,  183,   50,  184,   55,   51,  185,   56,  186
  4084. ,   57,  187,  680,   58,  188,   59,   52,  189,  170,  374
  4085. ,   60,  190,  861,   61,  102,   62,   39,   63,   40,   64
  4086. ,   41,  278,  192,   65,  269,  193,   66,  194,   42,   67
  4087. ,   44,   70,   49,   63,   50,   64,  510,   65,   52,  617
  4088. ,   68,   93,  511,  275,   61,   98,  896,   68,  786,  567
  4089. ,  196,  262,  342,  313,   76,   50,   71,   52,  277,   64
  4090. ,  198,   67,  225,  675,  600,   25,  835,  395,   42,  270
  4091. ,  169,   41,  175,   37,  179,  170,  190,  732,  601,  193
  4092. ,  799,  194,   43,  511,   44,   98,   35,  571,  297,  206
  4093. , 1039,   39, 1039,   41, 1039,   42, 1039,  225,   94, 1039
  4094. ,  491, 1039,  376,  126,  225, 1039,   49, 1039,   50, 1039
  4095. ,  127,   35,  741,   36,  276,  241,   25,  169,  230,   27
  4096. ,   62,  271,  199,   63,   78,  650,   68,  282,  651,   69
  4097. ,  652,  100,  931,   44,  837,  201,  641,  170,   65,  214
  4098. ,   69,  277,  637,  169,   50,   35,  619,   51,   36,  642
  4099. ,   68,  102,   69,   39,   43,   35,   44,   37,  639,   44
  4100. ,  787,  262,  574, 1338,   49,   85,   50,  167,  262,   52
  4101. ,  492,  812,  151, 1338,   55,  278,   63,  742,   64,  353
  4102. ,   68,   13,   69,   14,   70,  216,   49,  305,   52, 1338
  4103. ,   55,  114,   56,  115,   57,  116,   58, 1016,   79,   59
  4104. , 1016,   60,  231,   61,  118,   62,  119,   63,  120,  898
  4105. ,   64,  178,   68,  514,  910,  397,   35,  398,   36,  399
  4106. ,   37,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4107. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4108. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4109. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4110. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4111. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4112. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4113. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4114. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4115. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4116. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4117. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4118. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4119. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4120. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4121. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4122. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4123. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4124. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4125. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4126. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4127. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4128. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4129. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4130. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4131. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4132. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4133. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4134. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4135. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4136. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4137. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4138. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4139. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4140. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4141. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4142. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4143. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4144. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4145. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4146. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4147. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4148. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4149. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4150. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4151. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4152. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4153. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4154. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4155. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4156. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4157. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4158. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4159. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4160. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4161. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4162. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4163. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4164. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4165. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4166. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4167. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4168. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4169. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4170. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4171. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4172. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4173. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4174. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4175. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4176. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4177. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4178. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4179. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4180. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4181. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4182. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4183. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4184. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4185. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4186. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4187. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4188. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4189. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4190. ,    0,    0,    0,    0,    0,    0)  ;
  4191.         --| Actions to perform for all combinations of parser
  4192.         --| states and input tokens.
  4193.         -- NYU Reference Name: ACTION_TABLE1
  4194.  
  4195.     ActionTableTwo :
  4196.         constant array (ActionTableTwoRange)
  4197.         of GC.ParserInteger :=
  4198.          (    0,99019,165032,    0,    0,    0,    0,    0,    0,    0
  4199. ,    0,121033,    0,    0,121036,    0,    0,    0,    0,231061
  4200. ,    0,    0,121044,121045,    0,    0,82541,82542,82543,82544
  4201. ,    0,    0,82547,    0,    0,82550,    0,82552,121060,    0
  4202. ,    0,    0,    0,    0,159573,159574,    0,    0,38555,    0
  4203. ,121072,    0,27557,121075,    0,    0,33062,    0,    0,99077
  4204. ,99078,99079,99080,99081,99082,99083,297120,    0,    0,    0
  4205. ,    0,    0,    0,    0,    0,    0,    0,121099,    0,    0
  4206. ,38587,38588,38589,    0,    0,    0,    0,    0,159617,    0
  4207. ,    0,159620,    0,    0,    0,214634,    0,    0,    0,82614
  4208. ,    0,    0,214641,187137,    0,214644,    0,    0,    0,    0
  4209. ,    0,    0,    0,38620,    0,    0,    0,159646,    0,    0
  4210. ,225661,38628,    0,    0,    0,159654,    0,159656,    0,    0
  4211. ,    0,121153,121154,121155,121156,    0,121158,    0,82653,82654
  4212. ,    0,121163,121164,    0,170675,170676,    0,    0,    0,225690
  4213. ,    0,    0,    0,22157,    0,    0,    0,    0,    0,225700
  4214. ,82675,82676,82677,82678,    0,82680,82681,82682,    0,82684
  4215. ,    0,181704,82687,    0,170705,170706,    0,170708,    0,    0
  4216. ,170711,22185,    0,    0,    0,    0,    0,22191,    0,159718
  4217. ,11192,    0,11194,264241,38701,264243,264244,38704,    0,    0
  4218. ,    0,    0,    0,    0,247749,    0,    0,247752,    0,    0
  4219. ,181743,    0,159741,    0,    0,    0,    0,154245,    0,    0
  4220. ,    0,    0,    0,38730,181757,    0,170757,    0,    0,159758
  4221. ,    0,247776,    0,159762,    0,181768,159765,    0,159767,    0
  4222. ,    0,99259,159771,    0,    0,    0,    0,    0,154276,38756
  4223. ,    0,    0,    0,    0,    0,    0,    0,159786,    0,    0
  4224. ,    0,225802,159791,    0,    0,    0,    0,181800,    0,    0
  4225. ,247815,    0,11274,    0,    0,225816,225817,    0,225819,    0
  4226. ,    0,    0,225823,225824,    0,    0,    0,    0,225829,225830
  4227. ,    0,    0,    0,    0,    0,71808,    0,    0,22302,    0
  4228. ,170831,170832,170833,170834,    0,    0,264354,82822,170839,    0
  4229. ,170841,170842,    0,    0,170845,    0,    0,    0,    0,    0
  4230. ,    0,22325,22326,22327,22328,    0,    0,247872,    0,    0
  4231. ,    0,    0,    0,    0,    0,    0,71849,    0,132362,    0
  4232. ,    0,    0,231384,181876,    0,    0,    0,    0,    0,242393
  4233. ,    0,    0,    0,    0,    0,55365,154384,    0,    0,    0
  4234. ,    0,    0,154390,    0,38871,    0,82881,82882,    0,99387
  4235. ,99388,154399,154400,154401,154402,154403,154404,    0,    0,154407
  4236. ,154408,154409,154410,225924,154412,    0,    0,    0,154416,    0
  4237. ,    0,154419,    0,    0,181927,    0,    0,    0,    0,    0
  4238. ,    0,71914,    0,    0,    0,    0,    0,    0,    0,    0
  4239. ,71923,71924,71925,71926,    0,    0,    0,    0,71931,71932
  4240. ,71933,71934,    0,71936,71937,71938,    0,    0,38935,38936
  4241. ,71943,    0,38939,275483,198470,    0,    0,38944,    0,    0
  4242. ,    0,    0,    0,181976,181977,    0,181979,159976,    0,    0
  4243. ,    0,    0,    0,    0,187488,    0,99474,    0,    0,132483
  4244. ,    0,    0,115983,    0,49973,253511,    0,    0,    0,    0
  4245. ,    0,    0,    0,    0,82989,82990,    0,    0,    0,    0
  4246. ,    0,    0,    0,    0,    0,    0,83001,    0,    0,    0
  4247. ,    0,    0,    0,    0,    0,88511,    0,248042,    0,39006
  4248. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4249. ,39017,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4250. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4251. ,    0,    0,    0,    0,    0,88551,    0,39044,    0,39046
  4252. ,171071,    0,275592,39050,    0,    0,    0,    0,    0,    0
  4253. ,209588,    0,    0,    0,    0,    0,215095,    0,    0,215098
  4254. ,39067,39068,39069,39070,    0,39072,39073,    0,    0,39076
  4255. ,72083,72084,    0,    0,    0,    0,154604,    0,    0,105098
  4256. ,    0,    0,    0,    0,    0,    0,    0,99605,281139,    0
  4257. ,    0,281142,    0,220633,    0,    0,    0,    0,  598,  599
  4258. ,    0,    0,    0,    0,  604,    0,72119,    0,    0,72122
  4259. ,    0,72124,    0,    0,    0,    0,    0,231659,    0,    0
  4260. ,    0,    0,143648,    0,    0,    0,    0,    0,    0,    0
  4261. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4262. ,    0,    0,    0,    0,    0,    0,    0,187681,    0,    0
  4263. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4264. ,286712,    0,    0,    0,    0,55675,231708,    0,187702,149196
  4265. ,    0,55681,    0,72186,    0,237218,    0,    0,198714,    0
  4266. ,39187,198717,    0,176715,    0,    0,28191,    0,    0,176721
  4267. ,    0,187725,    0,    0,    0,    0,    0,  697,    0,    0
  4268. ,    0,94218,    0,    0,    0,    0,    0,    0,    0,    0
  4269. ,    0,    0,    0,    0,39221,    0,275766,72230,    0,286771
  4270. ,    0,    0,    0,    0,    0,    0,72239,72240,72241,72242
  4271. ,72243,72244,    0,    0,72247,72248,72249,72250,    0,72252
  4272. ,72253,72254,    0,    0,39251,39252,72259,    0,39255,    0
  4273. ,    0,    0,    0,39260,    0,    0,    0,    0,182291,    0
  4274. ,    0,132785,    0,160292,    0,    0,    0,    0,    0,99787
  4275. ,    0,    0,    0,281324,281325,    0,    0,    0,    0,    0
  4276. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4277. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4278. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,182342
  4279. ,    0,88827,    0,182346,    0,    0,    0,    0,    0,220859
  4280. ,    0,    0,    0,    0,182357,    0,39333,    0,    0,171360
  4281. ,    0,    0,182365,    0,    0,    0,    0,    0,    0,    0
  4282. ,    0,    0,99860,    0,    0,    0,    0,154875,    0,154877
  4283. ,99868,    0,99870,    0,39361,39362,    0,    0,    0,39366
  4284. ,    0,    0,99880,99881,    0,    0,    0,    0,    0,    0
  4285. ,    0,99889,215411,    0,    0,    0,39383,    0,    0,    0
  4286. ,154908,    0,39389,    0,    0,39392,154914,    0,    0,99907
  4287. ,    0,99909,    0,176925,    0,    0,    0,    0,    0,44907
  4288. ,    0,44909,    0,99921,    0,99923,99924,    0,    0,    0
  4289. ,    0,248456,83427,    0,    0,    0,17419,    0,    0,    0
  4290. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4291. ,    0,44939,    0,    0,    0,44943,    0,215476,99956,    0
  4292. ,    0,17444,    0,    0,83459,83460,83461,    0,    0,    0
  4293. ,154978,    0,    0,    0,    0,    0,287008,    0,    0,    0
  4294. ,    0,154989,    0,    0,    0,    0,    0,    0,    0,    0
  4295. ,    0,    0,    0,    0,83489,83490,83491,83492,    0,    0
  4296. ,83495,    0,    0,83498,    0,83500,    0,    0,    0,    0
  4297. ,155018,    0,94509,94510,    0,    0,    0,    0,    0,177031
  4298. ,28505,    0,    0,155031,155032,155033,155034,155035,155036,    0
  4299. ,39517,    0,    0,    0,    0,100033,    0,    0,155046,155047
  4300. ,155048,    0,94539,    0,    0,    0,94543,94544,    0,122051
  4301. ,67042,    0,94549,276083,122056,    0,    0,    0,    0,    0
  4302. ,    0,45049,    0,    0, 1044,12047,45054,83562,    0,    0
  4303. ,    0,    0,    0,12055,100072,12057,    0,100075,    0,100077
  4304. ,    0,100079,100080,100081,    0,    0,    0,100085,    0,    0
  4305. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4306. ,    0,12083,12084,12085,    0,83600,    0,    0,    0,12091
  4307. ,    0,    0,12094,12095,    0,12097,12098,12099,    0,    0
  4308. ,83615,    0,    0,    0,    0,210143,    0,    0,83623,    0
  4309. ,    0,    0,155140,83628,    0,    0,    0,83632,    0,    0
  4310. ,83635,    0,171653,    0,    0,    0,    0,    0,    0,    0
  4311. ,50639,    0,237675,    0,94651,94652,94653,210175,210176,210177
  4312. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4313. ,237693,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4314. ,    0,    0,    0,    0,    0,    0,    0,210205,210206,210207
  4315. ,    0,89187,254218,    0,    0,    0,210214,100195,210216,    0
  4316. ,    0,    0,    0,    0,    0,    0,    0,    0,215727,237732
  4317. ,    0,215730,    0,    0,    0,    0,    0,34203,177230,    0
  4318. ,17703,    0,72715,72716,72717,    0,    0,72720,182741,259756
  4319. ,    0,    0,199248,    0,    0,210253,    0,    0,    0,210257
  4320. ,    0,    0,    0,    0,    0,    0,    0,94744,94745,    0
  4321. ,    0,94748,72745,72746,72747,72748,    0,    0,72751,    0
  4322. ,210278,72754,    0,72756,    0,    0,    0,    0,276298,    0
  4323. ,    0,210289,    0,215792,    0,    0,    0,    0,    0,    0
  4324. ,    0,94778,    0,61774,    0,    0,276316,    0,276318,    0
  4325. ,    0,171802,94789,94790,94791,    0,    0,    0,210316,210317
  4326. ,210318,    0,    0,111303,    0,    0,    0,    0,    0,111309
  4327. ,    0, 1291,111312,    0,210332,    0,210334,210335,210336,    0
  4328. ,    0,210339,210340,    0,210342,72818,    0,    0,210346,    0
  4329. ,210348,204848,39819,210351,94831,    0,72829,    0, 1318,    0
  4330. ,    0,    0,    0,    0,    0,    0,    0, 1327,    0,    0
  4331. ,    0,    0,    0,237876,    0,    0,    0,    0,    0,    0
  4332. ,    0,122363,    0,72856,    0,    0,39853,    0,276398,    0
  4333. ,    0,    0,    0,    0,72867,    0,210394,    0,72871,72872
  4334. ,    0,72874,72875,72876,    0,    0,72879,72880,72881,72882
  4335. ,    0,72884,72885,72886,    0,    0,    0,    0,    0,    0
  4336. ,39887,    0,226923,    0,226925,39892,    0,    0,    0,    0
  4337. ,    0,    0,    0,    0,    0,    0,    0,    0,133422,133423
  4338. ,    0,    0,116923,    0,    0,133429,105925,105926,    0,105928
  4339. ,    0,23415,    0,226954,226955,    0,133440,105936,    0,    0
  4340. ,    0,226962,    0,226964,    0,    0,39933,    0,    0,    0
  4341. ,    0,23435,259979,    0,116955,116956,    0,    0,    0,    0
  4342. ,    0,259988,89458,    0,    0,    0,    0,    0,182981,    0
  4343. ,67462,23455,56462,    0,    0,    0,    0,    0,39965,    0
  4344. ,67472,    0,    0,    0,116985,116986,116987,116988,    0,    0
  4345. ,116991,    0,    0,116994,194009,116996,    0,    0,183011,105998
  4346. ,    0,260028,260029,260030,260031,    0,    0,39994,128011,    0
  4347. ,106009,39998,    0,    0,    0,    0,    0,40004,    0,    0
  4348. ,40007,40008,    0,40010,40011,40012,    0,    0,40015,40016
  4349. ,40017,40018,    0,40020,    0,40022,    0,    0,    0,    0
  4350. ,    0,    0,    0,    0,227065,227066,    0,    0,    0,227070
  4351. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4352. ,106059,106060,106061,106062,    0,106064,    0,    0,    0,    0
  4353. ,    0,    0,    0,227094,    0,227096,    0,73070,    0,73072
  4354. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,111589
  4355. ,    0,    0,    0,    0,    0,117096,117097,117098,    0,    0
  4356. ,287632,117102,    0,    0,    0,    0,    0,    0,287640,    0
  4357. ,117111,117112,117113,117114,    0,    0,    0,    0,117119,117120
  4358. ,117121,117122,    0,117124,117125,117126,117127,117128,    0,    0
  4359. ,117131,183144,    0,183146,    0,    0,    0,    0,    0,    0
  4360. ,    0,    0,    0,    0,    0,    0,    0,243671,243672,243673
  4361. ,    0,40138,73145,    0,    0,    0,    0,    0,    0,    0
  4362. ,177672,    0,    0,    0,243688,    0,    0,    0,    0,    0
  4363. ,    0,    0,    0,    0,    0,    0,    0,243701,243702,    0
  4364. ,    0,73174,    0,243707,95181,73178,243710,150194,243712,    0
  4365. ,    0,    0,    0,    0,122696,    0,    0,    0,    0,    0
  4366. ,    0,    0,73195,73196,73197,73198,    0,73200,73201,73202
  4367. ,    0,73204,    0,    0,    0,    0,    0,    0,    0,117220
  4368. ,122722,117222,    0,117224,    0,    0,    0,    0,    0,    0
  4369. ,    0,    0,    0,    0,51223,254761,    0,    0,    0,    0
  4370. ,122742,    0,106241,106242,106243,106244,    0,    0,106247,    0
  4371. ,243774,106250,    0,106252,    0,    0,260283,    0,    0,260286
  4372. ,    0,243785,243786,    0,243788,    0,    0,    0,    0,    0
  4373. ,    0,    0,    0,    0,    0,23759,    0,    0,    0,23763
  4374. ,    0,23765,    0,    0,    0,    0,    0,293320,243812,    0
  4375. ,243814,    0,    0,    0,    0,293328,    0,144803,    0,    0
  4376. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,254835
  4377. ,    0,    0,243836,    0,243838,106314,243840,243841,243842,243843
  4378. ,    0,238344,    0,243847,40311,    0,106325,    0,    0,23813
  4379. ,    0,    0,    0,276863,    0,    0,    0,    0,    0,    0
  4380. ,    0,    0,    0,    0,    0,155853,    0,67839,    0,    0
  4381. ,67842,    0,    0,106352,106353,106354,276886,276887,    0,106358
  4382. ,    0,    0,    0,276893,    0,    0,    0,    0,106367,106368
  4383. ,106369,106370,106371,    0,    0,    0,106375,106376,106377,    0
  4384. ,89876,    0,    0,106382,106383,106384,    0,    0,106387,    0
  4385. ,    0,    0,    0,    0,    0,    0,    0,194412,    0,177911
  4386. ,194415,    0,    0,    0,    0,    0,144912,    0,    0,18392
  4387. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4388. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,111929
  4389. ,205447,177943,177944,177945,    0,    0,    0,    0,    0,188953
  4390. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4391. ,    0,    0,    0,205470,205471,    0,    0,    0,    0,    0
  4392. ,205477,    0,    0,177975,177976,    0,95463,177979,    0,    0
  4393. ,177982,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4394. ,271509,    0,    0,161492,161493,    0,    0,    0,    0,    0
  4395. ,    0,255017,    0,    0,255020,    0,111996,211015,111998,    0
  4396. ,    0,    0,    0,255029,    0,    0,    0,    0,227529,    0
  4397. ,    0,    0,    0,    0,161523,    0,    0,    0,    0,    0
  4398. ,    0,255047,    0,    0,    0,    0,    0,    0,    0,    0
  4399. ,255056,    0,    0,255059,    0,    0,    0,    0,161547,    0
  4400. ,    0,    0,    0,    0,    0,178057,    0,    0,    0,    0
  4401. ,    0,    0,    0,    0,51543,    0,    0,255083,    0,    0
  4402. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,227590
  4403. ,227591,    0,    0,178085,178086,    0,227597,    0,    0,    0
  4404. ,    0,    0,    0,    0,    0,    0,183599,178099,178100,178101
  4405. ,178102,    0,178104,    0,    0,178107,178108,    0,178110,    0
  4406. ,    0,178113,    0,    0,    0,172616,    0,178119,    0,161618
  4407. ,    0,    0,255138,255139,255140,255141,    0,255143,183631,183632
  4408. ,183633,255147,255148,255149,    0,    0,    0,62618,255154,    0
  4409. ,255156,255157,    0,    0, 7615,    0,    0,    0,178150,    0
  4410. ,    0,    0,    0,    0,194659,    0,    0,    0,183661,183662
  4411. ,183663,183664,    0,    0,183667,    0,    0,    0,    0,183672
  4412. ,    0,    0,271691,    0,    0,    0,    0,    0,18651,    0
  4413. ,35156,    0,    0,    0,    0,    0,194691,    0,194693,266207
  4414. ,    0,    0,    0, 7664,    0,    0,    0,    0,260715,128692
  4415. ,    0,    0,29677,    0,    0,    0,    0,    0,    0,    0
  4416. ,    0,    0,    0,222223,    0,    0,194721,194722,194723,194724
  4417. ,    0,    0,194727,    0,    0,194730,260743,194732,    0,73712
  4418. ,73713,183734,    0,    0,    0,    0,    0,    0,    0,    0
  4419. ,260757,    0,183745,    0,260761,    0,    0,    0,    0,    0
  4420. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4421. ,156258,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4422. ,    0,183774,29747,    0,    0,    0,    0,    0,    0,    0
  4423. ,    0,    0,238795,260800,    0,    0,183789,    0,183791,    0
  4424. ,40767,    0,    0,183796,183797,183798, 2266,183800,183801,183802
  4425. ,    0,183804,    0,13275,183807,    0,    0,    0,    0,    0
  4426. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4427. ,    0,    0,40799,40800,40801,    0,271845,194832,194833,    0
  4428. ,    0,    0,95819,194838,    0,13307,    0,13309,    0,    0
  4429. ,13312,95828,194847,194848,194849,    0,194851,194852, 2318, 2319
  4430. ,194855,    0,    0,    0,40831,    0,    0,194862,    0,194864
  4431. ,205867,40838,194867,    0,    0,13337,13338,13339,13340,    0
  4432. ,    0,13343,    0,    0,13346,    0,13348,    0,    0,    0
  4433. ,117871,    0,    0,    0,    0,    0,238899,    0,    0,24363
  4434. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4435. ,    0,    0,    0,    0,40881,    0,    0,    0,    0,    0
  4436. ,    0,    0,    0,117904,    0, 2385,    0,13389,    0,    0
  4437. ,238933,    0,    0,    0,    0,40902,    0,    0,    0,156427
  4438. ,    0,    0,    0,    0,    0,    0,40913,    0,13410,    0
  4439. ,    0,    0,117933,117934,    0,117936,    0,161946,    0,    0
  4440. ,    0,    0,    0,117944,238967,    0,156454,238970,    0,    0
  4441. ,260977,    0,260979,40940,40941,40942,    0,    0,    0,40946
  4442. ,    0,156469,    0,    0,    0,    0,    0,    0,    0,    0
  4443. ,40957,    0,    0,    0,    0,13457,    0,    0,40965,40966
  4444. ,    0,    0,    0,    0,    0,    0,    0,156495,    0,    0
  4445. ,    0,13473,    0,    0,    0,    0,    0,    0,    0,    0
  4446. ,46488,    0,    0,    0,    0,    0,    0,250032,    0,294042
  4447. ,    0,239034,    0,    0,    0,    0,    0,173028,    0,    0
  4448. ,    0,    0,239045,    0,    0,    0, 2506, 2507,    0,46517
  4449. ,46518,46519,46520,    0,    0,46523,    0,195052,    0,    0
  4450. ,    0,    0,    0,118044,118045,118046,    0,    0,162057,    0
  4451. ,239073,239074,    0,    0,    0,    0,118057,    0,118059,118060
  4452. ,118061,118062,118063,118064,239087,239088,    0,    0,    0,    0
  4453. ,    0,118072,    0,    0,    0,    0,112576,239100,    0,239102
  4454. ,    0,239104,    0,    0,239107,    0,    0,    0,    0,    0
  4455. ,    0,    0,217111,    0,90590,30080,    0,    0,    0,    0
  4456. ,    0,129104,129105,129106,    0,178617,    0,250132,    0,250134
  4457. ,    0, 2591,217131,    0,134618,239138,134620,    0,    0,    0
  4458. ,    0,    0,134626,    0,134628,    0,    0,134631,    0,    0
  4459. ,250155,250156,250157,250158,    0,250160,    0,    0,250163,250164
  4460. ,    0,    0,    0,    0,96141,134649,46634,    0,    0,134653
  4461. ,    0,    0,228173,    0,    0,    0,    0,    0,134662,    0
  4462. ,173171,    0,    0,134667,    0,134669,46654,    0,    0,    0
  4463. ,46658,46659,46660,    0,134678,    0,    0,134681,    0,    0
  4464. ,134684,    0,    0,    0,294217,    0,    0,    0,    0,    0
  4465. ,    0,288723,173203,173204,    0,    0,228217,    0,228219,    0
  4466. ,    0,    0,    0,    0,    0,211723,    0,    0,    0,272238
  4467. ,    0,    0,    0,    0,    0,    0,    0,184230,    0,184232
  4468. ,    0,    0,173233,    0,    0,    0,    0,184240,    0,184242
  4469. ,184243,173242,    0,173244,184247,    0,184249,211755,    0,    0
  4470. ,184253,    0,    0,184256,184257,    0,    0,    0,184261,    0
  4471. ,    0,    0,    0,    0,184267,    0,173267,    0,156766,    0
  4472. ,    0,    0,156770,    0,156772,    0,184279,    0,    0,211787
  4473. ,    0,    0,    0,211791,173285,    0,    0,    0,211796,    0
  4474. ,    0,    0,184295,184296,    0,    0,    0,    0,134792,134793
  4475. ,    0,    0,156800,    0,    0,173306,    0,156805,156806,156807
  4476. ,156808,156809,    0,    0,    0,156813,    0,    0,228329,    0
  4477. ,156818,156819,    0,156821,217333,156823,    0,    0,156826,    0
  4478. ,112820,    0,294355,    0,140329,    0,    0,    0,    0,112829
  4479. ,96327,134835,    0,    0,    0,    0,134840,134841,    0,    0
  4480. ,    0,    0,134846,    0,    0,    0,    0,    0,    0,    0
  4481. ,    0,    0,173363,    0,    0,    0,    0,173368,    0,    0
  4482. ,85355,    0,    0,173374,    0,173376,    0,19350,173379,19352
  4483. ,    0,    0,288904,    0,    0,    0,    0,    0,211896,211897
  4484. ,211898,    0,    0,    0,    0,134889,123888,123889,    0, 8370
  4485. ,85385,    0,    0,    0,211912,211913,    0,211915,    0,85394
  4486. ,    0,    0,211920,211921,211922,74398,    0,    0,211926,211927
  4487. ,211928,    0,41399,211931,    0,    0,74409,123919,    0,    0
  4488. ,123922,178933,    0,    0,    0,    0,    0,    0,    0,    0
  4489. ,    0,184444,    0,    0,184447,184448,184449,    0,184451,184452
  4490. ,    0,    0,    0,    0,    0,    0,    0,184460,    0,    0
  4491. ,184463,    0,    0,184466,74447,    0,    0,112957,74451,74452
  4492. ,74453,    0,74455,    0,    0,206482,74459,    0,    0,    0
  4493. ,255996,    0,    0,74466,    0,    0,    0,    0,    0,    0
  4494. ,41467,107480,    0,41470,    0,41472,184499,184500,184501,145995
  4495. ,    0,    0,    0,    0,    0,    0,    0,96494,    0,    0
  4496. ,256026,    0,    0,    0,    0,    0,    0,    0,    0,107508
  4497. ,256036,    0,    0,    0,124016,    0,85511,    0,    0,    0
  4498. ,    0,146027,146028,146029,85519,85520,85521,85522,    0,85524
  4499. ,85525,85526,    0,85528,    0,    0,85531,    0,91034,    0
  4500. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4501. ,    0,146057,146058,146059,    0,    0,    0,    0,41545,    0
  4502. ,    0,    0,146068,    0,267092,    0,    0,    0,91064,    0
  4503. ,118571,    0,256098,    0,    0,    0,    0,    0,    0,107578
  4504. ,    0,    0,    0,256109,256110,41572,    0,41574,    0,    0
  4505. ,107589,41578,129595,129596,129597,    0,    0,96594,    0,    0
  4506. ,41587,    0,107601,146109,    0,    0,    0,272636,41595,41596
  4507. ,    0,    0,256138,    0,41601,    0,    0,    0,107617,107618
  4508. ,41607,278151,129625,    0,    0,    0,107625,    0,    0,140634
  4509. ,    0,129634,    0,    0,256160,    0,256162,    0,256164,256165
  4510. ,    0,    0,    0,    0,85639,    0,    0,    0,107647,107648
  4511. ,    0,    0,107651,223173,    0,    0,261683,261684,    0,    0
  4512. ,    0,    0,146168,146169,146170,    0,    0,    0,146174,    0
  4513. ,102168,    0,    0,    0,129677,    0,85671,    0,    0,146185
  4514. ,146186,    0,    0,91179,162693,    0,    0,    0,    0,261716
  4515. ,146196,146197,    0,    0,    0,    0,    0,    0,    0,    0
  4516. ,    0,    0,    0,    0,    0, 8686,    0,85702,85703,85704
  4517. ,    0,223231,85707,    0, 8695,    0,    0,85712,    0,    0
  4518. ,    0,190235,    0,    0,    0,    0,    0,206744,41715,    0
  4519. ,    0,    0,    0,129736,    0,129738,    0,    0,30723,129742
  4520. ,    0,113241,96739,    0,41731,    0,    0,    0,129751,129752
  4521. ,129753,    0,    0,    0,    0,    0,    0,    0,129761,    0
  4522. ,41747,    0,    0,    0,129767,    0,    0,162776,    0,    0
  4523. ,261797,261798,    0,261800,91270,    0,    0,    0,    0,    0
  4524. ,    0,    0,    0,    0,190298,    0,    0,    0,146294,    0
  4525. ,    0,41778,    0,    0,190308,    0,    0,    0,    0,    0
  4526. ,    0,    0,162811,261830,    0,162814,    0,162816,    0,    0
  4527. ,14292,    0,    0,    0,    0,    0,    0,85812,85813,85814
  4528. ,    0,    0,261849,    0,    0,261852,261853,    0,261855,261856
  4529. ,    0,    0,    0,    0,228855,    0,    0,    0,    0,    0
  4530. ,85835,85836,85837,85838,    0,85840,85841,85842,85843,85844
  4531. ,    0,    0,85847,    0,    0,    0,    0,    0,    0,    0
  4532. ,    0,    0,118863,41850,    0,    0,    0,190381,190382,162878
  4533. ,190384,    0,    0,    0,41861,    0,129879,    0,    0,    0
  4534. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4535. ,    0,    0,    0,    0,    0,190409,190410,272926,    0,91395
  4536. ,190414,41888,41889,41890,    0,91401,    0,    0,    0,    0
  4537. ,129913,    0,    0,162922,    0,    0,41903,190431,190432,190433
  4538. ,190434,    0,190436,190437,    0,    0,    0,41914,    0,    0
  4539. ,    0,    0,    0,    0,    0,162944,    0,162946,    0,    0
  4540. ,129943,129944,162951,    0,    0,    0,278476,    0,195963,    0
  4541. ,25434,    0,    0,    0,    0,    0,    0,    0,102456,25443
  4542. ,25444,    0,    0,    0,    0,168475,    0,    0,    0,    0
  4543. ,    0,    0,    0,    0,74967,    0,    0,    0,47466,47467
  4544. ,47468,    0,    0,47471,    0,    0,    0,    0,    0,    0
  4545. ,    0,    0,    0,    0,    0,118996,    0,    0,    0, 3479
  4546. ,    0,    0,    0,    0,    0,196020,    0,    0,    0,113509
  4547. ,    0,    0,113512,    0,    0,    0,    0,    0,    0,    0
  4548. ,    0,    0,130025,    0,    0,    0,    0,    0,    0,    0
  4549. ,    0,    0,    0,    0,    0,    0,240059,    0,113538,    0
  4550. ,    0,    0,    0,207060,42031,    0,25530,    0,    0,130052
  4551. ,    0,130054,    0,168563,    0,130058,    0,    0,    0,69551
  4552. ,    0,    0, 3542,    0, 3544,    0,    0, 3547,152075,    0
  4553. , 3550,    0,    0,130076,130077,    0,    0,    0,    0,130082
  4554. ,130083,130084,163091,    0,    0,245609,    0,    0,47576,47577
  4555. ,47578,    0,    0,113593,47582, 3575,    0,    0,    0,    0
  4556. ,    0,218120,    0,    0,    0,    0,42093,42094,    0,    0
  4557. ,108109,    0,    0,    0,    0,    0,    0,42104,    0,47607
  4558. ,    0,    0,113622,163132,    0,    0,251151,    0,    0,    0
  4559. ,    0,    0,    0,284164,    0,    0,    0,256663,108137,108138
  4560. ,108139,108140,    0,    0,    0, 3625,    0,108146,295181,108148
  4561. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4562. ,    0,157669,    0,    0,53153,    0,    0,119168,119169,212687
  4563. ,212688,    0, 3652, 3653, 3654,    0,    0,    0, 3658,42166
  4564. ,    0,    0,    0,    0, 3664,    0,    0, 3667, 3668, 3669
  4565. ,    0, 3671, 3672,    0,    0, 3675,    0,    0,    0,119200
  4566. , 3680, 3681,    0, 3683, 3684,119206,    0,    0,    0,    0
  4567. ,    0,108210,    0,    0,    0,    0,179728,42204,42205,42206
  4568. ,    0,    0,    0,    0,163233,163234,    0,    0,    0,163238
  4569. ,251255,251256,    0,    0,    0,    0,    0,    0,    0,    0
  4570. ,42227,42228,    0,42230,    0,42232,    0,    0,    0,    0
  4571. ,    0,    0,    0,163262,    0,    0,    0,    0,163267,    0
  4572. ,251285,251286,251287,251288,295297,295298,251291,    0,    0,    0
  4573. ,    0,251296,108271,108272,108273,108274,    0,108276,108277,108278
  4574. ,    0,    0,    0,    0,108283,    0,196301,    0,196303,196304
  4575. ,    0,    0,    0,    0,    0,    0,223816,    0,47786,47787
  4576. ,    0,    0,    0,    0,    0,47793,    0,119308,    0,119310
  4577. ,    0,    0,    0,119314,    0,    0,    0,    0,262345,    0
  4578. ,    0,    0,    0,223843,    0,    0,229347,    0,20311,    0
  4579. ,119331,119332,119333,    0,    0,119336,119337,119338,119339,119340
  4580. ,    0,    0,119343,    0,251369,251370,    0,251372,    0,124851
  4581. ,179862,    0,    0,    0,    0,    0,    0,    0,53347,207376
  4582. ,42347,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4583. ,196385,251396,251397,251398,    0,    0,31361,    0,    0,    0
  4584. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4585. ,    0,212909,    0,42380,    0,251420,    0,    0,    0,    0
  4586. ,    0,251426,251427,    0,    0,    0,    0,163416,    0,    0
  4587. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,69911
  4588. ,    0,    0,42409,42410,    0,    0,108425,    0,42415,152436
  4589. ,    0,42418,    0,42420,    0,    0,    0,    0,    0,    0
  4590. ,    0,    0,    0,    0,20427,    0,    0,    0,    0,251474
  4591. ,    0,    0,14934,14935,    0,    0,    0,    0,    0,14941
  4592. ,    0,14943,256988,    0,    0,    0,    0,240490,240491,    0
  4593. ,    0,267999,240495,    0,240497,    0,    0,240500,240501,    0
  4594. ,    0,240504,240505,    0,64475,    0,240509,    0,    0,36975
  4595. ,240513,    0,240515,    0,    0,42482,240519,    0,    0,240522
  4596. ,262527,    0,    0,    0,240527,    0,    0,97504,    0,97506
  4597. ,    0,295544,    0,    0,    0,240538,    0,    0,240541,    0
  4598. ,240543,    0,    0,37009,    0,    0,    0,108526,    0,    0
  4599. ,    0,    0,196547,42520,42521,42522,    0,    0,    0,42526
  4600. ,    0,    0,    0,    0,185557,240568,    0,    0,42535,    0
  4601. ,    0,37037,    0,    0,37040,224075,42543,    0,42545,42546
  4602. ,37046,42548,    0,    0,42551,    0,108565,    0,    0,    0
  4603. ,130573,108570,    0,    0,    0,    0,    0,158085,    0,    0
  4604. ,    0,    0,    0,    0,    0,    0,279116,    0,108587,108588
  4605. ,108589,    0,    0,108592,108593,108594,108595,108596,    0,    0
  4606. ,108599,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4607. ,    0,    0,    0,279143,    0,    0,246140,    0,    0,    0
  4608. ,    0,    0,    0,    0,37110,    0,    0,    0,    0,240652
  4609. ,240653,240654,    0,    0,    0,37121,    0,    0,    0,    0
  4610. ,    0,114141,    0,    0,    0,125147,    0,    0,273677,    0
  4611. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4612. ,    0,119662,37148,37149,37150,    0,    0,    0,37154,240692
  4613. ,    0,    0,    0,240696,    0,    0,    0,240700,240701,240702
  4614. ,240703,    0,240705,    0,    0,    0,    0,    0,    0,240712
  4615. ,    0,    0,37178,    0,37180, 4175,    0,37183,    0,    0
  4616. ,31685,    0,    0,    0,    0,240728,    0,    0,42695,42696
  4617. ,42697,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4618. ,    0,    0,    0,    0,240747,240748,240749,    0,    0,    0
  4619. ,    0,    0,    0,15215,    0,    0,    0,    0,42725,42726
  4620. ,42727,42728,    0,    0,    0,    0,    0,42734,    0,42736
  4621. ,    0,    0,    0,    0,229775,295788,15238,15239,    0,    0
  4622. ,    0,    0,    0,15245,    0,    0,    0,    0,    0,    0
  4623. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4624. ,    0,    0,    0,    0,    0,    0,    0,26271,    0,    0
  4625. ,    0,    0,    0,163802,    0,    0,    0,    0,    0,    0
  4626. ,64791,147307,    0,    0,    0,    0,    0,    0,    0,    0
  4627. ,    0,    0,    0,163822,70306,    0,    0,    0,    0,    0
  4628. ,    0,    0,42809,    0,130827,    0,    0,    0,119829,    0
  4629. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4630. ,    0, 9822,    0,    0,26328,    0,196861,    0,64839,42836
  4631. ,42837,42838,    0,    0,64845,42842,    0,    0,130861,    0
  4632. , 9841,    0,    0,    0,42851,    0,    0,    0,    0,    0
  4633. ,268398,    0,42859,42860,42861,    0,    0,42864,42865,42866
  4634. ,42867,42868,    0,    0,    0,    0,130889,130890,    0,130892
  4635. ,268418,    0,130895,163902,279424,130898,    0,130900,    0,    0
  4636. ,    0,    0,    0,    0,    0,224425,    0,290439,    0,290441
  4637. ,20893,    0,290444,    0,    0,    0,    0,    0,    0,    0
  4638. ,    0,    0,    0,    0,    0,    0,    0,    0,196943,    0
  4639. ,    0,169441,    0,114433,    0,    0,    0,290469,    0,    0
  4640. ,    0,20924,    0,290475,20927,    0,290478,    0,290480,    0
  4641. ,    0,    0,    0,224473,    0,    0,    0,    0,273987,130962
  4642. ,    0,    0,    0,    0,    0,235487,235488,    0,    0,    0
  4643. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,70471
  4644. ,    0,    0,    0,    0,    0,    0,274015,    0,    0,    0
  4645. ,219009,    0,42979,    0,    0,    0,    0,131000,131001,131002
  4646. ,    0,    0,    0,131006,    0,    0,    0,153014,153015,    0
  4647. ,    0,70503,    0,    0,    0,131018,    0,    0,    0,    0
  4648. ,131023,    0,    0,131026,43011,    0,    0,131030,    0,131032
  4649. ,    0,    0,131035,290565,    0,    0,246560,    0,    0,    0
  4650. ,    0,70533,70534,    0,70536,    0,    0,    0,290580,    0
  4651. ,    0,    0,70544,    0,    0,    0,43043,43044,    0,    0
  4652. ,    0,    0,    0,    0,    0,43052,    0,    0,10049,    0
  4653. ,    0,290603,290604,290605,    0,    0,    0,290609,290610,    0
  4654. ,    0,    0,257608,290615,268612,    0,26570,26571,257614,    0
  4655. ,257616,    0,    0,    0,    0,    0,109095,    0,    0,    0
  4656. ,    0,    0,26586,    0,26588,26589,    0,175118,    0,    0
  4657. ,    0,    0,54101,    0,    0,    0,26600,    0,    0,    0
  4658. ,26604,    0,    0,    0,    0,    0,    0,43114,    0,    0
  4659. ,    0,147637,    0,268661,    0,    0,    0,268665,43125,    0
  4660. ,    0,    0,    0,    0,120145,    0,186159,186160,186161,    0
  4661. ,    0,    0,    0,70645,70646,    0,    0,    0,70650,    0
  4662. ,    0,26645,26646,    0,    0,    0,    0,    0,    0,    0
  4663. ,    0,    0,    0,26657,    0,    0,    0,    0,    0,    0
  4664. ,    0,    0,    0,70675,70676,186198,252211,    0,43175,43176
  4665. ,    0,    0,257718,    0,43181,43182,    0,43184,    0,    0
  4666. ,43187,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4667. ,    0,    0,    0,    0,257740,257741,257742,131220,257744,257745
  4668. ,257746,    0,257748,    0,81718,257751,    0,26711,    0,26713
  4669. ,    0,224751,    0,    0,    0,    0,    0,    0,    0,    0
  4670. , 4720,    0,    0,252268,    0,    0,    0,    0,    0,    0
  4671. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,65250
  4672. ,186273,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4673. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4674. ,    0,    0,    0,    0,    0,263312,263313,186300,    0,186302
  4675. ,    0,    0,    0,    0,54283,    0,114796,    0,    0,    0
  4676. ,    0,    0,186315,186316,186317,186318,186319,186320,    0,    0
  4677. ,186323,186324,186325,    0,    0,186328,186329,    0,186331,186332
  4678. ,    0,26805,186335,114823,26808, 4805,    0,    0,    0,    0
  4679. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,274368
  4680. ,    0,    0,    0,    0,    0,    0,    0,246871,164357,    0
  4681. ,    0,    0,    0,186366,26838,26839,    0,    0,    0,    0
  4682. ,    0,    0,    0,    0,    0,26849,26850,26851,26852,    0
  4683. ,191884,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4684. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4685. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4686. ,    0,26885,26886,26887,    0,    0,    0,    0,    0,    0
  4687. ,    0,285442,    0,    0,    0,    0,    0,    0,26902,    0
  4688. ,241443,26905,    0,175434,    0,    0,120427,    0,54417,    0
  4689. ,54419,    0,26916,    0,    0,26919,26920,    0,142443,    0
  4690. ,241463,26925,    0,158951,    0,    0,142451,147953,    0,    0
  4691. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4692. ,186473,    0,    0,    0,164473,164474,    0,    0,    0,    0
  4693. ,    0,    0,    0,    0,70966,158983,158984,    0,26962,26963
  4694. ,26964,26965,26966,26967,26968,26969,26970,26971,    0,26973
  4695. ,    0,    0,    0,    0,214012,26979,    0,    0,70990,    0
  4696. ,    0,170011,252527,    0,    0,159013,159014,159015,159016,    0
  4697. ,    0,159019,54501,    0,    0,    0,    0,    0,131521,    0
  4698. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4699. ,    0,    0,    0,    0,170044,170045,    0,236059,    0,54528
  4700. ,54529,    0,    0,27027,27028,27029,    0,27031,27032,27033
  4701. ,27034,27035,    0,    0,    0,    0,    0,49045,    0,252584
  4702. ,236082,    0,    0,170073,    0,170075,    0,    0,    0,    0
  4703. ,    0,    0,170082,    0,170084,258101,    0,236099,159086,236101
  4704. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,159097
  4705. ,    0,247115,    0,    0,236116,115095,148102,    0,    0,236121
  4706. ,236122,    0,236124,236125,    0,236127,236128,236129,236130,236131
  4707. ,    0,236133,236134,    0,    0,    0,    0,    0,159126,236141
  4708. ,    0,236143,159130,    0,    0,247149,49114,    0,    0,27113
  4709. ,    0,    0,    0,    0,    0,32620,    0,27121,    0,159147
  4710. ,    0,    0,159150,27127,159152,159153,159154,    0,    0,    0
  4711. ,    0,159159,    0,247177,247178,247179,247180,    0,    0,247183
  4712. ,    0,    0,247186,    0,    0,    0,    0,131670,    0,    0
  4713. ,27154,27155,    0,71165,170184,170185,170186,    0,    0,    0
  4714. ,170190,27165,    0,27167,27168,    0,    0,    0,    0,    0
  4715. ,    0,    0,164701,    0,    0,    0,    0,170207,170208,170209
  4716. ,170210,    0,    0,170213,170214,170215,    0,230728,    0,170219
  4717. ,    0,    0,    0,27197,    0,    0,    0,    0,    0,    0
  4718. ,    0,    0,    0,    0,    0,    0,247250,    0,    0,    0
  4719. ,    0,82225,    0,214251,    0,    0,    0,247261,    0,    0
  4720. ,    0,    0,    0,    0,54733,    0,    0,    0,    0,    0
  4721. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4722. ,    0,    0,10743,    0,247288,    0,    0,214285,164777,148275
  4723. ,247294,    0,131775,    0,    0,    0,    0,    0,    0,    0
  4724. ,    0,    0,    0,    0,93280,175796,    0,247311,247312,247313
  4725. ,247314,    0,247316,247317,247318,    0,    0,214315,214316,247323
  4726. ,    0,214319,    0,    0,    0,131808,    0,    0,    0,    0
  4727. ,    0,    0,    0,    0,    0,    0,219835,    0,    0,219838
  4728. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4729. ,    0,    0,    0,    0,131837,131838,131839,131840,    0,    0
  4730. ,131843,    0,    0,131846,296877,    0,148352,214365,    0,131852
  4731. ,    0,    0,170362,    0,    0,82349,    0,    0,    0,    0
  4732. ,    0,    0,    0,    0,    0,120866,    0,    0,    0,    0
  4733. ,    0,263898,    0,49361,    0,    0,    0,    0,    0,214397
  4734. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4735. ,    0,    0,    0,    0,    0,    0,    0,186910,    0,    0
  4736. ,    0,    0,    0,    0,    0,    0,    0,    0,214426,32894
  4737. ,159418,    0,    0,    0,    0,32900,    0,    0,    0,    0
  4738. ,115420,    0,214440,214441,214442,214443,214444,    0,    0,214447
  4739. ,214448,    0,    0,    0,214452,214453,214454,    0,    0,    0
  4740. ,    0,    0,    0,32928,    0,    0,131949,131950,    0,    0
  4741. ,    0,    0,181464,98950,32939,    0,98953,    0,    0,    0
  4742. ,    0,    0,    0,    0,    0,    0,    0,98964,    0,    0
  4743. ,    0,    0,214490,131976,131977,131978,    0,131980,    0,    0
  4744. ,131983,    0,220001,    0,    0,82479,    0,231008,    0,71481
  4745. ,    0,    0,    0,187006,    0,192509,    0,    0,    0,    0
  4746. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4747. ,    0,    0,    0,    0,286045,    0,    0,    0,    0,    0
  4748. ,99017,286093,192576,121063,49550,269592,192578,159583,121076,99073
  4749. ,33061,231109,33073,225627,159615,159616,148614,93606,88105,93607
  4750. ,88106,214635,93613,231152,82625,38617,231153,38618,170643,38619
  4751. ,159645,38623,225659,159647,225660,159648,38626,22123,159651,121144
  4752. ,192658,11125,121150,55138,253181,121157,280688,121159,82652,55147
  4753. ,220183,121165,99161,82658,170677,115667,225689,121170,225691,121172
  4754. ,99168,225692,121173,99169,22155,99170,82667,22156,225695,99172
  4755. ,225698,99175,159697,82683,49677,170707,77190,286234,181715,22186
  4756. ,170714,154211,38690,22187,99202,22188,170716,99203,225741,159729
  4757. ,247760,154243,247761,154244,225762,38728,33227,71735,38729,242271
  4758. ,159756,38734,181761,159757,225773,181765,159761,209272,181767,159763
  4759. ,27739,247788,159772,159773,38751,33250,159774,154273,38752,33251
  4760. ,247791,159775,154274,38753,170778,159776,154275,38754,159779,38757
  4761. ,275301,159780,154279,38758,33257,159781,38759,159782,38760,154282
  4762. ,71767,159784,71768,159785,154284,71769,38763,170789,159787,225800
  4763. ,159788,225801,99278,225806,22269,264322,225815,264325,225818,225820
  4764. ,132303,225825,71797,225826,187319,170816,71798,242330,170817,71799
  4765. ,225828,170818,71800,225831,71803,225832,170822,220332,22296,71806
  4766. ,22297,225835,22298,192832,154325,264352,170835,264353,192840,170836
  4767. ,170840,33315,170844,82828,258862,247860,170846,181849,170847,22320
  4768. ,170848,22321,154346,22322,170851,22324,16823,247874,154357,247889
  4769. ,181877,231387,181878,154385,71870,154386,82873,82874,  359,99378
  4770. ,82875,82883,71881,225926,154413,225927,154414,225928,154415,121409
  4771. ,269944,93912,71908,236939,71909,38903,187431,71910,38904,181931
  4772. ,38905,181936,148930,88419,71927,  414,187449,71928,71939,38933
  4773. ,71940,38934,121457,38942,181978,121467,49954,171044,143539,72051
  4774. ,39045,275617,39074,220608,39075,72085,39079,72113,  600,72114
  4775. ,  601,259149,72115,286655,72116,286673,215160,72165,33658,237215
  4776. ,50181,176714,94199,72197,28189,270260,72224,72225,39219,72226
  4777. ,39220,220782,72255,39249,72256,39250,39258,17254,275843,198829
  4778. ,154843,39322,264888,143866,99858,154876,99866,99871,50362,39360
  4779. ,253902,171387,209899,182394,209904,99884,99885,44875,215414,99893
  4780. ,28380,154905,39384,154906,39385,33884,154907,39386,99899,39388
  4781. ,154911,39390,99902,39391,17387,154916,39395,99918,44908,154957
  4782. ,44937,99948,44938,259479,44940,100005,55997,155016,94505,259536
  4783. ,155017,155022,94511,94526,39516,155039,67023,155040,94529,155041
  4784. ,45021,12015,155042,100032,155044,100034,281568,155045,155051,94540
  4785. ,276086,12038,45048,39547,12042,45050,12044,100076,83573,39565
  4786. ,100078,67072,100082,45072,39571,199101,100083,45073,100084,45074
  4787. ,100086,94585,45076,199105,100087,94586,45077,100088,94587,45078
  4788. ,12072,100089,94588,45079,100090,94589,45080,100091,94590,100092
  4789. ,94591,100093,94592,12077,160605,100094,94593,12078,94594,12079
  4790. ,94595,12080,160608,94596,89095,12081,94597,12082,100102,12086
  4791. ,94603,83601,94604,83602,12089,94605,12090,100108,12092,83606
  4792. ,12093,100127,83624,100128,83625,100129,83626,155142,116635,83629
  4793. ,155143,83630,155144,83631,210208,72683,210211,39680,100193,39682
  4794. ,276249,39706,259767,94737,259809,94779,177307,94792,210322,72797
  4795. ,232332, 1290,232335,210331,210333,127818,210341,204840,56313,210344
  4796. ,34312, 1306,210345, 1307,210347,50818, 1309,243363,12321,270877
  4797. ,72841,105863,72857,39851,72858,39852,199385,72862,226891,199386
  4798. ,199387,149878,199388,72865,72873, 1360,72887,39881,72888,39882
  4799. ,270925,243420,105895,39883,105896,39884,105897,72891,226924,39890
  4800. ,133432,105927,39915,226953,105931,226956,105934,226959,122440,210474
  4801. ,116957,182980,39954,293012,67471,227026,39992,72999,39993,227037
  4802. ,183029,210536,40005,183035,106021,40009,199550,40021,117037,40023
  4803. ,271066,106036,40024,106037,73031,106038,73032,194055,73033,40027
  4804. ,227064,106042,221577,128060,117058,227087,106065,67558,227088,106066
  4805. , 1547,227089,117069,106067,73061,18051, 1548,227090,106068,73062
  4806. , 1549,100568,73063,227092,73064,227093,106071, 1552,227095,73067
  4807. ,227099,111578,122616,117115,243639,117116,73134,40128,205161,34630
  4808. ,122673, 1651,243703,73172,243704,106179,73173, 1660,73203,40197
  4809. ,106211,40199,106212,40200,106213,73207,122724,117223,227252,161240
  4810. ,254764,122740,243813,221809,172300,243818,106293,254837,243835,243837
  4811. ,89809,243844,122822,128376,106372,249404,133883,106378,133885,106380
  4812. ,106381,89878,243985,177973,177974,89958,177984,122974,255028,123004
  4813. ,178025,68005,23997,255044,205535,255060,178046,260599,178084,178090
  4814. ,112078,266119,178103,178109,24081,178112,161609,255128,178114,161611
  4815. ,178115,161612,178116,161613,255134,62599,255137,161620,293649,255142
  4816. ,183670,62648,260704,194692,249720,68187,222220,183713,194773, 2238
  4817. ,183772,156267, 2239,183773,156268,244289,183778,183787, 2254,238798
  4818. ,183788,183790, 2257,194794,183792,183795,95779,194805,183803,194834
  4819. ,29804,123328,13308,194850,189349,194856, 2321,282873,194857,40829
  4820. ,194858,40830, 2323,194860,40832,194861,156354,194863,40835,123355
  4821. ,40840,260927,51889,189416,117903,189418,117905,172917, 2386,238931
  4822. ,200424,172919,260936,238932,172920,249959,117935,238961,117939,238962
  4823. ,13421,266468,238963,238964,117942,183955,156450,194960,90441,156456
  4824. ,51937,260976,238972,260978,156459,13433,249991,211484,117967,40953
  4825. ,13448,249992,46455,13449,249993,40955,13450,227990,40956,40958
  4826. ,13453,40959,13454,62964,40960,13455,156484,40963,40964,13459
  4827. ,156489,40968,13463,156490,40969,13464,156491,40970,13465,189498
  4828. ,156492,117985,40971,13466,156493,40972,13467, 2465,156494,13468
  4829. ,156496,40975,156497,13471,239013,173001,156498,128993,13472,128995
  4830. ,13474, 2472,156501,128996, 2473,156502,13476, 2474,156503,106994
  4831. ,13477,250021,13478,250022,156505,13479,277528,250023,13480,250024
  4832. ,184012,156507,46487, 7980,156509,46489,13483,250027,156510,156511
  4833. ,101501,250030,118006,118017,18999,173029, 2498,173030, 2499,239072
  4834. ,118050,239078,118056,239089,118067,239090,118068,239091,118069,112568
  4835. ,250094,239092,118070,239095,118073,239096,118074,239097,129077,118075
  4836. ,239098,118076,239101,118079,250105,239103,178601,52078,41076,250133
  4837. ,178620,250138,46601,283157,134630,250161,134640,250162,134641,244664
  4838. ,134644,46628,134645,46629,250167,162151,123644,46630,46656,41155
  4839. ,123671,46657,134683,118180,288726,173205,228220,162208,134708,30189
  4840. ,239233,79704,173234,52212,294257,173235,184238,173236,173239,52217
  4841. ,184248,156743,24719,211756,184251,211757,184252,184265,35738,184274
  4842. ,134765,211785,156775,211786,184281,211788,74263,211794,184289,184290
  4843. ,156785,228301,184293,250315,134794,156810,74295,156811,74296,156812
  4844. ,74297,173317,156814,129309,228328,184320,74300,228330,156817,156825
  4845. ,112817,211837,156827,112828,85323,140337,134836,74325,173344,74326
  4846. ,173345,134838,74327,173346,134839,74328,134842,74331, 2818,173350
  4847. ,134843,211858,134844,134845,74334,134847,74336,134848,112844,173356
  4848. ,134849,173357,134850,250372,134851,173359,134852,173360,134853,173361
  4849. ,134854,211869,173362,195368,173364,173367,112856,261385,173369,134862
  4850. ,173370,112859,173372,140366,85356,173373,85357,19345,184377,173375
  4851. ,134868,134887,112883,272413,211902,134888,74377,184404,96388,85386
  4852. ,184405,85387,211911,184406,85388,211914,206413,96393,85391,211916
  4853. , 8379,211919,85396,211924,96403,222927,211925,272453,178936,112928
  4854. ,74421,255963,184450,162446,184453,112940,184454,123943,228463,184455
  4855. ,112942,184456,74436,211962,184457,107443,74437,41431,206462,184458
  4856. ,74438,41432,184459,41433,184461,96445,184462,74442,184464,90947
  4857. ,184465,74445,184474,74454,206480,85458,74456,184480,74460,41454
  4858. ,228489,74461,255995,173480,74462,255997,74464,228493,74465,85469
  4859. ,74467,41461,74468,41462,107475,68968,41463,107476,41464,107477
  4860. ,74471,256025,96496,256027,85496,256028,85497,124005,85498,19486
  4861. ,256031,124007,124008,107505,124009,107506,85502,256034,118509,107507
  4862. ,124014,107511,107514,96512,107516,96514,85527,52521,206562,25029
  4863. ,140552,118548,41534,146060,91050,146063,91053,146066,129563,256112
  4864. ,41573,256136,113110,41597,256137,250636,41598,102111,41600,228636
  4865. ,41602,256142,41603,107616,41604,223143,195638,129626,107622,261651
  4866. ,146130,129627,140630,129628,129631,107627,256159,129636,256161,146141
  4867. ,256166,107639,256167,107640,256168,107641,107642,19626,256171,107644
  4868. ,223166,107645,223167,107646,261685,19641,146183,85672,146184,85673
  4869. ,162690,146187,118682,52670,146188,19665,146191,91181,261713,146192
  4870. ,91182,261714,146193,91183,19670,289220,261715,146194,261719,146198
  4871. ,146199,113193,146200,25178,261722,129698,261724,146203,129709,85701
  4872. ,85710, 8696,162743,129737,129754,113251,228773,129755,228774,190267
  4873. ,151760,129756,228775,190268,228776,190269,129759,124258,129760,124259
  4874. ,261786,129762,129764,41748,129765,41749,129766,124265,69255,129768
  4875. ,91261,162775,124268,162777,129771,91275,85774,190297,69275,217804
  4876. ,190299,190300,146292,190303,146295,146296,85785,41777,190306,41779
  4877. ,52782,41780,162805,41783,261824,162806,261825,162807,261826,162808
  4878. ,96796,41786,41788, 8782,261847,256346,261848,256347,19804,261850
  4879. ,85818,261854,256353,118832,25315,261859,118833,85827,201372,190370
  4880. ,190378,140869,162889,118881,272923,190408,162916,41894,162917,129911
  4881. ,91404,162918,129912,190438,41911,190439,41912,190440,41913,190443
  4882. ,41916,162939,41917,162940,41918,162941,41919,162942,41920,162945
  4883. ,41923,278468,162947,129941,162948,129942,250969,129947,129950,47435
  4884. ,129952,47437,289509,47465,130014,113511,229052, 3511,53021, 3512
  4885. ,124535, 3513,163059,130053,97047,168571,47549, 3541,267591, 3543
  4886. ,130075, 3552,273104,130078,108075,42063,130080,42064,130081,42065
  4887. ,163092,75076,163093,130087,108107,42095,108108,42096,163121,42099
  4888. ,201629,163122, 3593,163123,47602,163124,42102,163127,47606,113620
  4889. ,47608,163130,113621,119135, 3614,229165,108143,119167,53155,163194
  4890. , 3665,42177, 3670,163205,119197, 3676,119198, 3677,251223,119199
  4891. , 3678,119203, 3682,119208, 3687,240245,108221,163232,42210,251257
  4892. ,42219,196257,42229,163255,42233,163256,42234,163257,42235,163258
  4893. ,108248,42236,130253,108249,163260,108250,163261,42239,163263,130257
  4894. ,163264,108254,251294,130272,119270,119281,108279,168791,108280,251333
  4895. ,119309, 3788,251358,119334,278870,113840,168879,31354,251402,168887
  4896. ,108391,42379,251419,42381,251421,97393,251422,196412,196413,97395
  4897. ,251424,196414,97396,251425,14882,251428,130406,251431,14888,108423
  4898. ,69916,42411,108424,42412,201967,14933,256980,108453,20437,240478
  4899. ,108454,108455,14938,240480,108456,108459,14942,240486,108462,240488
  4900. ,108464,97477,53469,240529,42493,202024,97505,295545,119513,240544
  4901. ,37007,147028,37008,108537,64529,229570,147055,218571,37038,240576
  4902. ,37039,42544,37043,42549,37048,202079,42550,108564,42552,108566
  4903. ,15049,42555,15050,15061, 9560,251616,108590,262629,240625,240695
  4904. ,207689,240697,169184,240698,207692,240699,42663,240704,213199,240706
  4905. ,218702,240707,213202,240708,37171,240709,37172,240710,37173,240711
  4906. ,37174,240713,37176,240714,196706,37177,37179, 4173,240722,125201
  4907. ,31684,257245,130722,163753,42731,290343,229832,163820,42798,268349
  4908. ,15303,130859,92352,130860, 9838,290407,42862,42871, 4364,268416
  4909. ,130891,290440,20891,290470,130941,20921,290471,20922,290472,20923
  4910. ,235485,224483,268498,130973,86965,290542,186023,120011,131015,70504
  4911. ,186026,131016,70505,153021,131017,131019,32001,257543,131020,290553
  4912. ,131024,131025,21005,131028,43012,131029,43013,131031,98025,274072
  4913. ,70535,235569,70539,290581,257575,21032,290582,257576,70542,21033
  4914. ,257577,21034,290586,257580,43041,43042,21038,131063,43047,131066
  4915. ,43050,290606,235596,235597,164084,70567,21058,10056,290608,235598
  4916. ,10057,290611,257605,21062,290612,257606,169590,21063,257607,26565
  4917. ,21064,257611,26569,268621,70585,186127,70606,268643,26599,87114
  4918. ,26603,70617,26609,257678,70644,257689,92659,26647,70656,26648
  4919. ,70657,43152,26649,43153,26650,70659,43154,26651,70660,26652
  4920. ,70661,26653,274199,70662,26654,70663,43158,26655,268700,92668
  4921. ,70664,26656,257701,70667,186189,70668,186190,70669,186191,70670
  4922. ,186192,147685,26663,70672,43167,26664,70673,26665,186195,70674
  4923. ,186200,70679,257716,43177,257717,43178,120194,43180,257722,158704
  4924. ,43183,10177,120212,48699,257739,120214,274250,257747,224748,186241
  4925. ,26712,186262,76242,65262, 4751,186301,70780,186306,120294,186326
  4926. ,26797,186330,180829,180832,147826,26804,246868,98341,70855,43350
  4927. ,268959,54420,26915,158985,26961,269016,26972,203012,148002,26980
  4928. ,230518,26981,159022,148020,159024,148022,170043,131536,54530,27025
  4929. ,236086,170074,236088,170076,236091,170079,236123,115101,10582,236126
  4930. ,115104,236135,208630,208631,87609,236138,159124,236139,159125,236142
  4931. ,208637,247147,208640,247148,49112,170146,27120,98635,32623,27122
  4932. ,159148,43627,27124,159149, 5121,170157,159155,236170,170158,159156
  4933. ,170160,109649,291196,247188,247206,27166,164704,98692,170212,27186
  4934. ,170216,49194,296761,175739,247289,214283,159273,247290,214284,164775
  4935. ,247319,214313,247320,214314,214322,131807,214324,131809,296878,131848
  4936. ,225388,214386,131889,32871,214424,186919,214425,186920,131910,214430
  4937. ,115412,236440,131921,32903,214439,49409,214449,208948,214450,87927
  4938. ,214455,98934,214456,98935,214459,27425,131948,60435,131954,32936
  4939. ,131963,32945,131964,32946,131965,32947,131966,32948, 5443,131967
  4940. ,32949,131968,32950,131971,32953,131972,32954,131973,32955,275000
  4941. ,131974,98968,131979,120977,280547,99014,82511,99015,82512,99016
  4942. ,82513,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4943. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4944. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4945. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4946. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4947. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4948. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4949. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4950. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4951. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4952. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4953. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4954. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4955. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4956. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4957. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4958. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4959. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4960. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4961. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4962. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4963. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4964. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4965. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4966. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4967. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4968. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4969. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4970. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4971. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4972. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4973. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4974. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4975. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4976. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4977. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4978. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4979. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4980. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4981. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4982. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4983. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4984. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4985. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4986. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4987. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4988. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4989. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4990. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4991. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4992. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4993. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4994. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4995. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4996. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4997. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4998. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4999. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5000. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5001. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5002. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5003. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5004. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5005. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5006. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5007. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5008. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5009. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5010. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5011. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5012. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5013. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5014. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5015. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5016. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5017. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5018. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5019. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5020. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5021. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5022. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5023. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5024. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5025. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  5026. ,    0,    0,    0,    0,    0,    0)  ;
  5027.         --| Hash values to check against to verify that
  5028.         --| correct action has been found for this
  5029.         --| parser state and input token.
  5030.         -- NYU Reference Name: ACTION_TABLE2
  5031.  
  5032.     DefaultMap :
  5033.         constant array (DefaultMapRange) of GC.ParserInteger :=
  5034.          ( 1396,    0,    0,    0,    0, 1394,    0, 1225, 1214, 1395
  5035. ,    0, 1216,    0, 1404,    0,    0,    0, 1218, 1219, 1220
  5036. , 1221, 1222, 1223,    0,    0, 1275, 1275, 1217, 1224,    0
  5037. ,    0,    0, 1275, 1097,    0, 1098, 1080,    0, 1079, 1041
  5038. , 1040,    0, 1095, 1096,    0, 1318, 1338, 1081, 1042, 1043
  5039. , 1044, 1084, 1063, 1324, 1066, 1067, 1068, 1069, 1070, 1071
  5040. , 1074, 1075, 1342, 1347, 1345,    0, 1085, 1082, 1083,    0
  5041. , 1321, 1161, 1162,    0, 1240,    0,    0, 1157,    0, 1275
  5042. , 1156, 1171, 1306,    0, 1022,    0, 1362, 1237,    0,    0
  5043. , 1238, 1239, 1400, 1398, 1397, 1288, 1106,  978, 1287,    0
  5044. ,    0, 1039,    0,    0, 1081, 1304,    0, 1315, 1313, 1062
  5045. ,    0, 1340,    0, 1088, 1086, 1090,    0, 1087, 1091, 1089
  5046. , 1072,    0,    0,    0,    0,    0,    0, 1320,    0, 1065
  5047. ,    0,    0,    0,    0,    0,    0,    0,    0, 1094, 1092
  5048. , 1093,    0, 1101, 1102, 1099, 1100,    0, 1103, 1076,    0
  5049. , 1081, 1077, 1343,    0,    0,    0,    0,    0, 1285,    0
  5050. , 1405,    0, 1174,    0,    0,    0,    0, 1371,    0, 1276
  5051. , 1362,    0,    0, 1275,    0,    0,    0,    0,  946, 1024
  5052. ,  947,  948,  949,  950,  951,  952,  953,  954,  955,  956
  5053. ,    0,  963,  964,  965, 1275, 1025, 1026,    0,    0, 1263
  5054. , 1264, 1265, 1266,    0,    0, 1275, 1034, 1035, 1036, 1037
  5055. , 1038,    0, 1275, 1279, 1362, 1144, 1363,    0,    0,    0
  5056. ,    0, 1275,    0,    0,    0,    0,    0,    0, 1078,    0
  5057. ,    0, 1018,    0, 1056,    0, 1057, 1315, 1215, 1341, 1319
  5058. , 1005, 1073, 1339,  984, 1054, 1053, 1055, 1052, 1051, 1104
  5059. , 1105,    0, 1047, 1048, 1050, 1049, 1046, 1324, 1322,    0
  5060. ,    0, 1338, 1328,    0, 1330, 1332, 1329, 1331, 1333,    0
  5061. ,    0, 1344, 1346, 1348,    0, 1159, 1287,    0, 1369,    0
  5062. , 1406,  962, 1166,    0, 1177,    0, 1369,    0,    0, 1372
  5063. , 1373,    0,    0, 1172, 1039,    0, 1044,    0,    0,    0
  5064. ,    0, 1188,    0, 1374,    0, 1307,    0,    0, 1187,    0
  5065. ,    0, 1308, 1023, 1275, 1362,    0,    0,    0, 1176, 1174
  5066. ,    0, 1226, 1399,    0, 1109, 1108, 1289, 1327, 1323, 1317
  5067. , 1310, 1313, 1061, 1017,    0,    0, 1311, 1313, 1316,    0
  5068. , 1060,    0,    0, 1045, 1064, 1326, 1325, 1334, 1336, 1335
  5069. , 1337,    0, 1166,    0, 1164,    0,    0,    0,    0,    0
  5070. ,    0, 1167, 1283,    0,    0,    0,    0, 1230,    0,    0
  5071. , 1257, 1169,    0,  945,    0,    0,    0,    0, 1362,    0
  5072. , 1189, 1275,    0,    0, 1020,    0,    0,    0,    0, 1283
  5073. , 1283,  976,    0,    0,    0,    0, 1028, 1029, 1030, 1031
  5074. , 1033, 1027, 1032, 1275,    0,    0,    0,    0,    0,    0
  5075. ,    0,    0,    0,    0,    0,    0,    0, 1279, 1039,    0
  5076. , 1280,    0, 1279, 1111, 1112,    0, 1115, 1116, 1117, 1118
  5077. , 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128
  5078. , 1129, 1130, 1351,    0,    0, 1198, 1199, 1200, 1145, 1281
  5079. , 1175, 1401, 1107, 1315, 1016, 1305, 1312, 1315, 1314, 1006
  5080. ,  985,    0, 1255, 1165, 1283,    0,    0,    0,    0,    0
  5081. ,    0,    0, 1250,    0,    0,  998, 1251, 1252,  997,    0
  5082. ,    0, 1300, 1408, 1407, 1244, 1286, 1168,    0,    0,    0
  5083. , 1253, 1158,    0, 1275,    0,    0, 1262, 1409, 1259,    0
  5084. , 1411,    0,    0, 1275,    0,    0,    0,    0, 1173,    0
  5085. ,  976, 1275, 1376, 1378,    0,    0,    0,    0,    0, 1275
  5086. ,    0,    0,  968,  969,  970,  971,  972,  973,  974,  990
  5087. ,  991,  992, 1292, 1292, 1300,    0, 1182,    0,    0,    0
  5088. , 1283, 1283,    0, 1231,    0,    0,    0,    0,  977,  979
  5089. ,  980,  981, 1186, 1177, 1193, 1309, 1227, 1192, 1392, 1384
  5090. ,    0,    0,    0, 1149,    0,    0, 1135, 1354,    0, 1132
  5091. , 1235,    0, 1153,    0,    0, 1388,    0,    0,    0, 1170
  5092. ,    0, 1349,    0, 1113, 1114, 1352,    0, 1279,    0,    0
  5093. , 1275, 1362,    0,    0, 1059, 1058, 1409, 1163,    0, 1370
  5094. , 1019,    0, 1248, 1247, 1249, 1246,    0, 1242,    0,    0
  5095. , 1284, 1241, 1409,    0,    0,    0,    0,    0,    0, 1413
  5096. ,    0, 1275,    0, 1268, 1267, 1185,  975, 1378,    0,    0
  5097. , 1275,  996,  994,    0,  983, 1180,    0,    0, 1298,  988
  5098. ,  989, 1290,  987,  966, 1293,  993,  995,    0, 1375, 1081
  5099. , 1296, 1004,    0,    0,    0,    0,    0,  957,  959,    0
  5100. ,    0,    0,    0,    0,    0,    0, 1281, 1197,    0,    0
  5101. , 1151, 1155, 1356, 1279, 1236, 1154,    0,    0,    0, 1279
  5102. , 1279, 1279, 1203, 1204, 1205, 1206, 1356, 1131,    0,    0
  5103. , 1279,    0,    0, 1141, 1279, 1362,    0,    0, 1282, 1367
  5104. , 1366, 1146,    0, 1160, 1294, 1081, 1245, 1283,    0,    0
  5105. ,    0, 1193,    0,    0, 1412,  944, 1273,    0,    0,    0
  5106. , 1275,    0,    0, 1380, 1362, 1275, 1377, 1178, 1275,    0
  5107. ,    0,    0,    0, 1003,    0, 1000,  961,  958,  960, 1184
  5108. , 1183,  982, 1228, 1229,    0, 1212,    0,    0, 1369, 1279
  5109. , 1195,    0, 1150,    0, 1279,    0,    0, 1353, 1279,    0
  5110. ,    0, 1391, 1208,    0, 1207, 1279,    0, 1274, 1133, 1350
  5111. ,    0,    0,    0,    0, 1148, 1234, 1233, 1402, 1368,    0
  5112. ,    0,    0, 1012,    0, 1301,    0, 1258, 1410,    0,    0
  5113. ,    0, 1414,    0, 1362,    0,    0, 1190, 1379, 1010, 1007
  5114. ,    0,    0, 1275, 1275,  986,    0,    0, 1021, 1002,    0
  5115. , 1393, 1386,    0,    0,    0, 1358, 1152, 1357,    0,    0
  5116. , 1209,    0, 1279, 1279,    0, 1389,    0,    0, 1142, 1362
  5117. ,    0, 1147,    0, 1256,    0,    0, 1001,    0, 1254, 1272
  5118. , 1269,    0,    0, 1191,    0, 1369, 1194,    0,    0,    0
  5119. , 1009, 1291,    0,    0,    0, 1297,    0, 1385, 1362,    0
  5120. , 1304,    0, 1279,    0, 1202,    0,    0,    0, 1143,    0
  5121. , 1362,    0, 1279,    0, 1295,    0, 1243,    0, 1270, 1382
  5122. ,    0, 1277, 1283,    0, 1181,  967, 1369,    0, 1279,    0
  5123. ,    0, 1359, 1355, 1134,    0,    0, 1201, 1139,    0, 1403
  5124. , 1232,  999,    0, 1271,    0, 1381,    0,    0, 1179,    0
  5125. , 1196, 1138, 1279,    0,    0,    0, 1140, 1369,    0, 1278
  5126. , 1302, 1011, 1387, 1137, 1136, 1210,    0,    0,    0, 1304
  5127. ,    0, 1211, 1383, 1275,    0,    0, 1303, 1015, 1275,    0
  5128. , 1014, 1013)  ;
  5129.         --| Map of states (constant array index) to default reductions.
  5130.         -- NYU Reference Name: DEFAULT
  5131.   
  5132.     type FollowSymbolIndexArray is array ( PositiveParserInteger range <>)
  5133.         of GC.ParserInteger ;
  5134.  
  5135.     FollowSymbolMapIndex : constant FollowSymbolIndexArray :=
  5136.          (    1,    1,    2,    2,    3,    3,    4,   43,   44,   57
  5137. ,   58,   71,   72,   85,   86,   99,  100,  113,  114,  130
  5138. ,  131,  147,  148,  161,  162,  178,  179,  192,  193,  209
  5139. ,  210,  223,  224,  224,  225,  226,  227,  228,  229,  230
  5140. ,  231,  237,  238,  239,  240,  253,  254,  267,  268,  281
  5141. ,  282,  282,  283,  284,  285,  286,  287,  287,  288,  288
  5142. ,  289,  289,  290,  290,  291,  291,  292,  292,  293,  293
  5143. ,  294,  327,  328,  329,  330,  363,  364,  370,  371,  372
  5144. ,  373,  374,  375,  396,  397,  398,  399,  400,  401,  402
  5145. ,  403,  405,  406,  407,  408,  410,  411,  411,  412,  413
  5146. ,  414,  415,  416,  416,  417,  450,  451,  453,  454,  455
  5147. ,  456,  465,  466,  467,  468,  488,  489,  490,  491,  495
  5148. ,  496,  498,  499,  500,  501,  502,  503,  504,  505,  506
  5149. ,  507,  508,  509,  521,  522,  523,  524,  532,  533,  540
  5150. ,  541,  554,  555,  568,  569,  584,  585,  593,  594,  605
  5151. ,  606,  614,  615,  626,  627,  638,  639,  650,  651,  684
  5152. ,  685,  718,  719,  753,  754,  787,  788,  822,  823,  823
  5153. ,  824,  853,  854,  855,  856,  856,  857,  858,  859,  860
  5154. ,  861,  861,  862,  863,  864,  865,  866,  867,  868,  877
  5155. ,  878,  885,  886,  893,  894,  901,  902,  909,  910,  917
  5156. ,  918,  927,  928,  938,  939,  963,  964,  992,  993, 1017
  5157. , 1018, 1047, 1048, 1076, 1077, 1105, 1106, 1112, 1113, 1142
  5158. , 1143, 1172, 1173, 1202, 1203, 1213, 1214, 1222, 1223, 1231
  5159. , 1232, 1240, 1241, 1247, 1248, 1284, 1285, 1312, 1313, 1339
  5160. , 1340, 1365, 1366, 1371, 1372, 1398, 1399, 1425, 1426, 1445
  5161. , 1446, 1472, 1473, 1499, 1500, 1526, 1527, 1553, 1554, 1580
  5162. , 1581, 1607, 1608, 1634, 1635, 1661, 1662, 1688, 1689, 1715
  5163. , 1716, 1742, 1743, 1769, 1770, 1796, 1797, 1823, 1824, 1850
  5164. , 1851, 1877, 1878, 1897, 1898, 1900, 1901, 1903, 1904, 1904
  5165. , 1905, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1917
  5166. , 1918, 1918, 1919, 1919, 1920, 1922, 1923, 1925, 1926, 1926
  5167. , 1927, 1928, 1929, 1931, 1932, 1933, 1934, 1935, 1936, 1938
  5168. , 1939, 1939, 1940, 1940, 1941, 1941, 1942, 1942, 1943, 1955
  5169. , 1956, 1968, 1969, 1970, 1971, 1971, 1972, 1974, 1975, 1976
  5170. , 1977, 1988, 1989, 1989, 1990, 1993, 1994, 1995, 1996, 2022
  5171. , 2023, 2049, 2050, 2076, 2077, 2079, 2080, 2082, 2083, 2085
  5172. , 2086, 2088, 2089, 2091, 2092, 2094, 2095, 2097, 2098, 2099
  5173. , 2100, 2107, 2108, 2109, 2110, 2117, 2118, 2122, 2123, 2130
  5174. , 2131, 2138, 2139, 2144, 2145, 2146, 2147, 2154, 2155, 2156
  5175. , 2157, 2158, 2159, 2160, 2161, 2161, 2162, 2164, 2165, 2170
  5176. , 2171, 2176, 2177, 2177, 2178, 2178, 2179, 2180, 2181, 2182
  5177. , 2183, 2184, 2185, 2185, 2186, 2187, 2188, 2201, 2202, 2215
  5178. , 2216, 2229, 2230, 2243, 2244, 2247, 2248, 2252, 2253, 2257
  5179. , 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2270)  ;
  5180.   
  5181.     FollowSymbolMap : constant FollowSymbolArray :=
  5182.          (   96,   96,   72,    2,    4,   10,   12,   14,   15,   19
  5183. ,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29
  5184. ,   33,   37,   39,   42,   43,   44,   45,   46,   51,   53
  5185. ,   54,   55,   56,   57,   59,   60,   61,   62,   63,   65
  5186. ,   67,   68,   92,   10,   21,   25,   26,   27,   42,   43
  5187. ,   44,   45,   55,   56,   59,   60,   65,   10,   21,   25
  5188. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5189. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  5190. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  5191. ,   42,   43,   44,   45,   55,   56,   59,   60,   65,   10
  5192. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5193. ,   59,   60,   65,   10,   21,   25,   26,   27,   42,   43
  5194. ,   44,   45,   54,   55,   56,   59,   60,   63,   65,   96
  5195. ,   10,   21,   25,   26,   27,   42,   43,   44,   45,   54
  5196. ,   55,   56,   59,   60,   63,   65,   96,   10,   21,   25
  5197. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5198. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  5199. ,   54,   55,   56,   59,   60,   63,   65,   96,   10,   21
  5200. ,   25,   26,   27,   42,   43,   44,   45,   55,   56,   59
  5201. ,   60,   65,   10,   21,   25,   26,   27,   42,   43,   44
  5202. ,   45,   54,   55,   56,   59,   60,   63,   65,   96,   10
  5203. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5204. ,   59,   60,   65,   79,   80,   88,   72,   80,   80,   88
  5205. ,   31,   33,   58,   72,   75,   80,   85,   75,   79,   10
  5206. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5207. ,   59,   60,   65,   10,   21,   25,   26,   27,   42,   43
  5208. ,   44,   45,   55,   56,   59,   60,   65,   10,   21,   25
  5209. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5210. ,   65,   80,   72,   80,   72,   80,   80,   80,   80,   80
  5211. ,   80,   80,   80,    7,   16,   17,   30,   31,   33,   34
  5212. ,   36,   39,   47,   49,   50,   58,   64,   69,   71,   72
  5213. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  5214. ,   85,   86,   87,   88,   89,   90,   91,   80,   88,    7
  5215. ,   16,   17,   30,   31,   33,   34,   36,   39,   47,   49
  5216. ,   50,   58,   64,   69,   71,   72,   73,   74,   75,   76
  5217. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  5218. ,   89,   90,   91,   33,   72,   75,   80,   84,   85,   88
  5219. ,   80,   88,   80,   88,    7,   30,   31,   33,   36,   39
  5220. ,   47,   58,   64,   72,   75,   80,   81,   82,   83,   84
  5221. ,   85,   86,   88,   89,   90,   91,   72,   75,   72,   75
  5222. ,   72,   75,   47,   80,   88,   80,   88,   47,   80,   88
  5223. ,   80,   72,   75,   72,   75,   38,    7,    9,   30,   31
  5224. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   70
  5225. ,   71,   72,   73,   74,   75,   76,   77,   78,   80,   81
  5226. ,   82,   83,   84,   85,   86,   87,   88,   89,   90,   91
  5227. ,   33,   72,   75,   72,   75,    7,   31,   33,   39,   58
  5228. ,   64,   72,   75,   80,   85,   21,   61,   10,   12,   21
  5229. ,   22,   25,   26,   27,   42,   43,   44,   45,   54,   55
  5230. ,   56,   59,   60,   61,   63,   65,   67,   68,   12,   65
  5231. ,   12,   21,   43,   61,   65,   21,   43,   61,   43,   61
  5232. ,   21,   61,   21,   61,   84,   85,   84,   85,   10,   21
  5233. ,   25,   26,   27,   42,   44,   45,   55,   56,   59,   60
  5234. ,   65,   10,   21,   10,   21,   26,   27,   42,   43,   45
  5235. ,   56,   60,   10,   21,   26,   27,   42,   45,   56,   60
  5236. ,   10,   21,   25,   26,   27,   42,   43,   44,   45,   55
  5237. ,   56,   59,   60,   65,   10,   21,   25,   26,   27,   42
  5238. ,   43,   44,   45,   55,   56,   59,   60,   65,   10,   21
  5239. ,   25,   26,   27,   42,   43,   44,   45,   54,   55,   56
  5240. ,   59,   60,   63,   65,   10,   21,   26,   27,   42,   43
  5241. ,   45,   56,   60,   10,   21,   26,   27,   42,   43,   45
  5242. ,   54,   56,   60,   63,   96,   10,   21,   26,   27,   42
  5243. ,   43,   45,   56,   60,   10,   21,   26,   27,   42,   43
  5244. ,   45,   54,   56,   60,   63,   96,   10,   21,   26,   27
  5245. ,   42,   43,   45,   54,   56,   60,   63,   96,   10,   21
  5246. ,   26,   27,   42,   43,   45,   54,   56,   60,   63,   96
  5247. ,    7,    9,   30,   31,   33,   34,   36,   39,   47,   49
  5248. ,   58,   64,   69,   70,   71,   72,   73,   74,   75,   76
  5249. ,   77,   78,   80,   81,   82,   83,   84,   85,   86,   87
  5250. ,   88,   89,   90,   91,    7,    9,   30,   31,   33,   34
  5251. ,   36,   39,   47,   49,   58,   64,   69,   70,   71,   72
  5252. ,   73,   74,   75,   76,   77,   78,   80,   81,   82,   83
  5253. ,   84,   85,   86,   87,   88,   89,   90,   91,    7,    9
  5254. ,   30,   31,   33,   34,   36,   39,   47,   49,   58,   60
  5255. ,   64,   69,   70,   71,   72,   73,   74,   75,   76,   77
  5256. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  5257. ,   89,   90,   91,    7,    9,   30,   31,   33,   34,   36
  5258. ,   39,   47,   49,   58,   64,   69,   70,   71,   72,   73
  5259. ,   74,   75,   76,   77,   78,   80,   81,   82,   83,   84
  5260. ,   85,   86,   87,   88,   89,   90,   91,    7,    9,   30
  5261. ,   31,   33,   34,   36,   39,   47,   49,   58,   60,   64
  5262. ,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78
  5263. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5264. ,   90,   91,   72,    7,   30,   31,   33,   34,   36,   39
  5265. ,   47,   49,   58,   64,   69,   72,   73,   74,   75,   76
  5266. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  5267. ,   89,   90,   91,   72,   75,   72,   72,   75,   72,   75
  5268. ,   72,   72,   75,   72,   75,   72,   75,    7,   31,   33
  5269. ,   39,   58,   64,   72,   75,   80,   85,    7,   31,   33
  5270. ,   58,   72,   75,   80,   85,   31,   33,   39,   58,   72
  5271. ,   75,   80,   85,   31,   33,   58,   64,   72,   75,   80
  5272. ,   85,    7,   31,   33,   58,   72,   75,   80,   85,   31
  5273. ,   33,   39,   58,   72,   75,   80,   85,    7,   31,   33
  5274. ,   39,   58,   64,   72,   75,   80,   85,    3,   35,   36
  5275. ,   37,   65,   66,   67,   68,   71,   74,   76,    7,   30
  5276. ,   31,   33,   36,   39,   47,   58,   64,   69,   72,   74
  5277. ,   75,   76,   80,   81,   82,   83,   84,   85,   86,   88
  5278. ,   89,   90,   91,    7,   30,   31,   33,   34,   36,   39
  5279. ,   47,   49,   58,   64,   69,   72,   73,   74,   75,   76
  5280. ,   78,   80,   81,   82,   83,   84,   85,   86,   88,   89
  5281. ,   90,   91,    7,   30,   31,   33,   36,   39,   47,   58
  5282. ,   64,   69,   72,   74,   75,   76,   80,   81,   82,   83
  5283. ,   84,   85,   86,   88,   89,   90,   91,    7,   30,   31
  5284. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   72
  5285. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  5286. ,   85,   86,   87,   88,   89,   90,   91,    7,   30,   31
  5287. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   72
  5288. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  5289. ,   85,   86,   88,   89,   90,   91,    7,   30,   31,   33
  5290. ,   34,   36,   39,   47,   49,   58,   64,   69,   72,   73
  5291. ,   74,   75,   76,   78,   80,   81,   82,   83,   84,   85
  5292. ,   86,   88,   89,   90,   91,   35,   37,   65,   66,   67
  5293. ,   68,   71,    7,   30,   31,   33,   34,   36,   39,   47
  5294. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  5295. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5296. ,   90,   91,    7,   30,   31,   33,   34,   36,   39,   47
  5297. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  5298. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5299. ,   90,   91,    7,   30,   31,   33,   34,   36,   39,   47
  5300. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  5301. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5302. ,   90,   91,    3,   35,   36,   37,   65,   66,   67,   68
  5303. ,   71,   74,   76,    3,   35,   36,   37,   65,   66,   67
  5304. ,   68,   71,    3,   35,   36,   37,   65,   66,   67,   68
  5305. ,   71,    3,   35,   36,   37,   65,   66,   67,   68,   71
  5306. ,   35,   37,   65,   66,   67,   68,   71,    7,   16,   17
  5307. ,   30,   31,   33,   34,   36,   39,   47,   49,   50,   58
  5308. ,   61,   64,   69,   70,   71,   72,   73,   74,   75,   76
  5309. ,   77,   78,   80,   81,   82,   83,   84,   85,   86,   87
  5310. ,   88,   89,   90,   91,    2,    4,   10,   12,   14,   15
  5311. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  5312. ,   39,   43,   46,   51,   53,   57,   61,   62,   65,   67
  5313. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  5314. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  5315. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  5316. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  5317. ,   25,   28,   29,   33,   37,   39,   46,   51,   53,   61
  5318. ,   62,   65,   67,   68,   92,   19,   20,   21,   23,   39
  5319. ,   61,    2,    4,   10,   12,   14,   15,   19,   20,   21
  5320. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  5321. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  5322. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  5323. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  5324. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  5325. ,   15,   24,   25,   28,   29,   33,   37,   46,   51,   53
  5326. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  5327. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  5328. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  5329. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  5330. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  5331. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  5332. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  5333. ,   25,   28,   29,   33,   37,   39,   43,   46,   51,   53
  5334. ,   61,   62,   65,   67,   68,   92,    2,    4,   10,   12
  5335. ,   14,   15,   19,   20,   21,   23,   24,   25,   28,   29
  5336. ,   33,   37,   39,   43,   46,   51,   53,   61,   62,   65
  5337. ,   67,   68,   92,    2,    4,   10,   12,   14,   15,   19
  5338. ,   20,   21,   23,   24,   25,   28,   29,   33,   37,   39
  5339. ,   43,   46,   51,   53,   61,   62,   65,   67,   68,   92
  5340. ,    2,    4,   10,   12,   14,   15,   19,   20,   21,   23
  5341. ,   24,   25,   28,   29,   33,   37,   39,   43,   46,   51
  5342. ,   53,   61,   62,   65,   67,   68,   92,    2,    4,   10
  5343. ,   12,   14,   15,   19,   20,   21,   23,   24,   25,   28
  5344. ,   29,   33,   37,   39,   43,   46,   51,   53,   61,   62
  5345. ,   65,   67,   68,   92,    2,    4,   10,   12,   14,   15
  5346. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  5347. ,   39,   43,   46,   51,   53,   61,   62,   65,   67,   68
  5348. ,   92,    2,    4,   10,   12,   14,   15,   19,   20,   21
  5349. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  5350. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  5351. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  5352. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  5353. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  5354. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  5355. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  5356. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  5357. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  5358. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  5359. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  5360. ,   25,   28,   29,   33,   37,   39,   43,   46,   51,   53
  5361. ,   61,   62,   65,   67,   68,   92,    2,    4,   10,   12
  5362. ,   14,   15,   19,   20,   21,   23,   24,   25,   28,   29
  5363. ,   33,   37,   39,   43,   46,   51,   53,   61,   62,   65
  5364. ,   67,   68,   92,    2,    4,   10,   12,   14,   15,   19
  5365. ,   20,   21,   23,   24,   25,   28,   29,   33,   37,   39
  5366. ,   43,   46,   51,   53,   61,   62,   65,   67,   68,   92
  5367. ,    2,    4,   10,   12,   14,   15,   19,   20,   21,   23
  5368. ,   24,   25,   28,   29,   33,   37,   39,   43,   46,   51
  5369. ,   53,   61,   62,   65,   67,   68,   92,    2,    4,   10
  5370. ,   12,   14,   15,   24,   25,   28,   29,   33,   37,   46
  5371. ,   51,   53,   62,   65,   67,   68,   92,   19,   20,   21
  5372. ,   19,   20,   21,   21,   33,   58,   80,   85,   43,   61
  5373. ,   21,   61,   21,   61,   25,   33,   62,   80,   33,   65
  5374. ,   67,   80,   65,   67,   80,   21,   10,   14,   31,   50
  5375. ,   80,   72,   80,   72,   80,   31,   51,   71,   65,   65
  5376. ,   80,   80,   21,   25,   26,   27,   42,   43,   44,   45
  5377. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  5378. ,   42,   43,   45,   55,   56,   59,   60,   65,   75,   80
  5379. ,   80,   21,   22,   25,   21,   25,   10,   25,   26,   27
  5380. ,   42,   43,   45,   55,   56,   59,   60,   65,   80,   21
  5381. ,   22,   25,   43,   18,   80,    2,    4,   10,   12,   14
  5382. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  5383. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  5384. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  5385. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  5386. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  5387. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  5388. ,   25,   28,   29,   33,   37,   39,   43,   46,   51,   53
  5389. ,   61,   62,   65,   67,   68,   92,   19,   21,   39,   19
  5390. ,   21,   39,   19,   21,   39,   19,   21,   39,   19,   21
  5391. ,   39,   19,   21,   39,   19,   21,   39,   75,   80,   26
  5392. ,   27,   42,   43,   45,   54,   63,   96,   71,   80,   26
  5393. ,   27,   42,   43,   45,   54,   63,   96,   26,   27,   42
  5394. ,   45,   54,   26,   27,   42,   43,   45,   54,   63,   96
  5395. ,   26,   27,   42,   43,   45,   54,   63,   96,   26,   27
  5396. ,   42,   45,   54,   63,   75,   80,   26,   27,   42,   43
  5397. ,   45,   54,   60,   63,   84,   85,   84,   85,   21,   61
  5398. ,   80,   26,   42,   45,   26,   42,   45,   59,   63,   65
  5399. ,   26,   42,   45,   59,   63,   65,   80,   80,   72,   75
  5400. ,   72,   75,   72,   75,   85,   72,   75,   10,   21,   25
  5401. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5402. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  5403. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  5404. ,   42,   43,   44,   45,   55,   56,   59,   60,   65,   10
  5405. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5406. ,   59,   60,   65,   21,   65,   67,   68,   21,   43,   65
  5407. ,   67,   68,   21,   43,   65,   67,   68,   72,   75,   84
  5408. ,   85,   21,   61,   26,   27,   42,   45,   54,   60,   63
  5409.  ) ;
  5410.         --| Map of states to sets of follow symbols
  5411.         -- NYU Reference Name: FOLLOW
  5412.  
  5413.     ------------------------------------------------------------------
  5414.     -- Action_Token_Map
  5415.     ------------------------------------------------------------------
  5416.  
  5417.     
  5418.     type Action_Token_Array_Index is array(
  5419.         PositiveParserInteger range <>) of GC.ParserInteger ;
  5420.         --| For indexing the All Action Token Array.
  5421.         --| Maps a given state into the lower and upper bounds of a slice
  5422.         --| of the All Action Index Array.
  5423.     
  5424.     Action_Token_MapIndex : constant Action_Token_Array_Index :=
  5425.          (    1,    1,    2,    2,    3,    2,    3,    9,   10,   11
  5426. ,   12,   11,   12,   16,   17,   17,   18,   17,   18,   17
  5427. ,   18,   28,   29,   28,   29,   30,   31,   30,   31,   32
  5428. ,   33,   33,   34,   34,   35,   34,   35,   34,   35,   34
  5429. ,   35,   34,   35,   34,   35,   34,   35,   36,   37,   37
  5430. ,   38,   37,   38,   37,   38,   37,   38,   37,   38,   38
  5431. ,   39,   41,   42,   42,   43,   42,   43,   42,   43,   43
  5432. ,   44,   43,   44,   43,   44,   71,   72,   71,   72,   71
  5433. ,   72,   71,   72,   83,   84,   83,   84,   83,   84,   84
  5434. ,   85,   84,   85,   93,   94,   97,   98,   97,   98,   97
  5435. ,   98,   97,   98,   97,   98,   98,   99,   98,   99,  101
  5436. ,  102,  102,  103,  103,  104,  104,  105,  105,  106,  106
  5437. ,  107,  109,  110,  113,  114,  113,  114,  114,  115,  114
  5438. ,  115,  121,  122,  121,  122,  121,  122,  121,  122,  130
  5439. ,  131,  130,  131,  130,  131,  130,  131,  133,  134,  136
  5440. ,  137,  137,  138,  138,  139,  139,  140,  140,  141,  141
  5441. ,  142,  141,  142,  141,  142,  142,  143,  154,  155,  164
  5442. ,  165,  166,  167,  167,  168,  167,  168,  169,  170,  170
  5443. ,  171,  170,  171,  170,  171,  170,  171,  171,  172,  172
  5444. ,  173,  172,  173,  173,  174,  173,  174,  175,  176,  177
  5445. ,  178,  178,  179,  178,  179,  180,  181,  196,  197,  200
  5446. ,  201,  200,  201,  201,  202,  202,  203,  202,  203,  202
  5447. ,  203,  203,  204,  203,  204,  204,  205,  204,  205,  204
  5448. ,  205,  204,  205,  215,  216,  215,  216,  215,  216,  215
  5449. ,  216,  215,  216,  226,  227,  237,  238,  248,  249,  253
  5450. ,  254,  264,  265,  268,  269,  268,  269,  279,  280,  280
  5451. ,  281,  292,  293,  304,  305,  315,  316,  326,  327,  337
  5452. ,  338,  348,  349,  349,  350,  350,  351,  350,  351,  350
  5453. ,  351,  350,  351,  359,  360,  359,  360,  359,  360,  359
  5454. ,  360,  359,  360,  368,  369,  368,  369,  368,  369,  375
  5455. ,  376,  378,  379,  378,  379,  378,  379,  379,  380,  380
  5456. ,  381,  381,  382,  382,  383,  384,  385,  384,  385,  385
  5457. ,  386,  385,  386,  386,  387,  387,  388,  388,  389,  390
  5458. ,  391,  391,  392,  392,  393,  394,  395,  395,  396,  395
  5459. ,  396,  396,  397,  399,  400,  400,  401,  400,  401,  401
  5460. ,  402,  403,  404,  404,  405,  405,  406,  405,  406,  405
  5461. ,  406,  405,  406,  405,  406,  405,  406,  405,  406,  405
  5462. ,  406,  405,  406,  405,  406,  405,  406,  405,  406,  405
  5463. ,  406,  406,  407,  406,  407,  406,  407,  406,  407,  406
  5464. ,  407,  406,  407,  406,  407,  409,  410,  410,  411,  410
  5465. ,  411,  410,  411,  410,  411,  410,  411,  412,  413,  415
  5466. ,  416,  415,  416,  415,  416,  415,  416,  415,  416,  415
  5467. ,  416,  415,  416,  418,  419,  418,  419,  418,  419,  419
  5468. ,  420,  419,  420,  419,  420,  420,  421,  422,  423,  423
  5469. ,  424,  425,  426,  425,  426,  436,  437,  437,  438,  438
  5470. ,  439,  439,  440,  450,  451,  461,  462,  461,  462,  473
  5471. ,  474,  484,  485,  484,  485,  486,  487,  486,  487,  498
  5472. ,  499,  498,  499,  499,  500,  499,  500,  499,  500,  499
  5473. ,  500,  500,  501,  500,  501,  500,  501,  501,  502,  501
  5474. ,  502,  501,  502,  501,  502,  501,  502,  501,  502,  501
  5475. ,  502,  501,  502,  502,  503,  502,  503,  502,  503,  502
  5476. ,  503,  502,  503,  502,  503,  502,  503,  502,  503,  503
  5477. ,  504,  514,  515,  522,  523,  522,  523,  533,  534,  533
  5478. ,  534,  533,  534,  533,  534,  533,  534,  533,  534,  544
  5479. ,  545,  555,  556,  555,  556,  555,  556,  555,  556,  556
  5480. ,  557,  556,  557,  557,  558,  558,  559,  558,  559,  560
  5481. ,  561,  561,  562,  562,  563,  563,  564,  564,  565,  564
  5482. ,  565,  565,  566,  565,  566,  569,  570,  572,  573,  572
  5483. ,  573,  572,  573,  573,  574,  575,  576,  575,  576,  576
  5484. ,  577,  579,  580,  580,  581,  582,  583,  593,  594,  594
  5485. ,  595,  595,  596,  596,  597,  599,  600,  600,  601,  604
  5486. ,  605,  605,  606,  606,  607,  609,  610,  609,  610,  610
  5487. ,  611,  611,  612,  612,  613,  618,  619,  620,  621,  621
  5488. ,  622,  642,  643,  644,  645,  645,  646,  645,  646,  645
  5489. ,  646,  646,  647,  646,  647,  647,  648,  648,  649,  648
  5490. ,  649,  648,  649,  648,  649,  648,  649,  648,  649,  648
  5491. ,  649,  648,  649,  648,  649,  648,  649,  648,  649,  659
  5492. ,  660,  670,  671,  670,  671,  670,  671,  670,  671,  682
  5493. ,  683,  682,  683,  693,  694,  704,  705,  704,  705,  705
  5494. ,  706,  705,  706,  705,  706,  705,  706,  705,  706,  705
  5495. ,  706,  705,  706,  708,  709,  710,  711,  711,  712,  711
  5496. ,  712,  713,  714,  721,  722,  722,  723,  726,  727,  727
  5497. ,  728,  728,  729,  729,  730,  730,  731,  733,  734,  735
  5498. ,  736,  736,  737,  737,  738,  737,  738,  738,  739,  749
  5499. ,  750,  749,  750,  749,  750,  760,  761,  760,  761,  763
  5500. ,  764,  767,  768,  778,  779,  779,  780,  780,  781,  781
  5501. ,  782,  782,  783,  782,  783,  792,  793,  793,  794,  793
  5502. ,  794,  795,  796,  796,  797,  799,  800,  801,  802,  802
  5503. ,  803,  803,  804,  808,  809,  812,  813,  813,  814,  814
  5504. ,  815,  816,  817,  816,  817,  816,  817,  816,  817,  816
  5505. ,  817,  816,  817,  816,  817,  816,  817,  816,  817,  818
  5506. ,  819,  819,  820,  820,  821,  823,  824,  824,  825,  835
  5507. ,  836,  846,  847,  849,  850,  850,  851,  861,  862,  862
  5508. ,  863,  864,  865,  876,  877,  876,  877,  877,  878,  878
  5509. ,  879,  878,  879,  883,  884,  883,  884,  883,  884,  883
  5510. ,  884,  903,  904,  903,  904,  903,  904,  903,  904,  903
  5511. ,  904,  903,  904,  903,  904,  903,  904,  903,  904,  903
  5512. ,  904,  903,  904,  903,  904,  903,  904,  903,  904,  903
  5513. ,  904,  903,  904,  903,  904,  903,  904,  906,  907,  908
  5514. ,  909,  908,  909,  908,  909,  908,  909,  908,  909,  908
  5515. ,  909,  908,  909,  908,  909,  908,  909,  909,  910,  910
  5516. ,  911,  910,  911,  910,  911,  911,  912,  911,  912,  911
  5517. ,  912,  911,  912,  922,  923,  922,  923,  922,  923,  923
  5518. ,  924,  924,  925,  925,  926,  926,  927,  927,  928,  928
  5519. ,  929,  929,  930,  930,  931,  930,  931,  931,  932,  932
  5520. ,  933,  932,  933,  932,  933,  932,  933,  932,  933,  933
  5521. ,  934,  934,  935,  934,  935,  934,  935,  937,  938,  937
  5522. ,  938,  937,  938,  937,  938,  948,  949,  949,  950,  960
  5523. ,  961,  960,  961,  960,  961,  961,  962,  961,  962,  986
  5524. ,  987, 1011, 1012, 1011, 1012, 1011, 1012, 1011, 1012, 1012
  5525. , 1013, 1012, 1013, 1013, 1014, 1024, 1025, 1025, 1026, 1037
  5526. , 1038, 1038, 1039, 1039, 1040, 1041, 1042, 1041, 1042, 1042
  5527. , 1043, 1046, 1047, 1046, 1047, 1047, 1048, 1048, 1049, 1059
  5528. , 1060, 1070, 1071, 1071, 1072, 1072, 1073, 1073, 1074, 1074
  5529. , 1075, 1076, 1077, 1077, 1078, 1077, 1078, 1077, 1078, 1077
  5530. , 1078, 1077, 1078, 1077, 1078, 1077, 1078, 1077, 1078, 1077
  5531. , 1078, 1077, 1078, 1077, 1078, 1078, 1079, 1079, 1080, 1079
  5532. , 1080, 1080, 1081, 1080, 1081, 1091, 1092, 1092, 1093, 1103
  5533. , 1104, 1104, 1105, 1105, 1106, 1106, 1107, 1106, 1107, 1107
  5534. , 1108, 1108, 1109, 1111, 1112, 1122, 1123, 1122, 1123, 1122
  5535. , 1123, 1122, 1123, 1122, 1123, 1122, 1123, 1123, 1124, 1124
  5536. , 1125, 1125, 1126, 1125, 1126, 1125, 1126, 1128, 1129, 1129
  5537. , 1130, 1130, 1131, 1131, 1132, 1142, 1143, 1142, 1143, 1145
  5538. , 1146, 1147, 1148, 1147, 1148, 1147, 1148, 1148, 1149, 1148
  5539. , 1149, 1148, 1149, 1150, 1151, 1150, 1151, 1151, 1152, 1159
  5540. , 1160, 1159, 1160, 1164, 1165, 1165, 1166, 1170, 1171, 1170
  5541. , 1171, 1181, 1182, 1182, 1183, 1208, 1209, 1208, 1209, 1208
  5542. , 1209, 1208, 1209, 1209, 1210, 1209, 1210, 1220, 1221, 1221
  5543. , 1222, 1221, 1222, 1222, 1223, 1224, 1225, 1225, 1226, 1225
  5544. , 1226, 1225, 1226, 1225, 1226, 1225, 1226, 1226, 1227, 1226
  5545. , 1227, 1226, 1227, 1237, 1238, 1237, 1238, 1237, 1238, 1237
  5546. , 1238, 1237, 1238, 1238, 1239, 1238, 1239, 1239, 1240, 1241
  5547. , 1242, 1241, 1242, 1241, 1242, 1241, 1242, 1242, 1243, 1244
  5548. , 1245, 1255, 1256, 1256, 1257, 1257, 1258, 1258, 1259, 1259
  5549. , 1260, 1263, 1264, 1263, 1264, 1264, 1265, 1264, 1265, 1264
  5550. , 1265, 1264, 1265, 1264, 1265, 1265, 1266, 1266, 1267, 1268
  5551. , 1269, 1268, 1269, 1268, 1269, 1268, 1269, 1269, 1270, 1269
  5552. , 1270, 1269, 1270, 1270, 1271, 1271, 1272, 1272, 1273, 1272
  5553. , 1273, 1272, 1273, 1272, 1273, 1272, 1273, 1272, 1273, 1272
  5554. , 1273, 1272, 1273, 1272, 1273, 1274, 1275, 1275, 1276, 1279
  5555. , 1280, 1279, 1280, 1279, 1280, 1280, 1281, 1281, 1282, 1282
  5556. , 1283, 1283, 1284, 1285, 1286, 1285, 1286, 1285, 1286, 1289
  5557. , 1290, 1290, 1291, 1291, 1292, 1292, 1293, 1294, 1295, 1305
  5558. , 1306, 1307, 1308, 1307, 1308, 1307, 1308, 1308, 1309, 1319
  5559. , 1320, 1319, 1320, 1319, 1320, 1321, 1322, 1321, 1322, 1321
  5560. , 1322, 1321, 1322, 1322, 1323, 1333, 1334, 1337, 1338, 1337
  5561. , 1338, 1337, 1338, 1337, 1338, 1337, 1338, 1337, 1338, 1337
  5562. , 1338, 1337, 1338, 1339, 1340, 1339, 1340, 1340, 1341, 1341
  5563. , 1342, 1341, 1342, 1342, 1343, 1343, 1344, 1343, 1344, 1343
  5564. , 1344, 1344, 1345, 1345, 1346, 1347, 1348, 1347, 1348, 1347
  5565. , 1348, 1348, 1349, 1348, 1349, 1350, 1351, 1350, 1351, 1350
  5566. , 1351, 1354, 1355, 1354, 1355, 1355, 1356, 1356, 1357, 1357
  5567. , 1358, 1359, 1360, 1359, 1360, 1360, 1361, 1371, 1372, 1371
  5568. , 1372, 1371, 1372, 1371, 1372, 1382, 1383, 1383, 1384, 1387
  5569. , 1388, 1387, 1388, 1391, 1392, 1393, 1394, 1394, 1395, 1395
  5570. , 1396, 1395, 1396, 1396, 1397, 1396, 1397, 1396, 1397, 1397
  5571. , 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1403, 1404, 1405
  5572. , 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1405
  5573. , 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1405, 1406, 1408
  5574. , 1409, 1408, 1409, 1435, 1436, 1436, 1437, 1436, 1437, 1436
  5575. , 1437, 1436, 1437, 1438, 1439, 1438, 1439, 1439, 1440, 1439
  5576. , 1440, 1450, 1451, 1451, 1452, 1451, 1452, 1451, 1452, 1452
  5577. , 1453, 1476, 1477, 1476, 1477, 1476, 1477, 1478, 1479, 1478
  5578. , 1479, 1478, 1479, 1479, 1480, 1479, 1480, 1479, 1480, 1480
  5579. , 1481, 1492, 1493, 1493, 1494, 1494, 1495, 1495, 1496, 1495
  5580. , 1496, 1495, 1496, 1496, 1497, 1496, 1497, 1496, 1497, 1497
  5581. , 1498, 1499, 1500, 1511, 1512, 1511, 1512, 1519, 1520, 1519
  5582. , 1520, 1520, 1521, 1520, 1521, 1520, 1521, 1521, 1522, 1522
  5583. , 1523, 1533, 1534, 1534, 1535, 1535, 1536, 1536, 1537, 1547
  5584. , 1548, 1548, 1549, 1548, 1549, 1549, 1550, 1550, 1551, 1550
  5585. , 1551, 1551, 1552, 1552, 1553, 1552, 1553, 1552, 1553, 1552
  5586. , 1553, 1554, 1555, 1564, 1565, 1564, 1565, 1564, 1565, 1575
  5587. , 1576, 1578, 1579, 1579, 1580, 1581, 1582, 1582, 1583, 1594
  5588. , 1595, 1594, 1595, 1594, 1595, 1594, 1595, 1595, 1596, 1596
  5589. , 1597, 1597, 1598, 1600, 1601, 1600, 1601, 1600, 1601, 1605
  5590. , 1606, 1605, 1606, 1606, 1607, 1617, 1618, 1617, 1618, 1618
  5591. , 1619, 1619, 1620, 1619, 1620, 1621, 1622, 1621, 1622, 1622
  5592. , 1623, 1625, 1626, 1625, 1626, 1626, 1627, 1626, 1627, 1626
  5593. , 1627, 1626, 1627, 1627, 1628, 1628, 1629, 1628, 1629, 1629
  5594. , 1630, 1629, 1630, 1629, 1630, 1630, 1631, 1631, 1632, 1636
  5595. , 1637, 1637, 1638, 1637, 1638, 1638, 1639, 1639, 1640, 1640
  5596. , 1641, 1640, 1641, 1641, 1642, 1641, 1642, 1642, 1643, 1643
  5597. , 1644, 1643, 1644, 1645, 1646, 1645, 1646, 1646, 1647, 1646
  5598. , 1647, 1647, 1648, 1649, 1650, 1650, 1651, 1650, 1651, 1651
  5599. , 1652, 1652, 1653, 1654, 1655, 1654, 1655, 1655, 1656, 1655
  5600. , 1656, 1659, 1660, 1659, 1660, 1660, 1661, 1660, 1661, 1661
  5601. , 1662, 1663, 1664, 1663, 1664, 1664, 1665, 1665, 1666, 1665
  5602. , 1666, 1665, 1666, 1665, 1666, 1666, 1667, 1666, 1667, 1668
  5603. , 1669, 1669, 1670, 1669, 1670, 1669, 1670, 1669, 1670, 1670
  5604. , 1671, 1671, 1672, 1671, 1672, 1671, 1672, 1672, 1673, 1672
  5605. , 1673, 1672, 1673, 1672, 1673, 1673, 1674, 1673, 1674, 1674
  5606. , 1675, 1674, 1675, 1676, 1677, 1677, 1678, 1677, 1678, 1679
  5607. , 1680, 1679, 1680, 1679, 1680, 1679, 1680, 1680, 1681, 1681
  5608. , 1682, 1682, 1683, 1682, 1683, 1682, 1683, 1694, 1695, 1694
  5609. , 1695, 1694, 1695, 1694, 1695, 1694, 1695, 1694, 1695, 1694
  5610. , 1695, 1694, 1695, 1695, 1696, 1697, 1698, 1698, 1699, 1698
  5611. , 1699, 1700, 1701, 1700, 1701, 1700, 1701, 1701, 1702, 1703
  5612. , 1704, 1704, 1705, 1704, 1705, 1704, 1705, 1705, 1706, 1706
  5613. , 1707, 1706, 1707, 1706)  ;
  5614.     
  5615.     Action_Token_Map : constant Action_Token_Array :=
  5616.          (   43,   65,   27,   54,   63,   26,   42,   43,   45,   71
  5617. ,   80,   54,   26,   27,   42,   45,   63,    3,   66,   68
  5618. ,   71,   74,   35,   36,   37,   65,   67,   76,   67,   65
  5619. ,   65,   11,   65,   71,   31,   80,   80,   80,   26,   45
  5620. ,   42,   65,   65,   39,   47,   49,   75,   76,   77,   83
  5621. ,   86,   87,   89,   90,   91,    7,   30,   34,   36,   64
  5622. ,   69,   70,   71,   72,   73,   74,   78,   81,   82,   84
  5623. ,   85,    3,   35,   37,   40,   65,   66,   67,   68,   71
  5624. ,   74,   76,   36,   72,   82,   83,   89,   91,   30,   36
  5625. ,   81,   86,   90,   47,   70,   71,   77,   75,   39,   64
  5626. ,    7,    7,   39,   64,    7,   39,   74,   76,   69,   34
  5627. ,   49,   73,   78,   87,   37,   68,   71,   35,   65,   66
  5628. ,   67,   37,   65,   71,    3,   35,   36,   66,   67,   68
  5629. ,   31,   51,   71,   59,   63,   65,   65,   31,   71,   65
  5630. ,   35,   43,   26,   27,   42,   44,   45,   56,   60,   21
  5631. ,   25,   55,   59,   65,   25,   26,   27,   42,   45,   56
  5632. ,   59,   60,   65,   55,   21,   10,   65,   67,   65,   65
  5633. ,   43,   60,   71,   77,   70,   85,   84,   85,   72,   75
  5634. ,   30,   36,   64,   75,    7,   39,   72,   81,   82,   83
  5635. ,   84,   85,   86,   89,   90,   91,   47,   70,   71,   77
  5636. ,   72,   75,   80,   30,    3,   37,   65,   68,   74,   35
  5637. ,   36,   66,   67,   71,   76,    3,   35,   36,   37,   68
  5638. ,   76,   65,   66,   67,   71,   74,    3,   67,   68,   71
  5639. ,   76,   35,   36,   37,   65,   66,   74,    3,   37,   67
  5640. ,   68,   71,   76,   35,   36,   65,   66,   74,   17,   16
  5641. ,   47,   65,   71,    3,   37,   71,   76,   35,   36,   65
  5642. ,   66,   67,   68,   74,    6,   65,   67,   68,    3,   35
  5643. ,   36,   37,   67,   74,   65,   66,   68,   71,   76,   75
  5644. ,    3,   71,   74,   76,   35,   36,   37,   58,   65,   66
  5645. ,   67,   68,    3,   19,   35,   66,   36,   37,   65,   67
  5646. ,   68,   71,   74,   76,    3,   65,   66,   76,   35,   36
  5647. ,   37,   67,   68,   71,   74,    3,   36,   65,   66,   71
  5648. ,   74,   76,   35,   37,   67,   68,   35,   36,   37,   65
  5649. ,   66,   67,   68,   74,   76,    3,   71,    3,   35,   67
  5650. ,   68,   76,   36,   37,   65,   66,   71,   74,   58,   19
  5651. ,   35,   37,   67,   71,    3,   36,   65,   66,   68,   36
  5652. ,   65,   66,   67,   68,   71,    3,   35,   37,   66,   67
  5653. ,   68,   71,   35,   37,   65,   70,   71,   77,   35,   65
  5654. ,   65,   65,   45,   26,   79,   31,   35,   65,   72,   77
  5655. ,   65,   10,   65,   67,   65,   65,   65,   67,   68,   65
  5656. ,   65,   59,   65,   65,   65,   79,   50,   31,   80,   80
  5657. ,   11,   65,   11,   59,   65,   50,   31,   80,   65,   80
  5658. ,   51,   71,   31,   75,   80,    3,   35,   65,   66,   68
  5659. ,   76,   36,   37,   67,   71,   74,   71,   65,   65,   76
  5660. ,    3,   35,   36,   37,   65,   66,   67,   68,   71,   74
  5661. ,   35,   36,   71,   74,   76,    3,   37,   65,   66,   67
  5662. ,   68,   35,   36,   37,   40,   65,   66,   67,   68,   71
  5663. ,   74,   76,    3,   74,   76,    3,   35,   36,   37,   65
  5664. ,   66,   67,   68,   71,   84,   85,    3,   35,   36,   37
  5665. ,   40,   65,   66,   67,   68,   71,   74,   76,   75,   86
  5666. ,   86,   72,   65,   65,   66,   67,   68,   71,   74,   76
  5667. ,    3,   35,   36,   37,   30,   89,   90,   36,   81,   82
  5668. ,   83,   91,    3,   35,   36,   37,   65,   66,   67,   68
  5669. ,   71,   74,   76,   35,   65,   74,    3,   36,   37,   66
  5670. ,   67,   68,   71,   76,    3,   35,   66,   67,   68,   71
  5671. ,   76,   36,   37,   65,   74,   65,   77,   79,   31,   71
  5672. ,   31,   75,   30,   65,   65,   26,   56,   42,   45,   71
  5673. ,   77,   80,   80,   71,   80,   60,   70,   71,   77,   60
  5674. ,   50,   31,   25,   26,   55,   59,   60,   65,   21,   27
  5675. ,   42,   45,   56,   31,   65,   31,   71,   80,   31,   77
  5676. ,    8,   13,   23,   65,   43,   35,   65,   67,   68,   65
  5677. ,   65,   43,   42,   45,   56,   26,   27,   60,   35,   54
  5678. ,   65,    4,   12,   14,   24,   25,   33,   51,   53,   65
  5679. ,   67,   68,    2,   10,   15,   28,   29,   37,   43,   46
  5680. ,   62,   92,   23,   21,   80,   65,   43,   72,   65,   66
  5681. ,   68,   76,    3,   35,   36,   37,   67,   71,   74,   65
  5682. ,   66,   67,   68,   71,   74,   76,    3,   35,   36,   37
  5683. ,   40,   68,    3,   35,   36,   37,   65,   66,   67,   71
  5684. ,   74,   76,   37,   65,   66,   67,   68,   74,   76,    3
  5685. ,   35,   36,   71,   37,    3,   35,   36,   65,   66,   67
  5686. ,   68,   71,   74,   76,   75,   71,   77,   80,   41,   30
  5687. ,   65,   80,   72,    8,   17,    5,   16,   32,   44,   47
  5688. ,   71,   65,   65,   68,   94,   67,   80,   65,   41,   88
  5689. ,   71,   77,   80,   80,   72,   11,   11,   31,    3,   35
  5690. ,   36,   65,   66,   67,   68,   71,   74,   76,   37,    3
  5691. ,   36,   65,   66,   68,   76,   35,   37,   67,   71,   74
  5692. ,   71,    9,   48,   47,   16,   17,   65,   36,   37,   68
  5693. ,   74,    3,   35,   65,   66,   67,   71,   76,   65,   65
  5694. ,   65,   31,    5,    8,   16,   17,   32,   44,   47,   71
  5695. ,   35,   48,   65,   75,   80,   71,   88,    8,   65,   50
  5696. ,   80,   88,   88,   16,   17,   47,   50,   71,   70,   71
  5697. ,   77,   80,   31,   31,   11,   65,   31,   80,   80,   80
  5698. ,   65,   67,   68,   65,   35,   36,   37,   65,   74,    3
  5699. ,   66,   67,   68,   71,   76,    3,   37,   67,   68,   35
  5700. ,   36,   65,   66,   71,   74,   76,   61,   65,   80,   65
  5701. ,    3,   37,   65,   66,   68,   71,   74,   76,   35,   36
  5702. ,   67,   80,   65,   80,    3,   36,   65,   66,   67,   68
  5703. ,   71,   74,   80,   35,   37,   76,   79,   65,   70,   71
  5704. ,   77,   88,   80,    2,    4,   10,   12,   15,   33,   37
  5705. ,   46,   51,   53,   62,   65,   68,   14,   24,   25,   28
  5706. ,   29,   67,   92,   25,   33,   62,   14,   10,   75,   86
  5707. ,   75,    3,   35,   36,   37,   65,   66,   67,   76,   68
  5708. ,   71,   74,   88,   51,   65,   65,   71,   94,   94,   44
  5709. ,   94,   94,   80,   79,   70,   71,   77,   37,   68,    3
  5710. ,   35,   36,   65,   66,   67,   71,   74,   76,   80,   35
  5711. ,   37,   68,   74,    3,   36,   65,   66,   67,   71,   76
  5712. ,   65,    7,   34,   49,   75,   30,   36,   39,   64,   69
  5713. ,   70,   71,   72,   73,   74,   76,   77,   78,   81,   82
  5714. ,   83,   85,   87,   89,   90,   91,   30,   34,   36,   64
  5715. ,   69,   70,   71,   72,   73,   77,   82,   83,   85,   87
  5716. ,   90,    7,   39,   49,   74,   75,   76,   78,   81,   89
  5717. ,   91,   85,   72,    3,   35,   36,   65,   66,   67,   68
  5718. ,   71,   37,   74,   76,    9,   37,   40,   66,   74,   76
  5719. ,    3,   35,   36,   65,   67,   68,   71,   80,   80,   77
  5720. ,   80,   80,   16,   17,   47,   71,   43,   22,   36,   71
  5721. ,   74,   76,    3,   35,   37,   65,   66,   67,   68,   35
  5722. ,   76,    3,   36,   37,   65,   66,   67,   68,   71,   74
  5723. ,   44,   65,   80,   37,   65,   68,   80,   47,   47,   65
  5724. ,    3,   36,   37,   65,   67,   74,   76,   35,   66,   68
  5725. ,   71,   38,   35,   36,   65,   66,   68,   71,    3,   37
  5726. ,   67,   74,   76,   88,   88,   65,   80,   80,   65,   67
  5727. ,   68,    3,   35,   36,   65,   74,   76,   37,   66,   67
  5728. ,   68,   71,   54,   54,   43,   71,   77,   70,   71,   31
  5729. ,   80,    3,   35,   36,   37,   67,   68,   71,   74,   65
  5730. ,   66,   76,   77,   61,   80,   77,   80,   58,   77,   80
  5731. ,   80,    4,   43,   57,   68,   15,   61,   65,   67,   10
  5732. ,   14,   25,   33,   62,   93,   17,   47,   16,   65,   71
  5733. ,    3,   35,   36,   37,   65,   66,   67,   68,   71,   76
  5734. ,   74,   43,    2,    4,   12,   14,   15,   19,   21,   25
  5735. ,   28,   29,   33,   39,   51,   67,   68,   10,   20,   23
  5736. ,   24,   37,   46,   53,   61,   62,   65,   92,   65,   35
  5737. ,   36,   37,   74,    3,   65,   66,   67,   68,   71,   76
  5738. ,   33,   65,   43,   61,   21,   65,    3,   66,   76,   35
  5739. ,   36,   37,   65,   67,   68,   71,   74,   72,   65,   72
  5740. ,   80,   31,   72,   75,    3,   35,   37,   65,   66,   67
  5741. ,   68,   71,   74,   76,   36,   80,   80,   34,   43,   65
  5742. ,   67,   68,   21,   75,   22,   65,   21,   25,   80,   80
  5743. ,   21,   43,   80,   72,   77,   47,   70,   71,   77,   65
  5744. ,   80,   80,   80,   77,   80,   70,   71,   77,   80,   72
  5745. ,   80,   80,   75,   80,    3,   35,   36,   37,   65,   66
  5746. ,   67,   74,   76,   68,   71,   18,   80,   80,    3,   35
  5747. ,   67,   71,   76,   36,   37,   65,   66,   68,   74,   19
  5748. ,   20,   80,    3,   37,   67,   68,   71,   35,   36,   65
  5749. ,   66,   74,   76,   70,   77,   80,   71,   19,   39,   80
  5750. ,   80,   30,   21,   65,   80,   65,   40,   61,   75,   72
  5751. ,   77,   47,   70,   71,   88,   31,   65,   75,   72,   80
  5752. ,   37,   66,   76,    3,   35,   36,   65,   67,   68,   71
  5753. ,   74,   35,   37,   66,   67,   74,   76,    3,   36,   65
  5754. ,   68,   71,   48,    9,   70,   71,   77,   21,   65,   67
  5755. ,   68,   21,   25,   71,   65,   43,   48,   65,   12,   72
  5756. ,   75,   31,   80,   72,   75,   67,   68,   65,    7,   30
  5757. ,   47,   49,   64,   69,   70,   72,   73,   75,   76,   77
  5758. ,   78,   79,   81,   82,   89,   91,   34,   36,   39,   71
  5759. ,   74,   83,   86,   87,   90,   72,   43,   61,   80,    3
  5760. ,   37,   71,   74,   35,   36,   65,   66,   67,   68,   76
  5761. ,   21,   85,   14,   15,   19,   21,   24,   25,   28,   29
  5762. ,   33,   37,   39,   43,   46,   51,   62,   65,   67,   92
  5763. ,    2,    4,   10,   12,   53,   68,   19,   39,   21,   43
  5764. ,   35,   36,   37,   52,   65,   66,   71,   74,   76,    3
  5765. ,   67,   68,   33,   21,   80,   77,   80,   75,   72,    3
  5766. ,   37,   65,   66,   67,   68,   71,   74,   35,   36,   76
  5767. ,   94,    5,    8,   32,   71,   16,   17,   44,   47,   80
  5768. ,   80,   80,   76,    3,   35,   36,   37,   65,   66,   67
  5769. ,   68,   71,   74,   43,   48,   65,   35,   36,   65,   66
  5770. ,   67,   68,   71,   76,    3,   37,   74,   80,   43,   43
  5771. ,   65,   79,   65,   68,    5,    8,   17,   35,   44,   47
  5772. ,   71,   16,   32,   48,   36,   66,   76,    3,   35,   37
  5773. ,   65,   67,   68,   71,   74,   70,   71,   77,   71,   80
  5774. ,   72,   21,   68,   74,   76,    3,   35,   36,   37,   40
  5775. ,   65,   66,   67,   71,   58,   29,   43,    4,   15,   57
  5776. ,   15,   43,   57,   61,    4,   53,   35,   36,   68,    3
  5777. ,   37,   65,   66,   67,   71,   74,   76,   65,   33,   84
  5778. ,   85,   38,   65,   67,   68,   80,   47,   80,   72,   31
  5779. ,   65,   12,   61,   65,   21,   43,   43,   44,   80,   80
  5780. ,   65,   65,   85,   21,   61,   80,   21,   15,   43,   80
  5781. ,   80,   65,   40,   65,   65,   47,   70,   71,   77,   80
  5782. ,   71,   80,   72,   88,   80,   80,   84,   85,   12,   53
  5783. ,   21,   80,   94,   65,   43,   61,   80,   72,   80,   80
  5784. ,   80,   53,   35,   37,   40,   65,   71,   74,   76,    3
  5785. ,   36,   66,   67,   68,   80,   72,   80,   85,   21,   61
  5786. ,   37,   84,   85,   12,   37,   80)  ;
  5787.         --| Action_Token_Map is an array that
  5788.         --| maps from each state (using action index map) to a set of
  5789.         --| action tokens. An action token is a terminal symbol
  5790.         --| (except EOF_Token) for which in the given state an
  5791.         --| explicit (non-default) shift or reduce action
  5792.         --| is defined.
  5793.         --| Used to cut reduce the
  5794.         --| number of primary recovery candidates.
  5795.     
  5796.     ------------------------------------------------------------------
  5797.     -- Shift_State_Map
  5798.     ------------------------------------------------------------------
  5799.     
  5800.     type Shift_State_Index_Array is array(
  5801.         PositiveParserInteger range <>) of GC.ParserInteger;
  5802.        --| For indexing the All Action Token Array.
  5803.        --| Maps a given state into the lower and upper bounds of a slice
  5804.        --| of the All Action Index Array.
  5805.  
  5806.     Shift_State_MapIndex : constant Shift_State_Index_Array :=
  5807.          (    1,    1,    2,    2,    3,    3,    4,    4,    5,    5
  5808. ,    6,    6,    7,    9,   10,   11,   12,   14,   15,   15
  5809. ,   16,   19,   20,   23,   24,   24,   25,   25,   26,   26
  5810. ,   27,   29,   30,   32,   33,   33,   34,   37,   38,   38
  5811. ,   39,   57,   58,   58,   59,   60,   61,   61,   62,   63
  5812. ,   64,   65,   66,   66,   67,   67,   68,   69,   70,   73
  5813. ,   74,   94,   95,   97,   98,  101,  102,  103,  104,  108
  5814. ,  109,  110,  111,  113,  114,  115,  116,  120,  121,  124
  5815. ,  125,  126,  127,  132,  133,  134,  135,  141,  142,  142
  5816. ,  143,  143,  144,  148,  149,  153,  154,  154,  155,  158
  5817. ,  159,  161,  162,  162,  163,  166,  167,  170,  171,  171
  5818. ,  172,  174,  175,  175,  176,  179,  180,  182,  183,  185
  5819. ,  186,  191,  192,  192,  193,  194,  195,  196,  197,  236
  5820. ,  237,  237,  238,  242,  243,  245,  246,  246,  247,  250
  5821. ,  251,  273,  274,  298,  299,  299,  300,  301,  302,  314
  5822. ,  315,  316,  317,  318,  319,  319,  320,  325,  326,  411
  5823. ,  412,  412,  413,  413,  414,  414,  415,  417,  418,  427
  5824. ,  428,  431,  432,  432,  433,  435,  436,  436,  437,  437
  5825. ,  438,  438,  439,  439,  440,  440,  441,  446,  447,  446
  5826. ,  447,  446,  447,  446,  447,  447,  448,  452,  453,  456
  5827. ,  457,  457,  458,  458,  459,  459,  460,  460,  461,  461
  5828. ,  462,  464,  465,  467,  468,  469,  470,  472,  473,  473
  5829. ,  474,  476,  477,  477,  478,  482,  483,  490,  491,  498
  5830. ,  499,  501,  502,  517,  518,  518,  519,  519,  520,  520
  5831. ,  521,  521,  522,  523,  524,  526,  527,  528,  529,  529
  5832. ,  530,  530,  531,  531,  532,  533,  534,  534,  535,  536
  5833. ,  537,  537,  538,  545,  546,  546,  547,  547,  548,  554
  5834. ,  555,  556,  557,  558,  559,  576,  577,  578,  579,  579
  5835. ,  580,  580,  581,  581,  582,  583,  584,  584,  585,  585
  5836. ,  586,  587,  588,  588,  589,  589,  590,  604,  605,  609
  5837. ,  610,  610,  611,  612,  613,  615,  616,  630,  631,  631
  5838. ,  632,  632,  633,  633,  634,  634,  635,  636,  637,  637
  5839. ,  638,  641,  642,  644,  645,  647,  648,  649,  650,  651
  5840. ,  652,  652,  653,  653,  654,  655,  656,  658,  659,  659
  5841. ,  660,  661,  662,  662,  663,  664,  665,  666,  667,  667
  5842. ,  668,  668,  669,  669,  670,  671,  672,  672,  673,  673
  5843. ,  674,  674,  675,  679,  680,  680,  681,  684,  685,  688
  5844. ,  689,  691,  692,  694,  695,  695,  696,  698,  699,  700
  5845. ,  701,  711,  712,  712,  713,  713,  714,  714,  715,  715
  5846. ,  716,  716,  717,  717,  718,  718,  719,  719,  720,  720
  5847. ,  721,  723,  724,  726,  727,  727,  728,  729,  730,  730
  5848. ,  731,  733,  734,  734,  735,  735,  736,  736,  737,  737
  5849. ,  738,  738,  739,  739,  740,  740,  741,  754,  755,  762
  5850. ,  763,  764,  765,  765,  766,  777,  778,  779,  780,  781
  5851. ,  782,  782,  783,  783,  784,  784,  785,  785,  786,  786
  5852. ,  787,  787,  788,  789,  790,  790,  791,  791,  792,  792
  5853. ,  793,  794,  795,  795,  796,  796,  797,  797,  798,  798
  5854. ,  799,  800,  801,  801,  802,  803,  804,  804,  805,  805
  5855. ,  806,  807,  808,  813,  814,  815,  816,  817,  818,  818
  5856. ,  819,  819,  820,  831,  832,  832,  833,  834,  835,  838
  5857. ,  839,  839,  840,  840,  841,  847,  848,  854,  855,  860
  5858. ,  861,  862,  863,  863,  864,  865,  866,  866,  867,  868
  5859. ,  869,  869,  870,  870,  871,  871,  872,  872,  873,  874
  5860. ,  875,  876,  877,  877,  878,  878,  879,  879,  880,  880
  5861. ,  881,  881,  882,  882,  883,  883,  884,  885,  886,  886
  5862. ,  887,  888,  889,  889,  890,  891,  892,  892,  893,  895
  5863. ,  896,  896,  897,  897,  898,  898,  899,  900,  901,  901
  5864. ,  902,  902,  903,  903,  904,  904,  905,  905,  906,  906
  5865. ,  907,  908,  909,  909,  910,  911,  912,  912,  913,  913
  5866. ,  914,  914,  915,  915,  916,  917,  918,  918,  919,  922
  5867. ,  923,  925,  926,  926,  927,  927,  928,  929,  930,  930
  5868. ,  931,  931,  932,  932,  933,  933,  934,  935,  936,  936
  5869. ,  937,  937,  938,  939,  940,  940,  941,  941,  942,  942
  5870.  ) ;
  5871.     
  5872.     Shift_State_Map : constant Shift_State_Array :=
  5873.          (    1,  408,   34,  409,  468,  253,  131,  134,  137,  387
  5874. ,  469,  503,  619,  791,  214,   76,  310,  311,  493,  410
  5875. ,  801,  914,  940,  388,  591,  411,  245,  470,  515,  246
  5876. ,  471,  516,  750,  264,  271,  755,  823,  756,  171,  215
  5877. ,  379,  449,  702,  719,  725,  730,  772,  793,  794,  820
  5878. ,  827,  831,  859,  891,  895,  916,  936,  629,  389,  450
  5879. ,  412,  172,  587,   13,   89,   14,  413,  414,  864,  112
  5880. ,  239,  362,  771,   80,  154,  163,  285,  307,  314,  320
  5881. ,  357,  359,  380,  382,  383,  494,  512,  554,  555,  667
  5882. ,  712,  784,  807,  882,  472,  517,  853,  588,  695,  830
  5883. ,  871,  143,  718,   35,  166,  275,  286,  518,   36,  113
  5884. ,   37,  415,  637,  653,  874,  132,  135,  138,  766,  824
  5885. ,  101,  776,  860,  929,  464,  487,   15,   90,  173,  204
  5886. ,  366,  396,    2,  169,  174,  473,  519,  605,  634,  854
  5887. ,  884,   16,  416,  124,  247,  474,  782,  903,  504,  520
  5888. ,  790,  800,  843,  144,  308,  378,  543,  547,  155,  417
  5889. ,  599,  828,  418,  868,  915,  927,   17,  406,  662,  663
  5890. ,  175,  176,  205,  367,  677,  261,  270,  674,  863,  157
  5891. ,  177,  301,  178,  375,  377,  563,  670,  678,  698,  815
  5892. ,  919,  589,   32,  158,  133,  136,    9,   38,   72,   77
  5893. ,   78,   93,   96,  102,  159,  162,  217,  220,  248,  254
  5894. ,  280,  290,  293,  295,  298,  300,  302,  303,  327,  328
  5895. ,  346,  381,  394,  395,  419,  452,  486,  495,  560,  578
  5896. ,  614,  640,  692,  724,  747,  848,   39,   40,   73,  255
  5897. ,  291,  496,   41,  256,  641,  139,  125,  224,  376,  579
  5898. ,   11,   42,   79,  126,  156,  164,  223,  358,  370,  373
  5899. ,  384,  462,  475,  490,  505,  521,  538,  548,  602,  665
  5900. ,  795,  857,  905,  111,  229,  234,  288,  344,  453,  466
  5901. ,  492,  617,  707,  709,  713,  733,  742,  780,  786,  805
  5902. ,  809,  812,  835,  858,  880,  906,  923,  933,  145,   43
  5903. ,  140,  129,  230,  235,  260,  321,  340,  361,  536,  714
  5904. ,  745,  806,  810,  836,   44,  141,  127,  225,  146,  283
  5905. ,  305,  353,  577,  609,  849,   12,   81,   82,   88,  238
  5906. ,  309,  319,  322,  371,  372,  374,  385,  451,  463,  467
  5907. ,  485,  491,  537,  544,  553,  557,  558,  564,  570,  571
  5908. ,  573,  580,  608,  612,  624,  625,  626,  627,  636,  644
  5909. ,  658,  659,  668,  671,  672,  675,  676,  710,  716,  717
  5910. ,  728,  729,  737,  738,  739,  740,  741,  743,  744,  746
  5911. ,  751,  753,  759,  768,  769,  775,  787,  808,  817,  832
  5912. ,  834,  839,  840,  841,  847,  877,  879,  885,  886,  894
  5913. ,  897,  898,  904,  909,  911,  917,  922,  925,  926,  932
  5914. ,  942,  114,  115,  116,  226,  335,  872,  227,  228,  336
  5915. ,  616,  822,  873,  889,  913,  934,  939,  117,  231,  342
  5916. ,  343,  148,  488,  540,  581,  118,  119,  120,  420,  688
  5917. ,  483,  603,  604,  606,  607,  837,    3,   45,  252,  324
  5918. ,  502,  661,  170,  421,  699,  920,  179,  180,  181,  182
  5919. ,  183,   18,  184,  397,   19,  185,  398,  186,  399,   20
  5920. ,  187,  400,  188,   21,  189,  401,  190,  160,  191,  278
  5921. ,  481,  802,  390,  510,  541,  601,  635,  736,  883,  902
  5922. ,  489,  545,  546,  598,  655,  656,  783,  908,  391,  476
  5923. ,  542,   46,  103,  329,  330,  331,  337,  457,  497,  561
  5924. ,  567,  574,  611,  623,  654,  690,  748,  282,  192,  193
  5925. ,  194,  522,  855,  482,  535,  785,  610,  648,  523,  524
  5926. ,  525,  477,  526,  527,  478,  528,  529,   97,  276,  363
  5927. ,  392,  465,  511,  704,  708,  549,   98,  128,  232,  530
  5928. ,  550,  645,  734,  878,  531,  551,  532,  552,   47,  104
  5929. ,  240,  241,  243,  244,  262,  334,  455,  460,  461,  507
  5930. ,  562,  618,  632,  633,  789,  842,  642,  852,  732,  643
  5931. ,  533,  646,  647,  534,  479,  705,  875,  781,  539,   48
  5932. ,  105,  151,  296,  393,  422,  484,  559,  650,  660,  679
  5933. ,  706,  720,  811,  876,  651,  829,  845,  856,  869,  735
  5934. ,  242,  652,  638,  938,  941,   83,   94,  306,  312,  323
  5935. ,  513,  556,  620,  639,  727,  792,  798,  799,  850,  851
  5936. ,  731,  803,  804,  907,  921,  937,  931,  106,  456,  861
  5937. ,  930,  233,  890,  935,   84,   85,  299,   86,  167,  206
  5938. ,  402,  313,  195,  196,  726,  197,  222,  403,  404,  207
  5939. ,  368,  208,   22,  209,   23,  210,  211,   49,   50,   51
  5940. ,  297,  257,  249,  107,   52,  250,  325,  506,  689,  108
  5941. ,  236,  341,  595,  596,  109,  332,  338,  459,  237,  454
  5942. ,  458,  110,  333,  339,   53,   54,  258,  347,  130,  345
  5943. ,   55,  263,  265,  266,  267,  268,  269,  348,  349,  350
  5944. ,  351,   56,   57,   58,   59,   60,  121,  122,   61,   62
  5945. ,   63,  153,  272,   64,  152,  274,  149,   65,  273,   66
  5946. ,   67,  251,  326,   68,   69,  123,  142,   70,  147,  150
  5947. ,   99,  165,  277,  289,  304,  352,  364,  508,  565,  566
  5948. ,  572,  649,  657,  777,  316,  575,  582,  761,  770,  821
  5949. ,  825,  867,  423,  691,  583,  317,  693,  758,  762,  773
  5950. ,  814,  818,  866,  893,  901,  912,  924,  424,  584,  425
  5951. ,  585,  426,  427,  428,  429,  430,  431,  432,  680,  433
  5952. ,  434,  435,  436,  681,  437,  438,  439,  440,  441,  682
  5953. ,  442,  443,  586,  568,  673,  757,  767,  569,  669,  694
  5954. ,  754,  760,  819,  593,  752,  816,  892,  862,  444,  218
  5955. ,  294,  318,  407,  509,  697,  774,  797,  844,  870,  888
  5956. ,  899,  590,  216,  592,   87,  168,  315,  696,  594,  445
  5957. ,   24,   91,  198,  212,  281,  369,  405,  279,  287,  600
  5958. ,  749,  846,  887,  918,  356,  365,  813,  881,  910,  928
  5959. ,   74,  219,  354,  284,  355,  292,   25,   92,   26,   27
  5960. ,  386,  199,  514,  628,  630,  723,  213,  796,  631,  666
  5961. ,  446,  447,  448,  576,  826,  687,  683,  865,  684,  685
  5962. ,  896,  686,  763,  764,  765,  664,    4,    5,    6,   10
  5963. ,    7,   28,   29,    8,  221,   33,  778,  900,  833,  700
  5964. ,  779,   30,   31,   75,  161,  480,  838,  360,  498,  597
  5965. ,  613,  788,  615,  703,  711,  499,  500,  501,  715,  200
  5966. ,  201,  202,  203,  621,  722,  622,  721,   71,  259,  100
  5967. ,  701,   95)  ;
  5968.         --| Shift_State_ is an array that
  5969.         --| maps from non-terminals (using shift index map) to sets
  5970.         --| of states in which
  5971.         --| a shift to the non-terminal is defined.
  5972.         --| Used to determine the number of trials in primary
  5973.         --| error recovery.
  5974.  
  5975.     ------------------------------------------------------------------
  5976.     -- Subprogram Bodies Global to Package ErrorParseTables
  5977.     ------------------------------------------------------------------
  5978.  
  5979.     function Get_Action_Token_Map ( --| return the array of action tokens
  5980.                     --| for the state passed in.
  5981.         In_Index : in StateRange
  5982.                     --| the state to return action tokens
  5983.                     --| for.
  5984.         )
  5985.         return Action_Token_Record
  5986.         is
  5987.         --| Returns
  5988.         --| This subprogram returns the action token record for the
  5989.         --| state passed in.
  5990.         Result : Action_Token_Record ;
  5991.         LowerBound, UpperBound : GC.ParserInteger ;
  5992.         --| Lower and upper bounds of the slice of Action Token Map
  5993.     begin
  5994.         LowerBound := Action_Token_MapIndex ( In_Index*2 - 1 ) ;
  5995.         UpperBound := Action_Token_MapIndex ( In_Index*2 ) ;
  5996.  
  5997.         Result.set_size := UpperBound - LowerBound + 1;
  5998.         Result.set := (others => DefaultValue) ;
  5999.         Result.set(Result.set'first .. Result.set_size) :=
  6000.         Action_Token_Map(LowerBound..UpperBound) ;
  6001.       
  6002.         return Result ;
  6003.     end Get_Action_Token_Map ;
  6004.  
  6005.     ------------------------------------------------------------------
  6006.  
  6007.     function Get_Shift_State_Map (  --| return the array of shift states
  6008.                     --| for the grammar symbol passed in.
  6009.         In_Index : in GrammarSymbolRange
  6010.                     --| the grammar symbol to return shifts
  6011.                     --| for.
  6012.         )
  6013.         --| Raises: This subprogram raises no exceptions.
  6014.         return Shift_State_Record
  6015.         --| Returns
  6016.         --| This subprogram returns the array of shift states for the
  6017.         --| grammar symbol passed in.
  6018.         is
  6019.         
  6020.         Result : Shift_State_Record ;
  6021.         LowerBound, UpperBound : GC.ParserInteger ;
  6022.           --| Lower and upper bounds of the slice of Shift State Map
  6023.     begin
  6024.         LowerBound := Shift_State_MapIndex ( In_Index*2 - 1 ) ;
  6025.         UpperBound := Shift_State_MapIndex ( In_Index*2 ) ;
  6026.     
  6027.         Result.set_size := UpperBound - LowerBound + 1;
  6028.         Result.set := (others => DefaultValue) ;
  6029.         Result.set(Result.set'first .. Result.set_size) :=
  6030.             Shift_State_Map(LowerBound..UpperBound) ;
  6031.       
  6032.         return Result ;
  6033.     end Get_Shift_State_Map ;
  6034.  
  6035.     function Get_Grammar_Symbol (   --| return the string representation
  6036.                     --| of the grammar symbol
  6037.         In_Index : in GrammarSymbolRange
  6038.         )
  6039.         return string
  6040.         is
  6041.         LowerBound, UpperBound : GC.ParserInteger ;
  6042.       --| Lower and upper bounds of the slice of Shift State Map
  6043.     begin
  6044.         LowerBound := GrammarSymbolTableIndex ( In_Index*2 - 1 ) ;
  6045.         UpperBound := GrammarSymbolTableIndex ( In_Index*2 ) ;
  6046.  
  6047.         return GrammarSymbolTable(
  6048.             Integer(LowerBound) .. Integer(UpperBound)) ;
  6049.     end Get_Grammar_Symbol ;
  6050.  
  6051.     ------------------------------------------------------------------
  6052.  
  6053.     function Get_Follow_Map (       --| return the array of follow symbols
  6054.                     --| of the grammar symbol passed in
  6055.         In_Index : in FollowMapRange
  6056.         )
  6057.         -- |
  6058.         -- |Raises: This subprogram raises no exceptions.
  6059.         -- |
  6060.     
  6061.       return FollowSymbolRecord
  6062.       is
  6063.         Result : FollowSymbolRecord ;
  6064.         LowerBound, UpperBound : GC.ParserInteger ;
  6065.         Adjusted_Index : GC.ParserInteger :=
  6066.           (In_Index - FollowMapRange'first) + 1;
  6067.     begin
  6068.         LowerBound := FollowSymbolMapIndex ( Adjusted_Index*2 - 1 ) ;
  6069.         UpperBound := FollowSymbolMapIndex ( Adjusted_Index*2 ) ;
  6070.     
  6071.         Result.follow_symbol_count := UpperBound - LowerBound + 1;
  6072.         Result.follow_symbol := (others => DefaultValue) ;
  6073.         Result.follow_symbol(
  6074.           Result.follow_symbol'first ..
  6075.           Result.follow_symbol_count) :=
  6076.             FollowSymbolMap(LowerBound..UpperBound) ;
  6077.           
  6078.         return Result ;
  6079.     end Get_Follow_Map ;
  6080.  
  6081.     ------------------------------------------------------------------
  6082.  
  6083.     function GetAction (            -- see subprogram declaration
  6084.       InStateValue  : in StateRange;
  6085.       InSymbolValue : in GrammarSymbolRange
  6086.       )
  6087.       return ActionRange
  6088.       is
  6089.         
  6090.         Unique : GC.ParserInteger;
  6091.             --| unique value to hash for Index.
  6092.         Index  : GC.ParserInteger;
  6093.             --| index into Action Tables.
  6094.         Action : GC.ParserInteger;
  6095.             --| value from Action Tables.
  6096.         CollisionCount : Natural := 0 ; --| Number of collisions.
  6097.     begin -- GetAction function
  6098.     --| Algorithm
  6099.     --|-
  6100.     --| Definitions of key objects from package ParseTables:
  6101.     --|
  6102.     --| ActionCount: the number of actions in the action tables.
  6103.     --|
  6104.     --| ActionTableOne: table of action values for all combinations of
  6105.     --|     states and input actions.
  6106.     --|
  6107.     --| ActionTableTwo: hash values to check against to verify that action
  6108.     --|     value at same index in ActionTableOne is correct one.
  6109.     --|
  6110.     --| ActionTableSize: last index in ActionTableOne and ActionTableTwo
  6111.     --|     before the hash collision chains.
  6112.     --|
  6113.     --| DefaultMap: default action for each state.
  6114.     --|+
  6115.     --| The action to be returned is computed from parameters InStateValue
  6116.     --| and InSymbolValue. First, determine the unique single value:
  6117.     --|
  6118.     --|     Unique := (InStateValue * GrammarSymbolCountPlusOne) +
  6119.     --|                InSymbolValue;
  6120.     --|
  6121.     --| Unique is hashed by reducing modulo ActionTableSize and adding 1:
  6122.     --|
  6123.     --|     Index := (Unique mod ActionTableSize) + 1;
  6124.     --|
  6125.     --| This hash value, Index, is used to index ActionTableOne to
  6126.     --| obtain an Action:
  6127.     --|
  6128.     --|     Action := ActionTableOne(Index);
  6129.     --|
  6130.     --| Action is then used to determine the return value:
  6131.     --|
  6132.     --| Action = 0:
  6133.     --|     return DefaultMap(InStateValue);
  6134.     --|
  6135.     --| Action < ActionCount:
  6136.     --|     if (Unique = ActionTableTwo(Index)) then
  6137.     --|         return Action;
  6138.     --|     else
  6139.     --|         return DefaultMap(InStateValue);
  6140.     --|     end if;
  6141.     --|
  6142.     --| Action >= ActionCount:
  6143.     --|     --Search the hash collision chain
  6144.     --|     Index := Action - ActionCount;
  6145.     --|     while (Action /= 0) loop
  6146.     --|         Index := Index + 1;
  6147.     --|         Action := ActionTableTwo(Index);
  6148.     --|         if (Action = Unique) then
  6149.     --|             return ActionTableOne(Index);
  6150.     --|         end if;
  6151.     --|     end loop;
  6152.     --|     return DefaultMap(InStateValue);
  6153.  
  6154.     ------------------------------------------------------------------
  6155.  
  6156.   --| The actual code used folds this algorithm into a more efficient one:
  6157.         ParserDecisionCount := Natural'succ(ParserDecisionCount) ;
  6158.                                                                     
  6159.         Unique := (InStateValue * GrammarSymbolCountPlusOne) +          
  6160.                         InSymbolValue;                                  
  6161.         Index := (Unique mod ActionTableSize) + 1;                      
  6162.         Action := ActionTableOne(Index);                                
  6163.                                                                         
  6164.         if (Action >= ActionCount) then                                 
  6165.             Index := Action - ActionCount + 1;                          
  6166.             while ( (ActionTableTwo(Index) /= Unique) and then          
  6167.                     (ActionTableTwo(Index) /= 0) ) loop                 
  6168.                 Index := Index + 1;
  6169.             CollisionCount := Natural'succ(CollisionCount) ;
  6170.             end loop;                                                   
  6171.             Action := ActionTableOne(Index);                            
  6172.         end if;
  6173.         
  6174.         -- Collect statistics information.
  6175.         TotalCollisions := CollisionCount + TotalCollisions ;
  6176.         if CollisionCount > MaxCollisions then
  6177.             MaxCollisions := CollisionCount ;
  6178.         end if;
  6179.                                                                         
  6180.         if (ActionTableTwo(Index) /= Unique) then                       
  6181.             return DefaultMap(InStateValue);                            
  6182.         else                                                            
  6183.             return Action;                                              
  6184.         end if;                                                         
  6185.     
  6186.     end GetAction; -- function
  6187.  
  6188.     function Get_LeftHandSide(
  6189.       GrammarRule : LeftHandSideRange
  6190.       ) return GrammarSymbolRange is
  6191.     begin
  6192.         return LeftHandSide(GrammarRule) ;
  6193.     end Get_LeftHandSide ;
  6194.     
  6195.     function Get_RightHandSide(
  6196.       GrammarRule : RightHandSideRange
  6197.       ) return GC.ParserInteger is
  6198.     begin
  6199.         return RightHandSide(GrammarRule) ;
  6200.     end Get_RightHandSide ;
  6201.     
  6202. end RQS_ParseTables;
  6203.  
  6204. ----------------------------------------------------------------------
  6205. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6206. --rqsstates.spc
  6207. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6208.  
  6209. ----------------------------------------------------------------------
  6210.  
  6211. with RQS_ParserDeclarations;  -- declarations for the Parser
  6212. use RQS_ParserDeclarations;
  6213.  
  6214. package RQS_StateStack is     --| Elements awaiting parsing
  6215.  
  6216. --| Overview
  6217. --|
  6218. --| The StateStack used by the parser.
  6219. --|
  6220. --| This data structure has the following sets of operations:
  6221. --|
  6222. --| 1) A set that add and delete elements.
  6223. --| This set can raise the exceptions Underflow and Overflow.
  6224. --| The set includes:
  6225. --|
  6226. --|     Pop
  6227. --|     Push
  6228. --|     Reduce
  6229. --|
  6230. --| 2) A function that returns the number of elements in the
  6231. --| data structure.
  6232. --| This set raises no exceptions.
  6233. --| The set includes:
  6234. --|
  6235. --|     Length
  6236. --|
  6237. --| 3) A procedure that re-initializes the stack to have zero elements.
  6238. --| This set raises no exception.
  6239. --| The set includes:
  6240. --|
  6241. --|     Initialize 
  6242. --|
  6243. --| 4) A copy operations, to return the top of the stack.
  6244. --| The exception, UnderFlow,
  6245. --| is utilized to indicate the end of a sequential examination.
  6246. --| The set includes:
  6247. --|
  6248. --|     CopyTop
  6249. --|     InitCopy
  6250. --|     CopyNext
  6251.  
  6252. --| Notes
  6253. --|
  6254. --|     Under some implementations the exception
  6255. --| ParserDeclarations.MemoryOverflow could be raised.
  6256. --|
  6257.  
  6258.     ------------------------------------------------------------------
  6259.     -- Declarations Global to Package StateStack
  6260.     ------------------------------------------------------------------
  6261.  
  6262.     OverFlow  : exception;
  6263.     --| raised if no more space in stack.
  6264.     UnderFlow : exception;
  6265.     --| raised if no more elements in stack.
  6266.  
  6267.     ------------------------------------------------------------------
  6268.  
  6269.     procedure Push(                     --| Adds new top element to stack
  6270.     Element: in StateStackElement); --| element to add
  6271.  
  6272.     --|
  6273.     --| Raises
  6274.     --|
  6275.     --| OverFlow - no more space in stack.
  6276.  
  6277.     --| Effects
  6278.     --|
  6279.     --| This subprogram adds an element to the top of the stack.
  6280.     --|
  6281.  
  6282.     ------------------------------------------------------------------
  6283.  
  6284.     function Pop return StateStackElement;--| Removes top element in stack
  6285.  
  6286.     --| Raises
  6287.     --|
  6288.     --| UnderFlow - no more elements in stack.
  6289.  
  6290.     --| Effects
  6291.     --|
  6292.     --| This subprogram pops the element at the top of the stack.
  6293.     --|
  6294.  
  6295.     ------------------------------------------------------------------
  6296.  
  6297.     function CopyTop return StateStackElement;
  6298.     --| Copy top element in stack
  6299.  
  6300.     --| Raises
  6301.     --|
  6302.     --| UnderFlow - no more elements in stack.
  6303.     --|
  6304.  
  6305.     --| Effects
  6306.     --|
  6307.     --| Returns the top of the stack.
  6308.  
  6309.     ------------------------------------------------------------------
  6310.  
  6311.     function CopyNext return StateStackElement;
  6312.     --| Copy element after previous one copied
  6313.  
  6314.     --| Raises
  6315.     --|
  6316.     --| UnderFlow - no more elements in stack.
  6317.  
  6318.     --| Effects
  6319.     --|
  6320.     --| This subprogram is used in conjunction with
  6321.     --| CopyTop or Init Copy to sequentially examine the stack.
  6322.     --|
  6323.  
  6324.     ------------------------------------------------------------------
  6325.  
  6326.     function Length return StateParseStacksIndex;
  6327.    --| Returns the number of elements in the stack
  6328.  
  6329.     --| Effects
  6330.     --|
  6331.     --| This subprogram returns the number of elements in the stack.
  6332.     --|
  6333.  
  6334.     ----------------------------------------------------------------------
  6335.  
  6336.     procedure Initialize;      --| Re-initializes the state to have no
  6337.                 --| elements.
  6338.  
  6339.     --| Effects
  6340.     --| 
  6341.     --| Resets the top of the stack to the first element.
  6342.  
  6343.     ----------------------------------------------------------------------
  6344.     
  6345.     procedure InitCopy;           --| Initialize sequential examination of
  6346.                               --| the data structure
  6347.  
  6348.     --| Effects
  6349.     --|
  6350.     --| Initializes the copy function,
  6351.     --| so that subsequent calls to CopyNext will sequentially examine
  6352.     --| the elements in the data structure.
  6353.     --|
  6354.  
  6355.     ------------------------------------------------------------------
  6356.  
  6357.     function CopyThisOne (  --| returns element given by parm 'which_one'
  6358.     which_one:  StateParseStacksRange) return StateStackElement;
  6359.  
  6360.     --| Overview
  6361.     --|
  6362.     --| Returns the state stack element indicated by the parameter
  6363.     --| 'which_one'.  This operation is needed by LocalStateStack
  6364.     --| because, in essence, the state stack is being copied in two
  6365.     --| nested loops and the Next_To_Copy counter can therefore only
  6366.     --| be used for one of the series of copies.
  6367.  
  6368.     ------------------------------------------------------------------
  6369.  
  6370.     procedure Reduce(           --| Pops and discards top n elements on
  6371.                             --| the stack.
  6372.     TopN : StateParseStacksIndex);    --| Number of elements to pop.
  6373.  
  6374.     --| Raises:
  6375.     --|
  6376.     --| Underflow - no more elements in stack.
  6377.  
  6378.     --| Effects
  6379.     --|
  6380.     --| Pops and discards TopN elements on the stack.
  6381.     --| If TopN is greater than the number of elements in the stack,
  6382.     --| Underflow is raised.
  6383.     --| This subprogram is used by the parser to reduce the stack during
  6384.     --| a reduce action.
  6385.     --| This stack reduction could be done with a for
  6386.     --| loop and the Pop subprogram at a considerable cost in execution
  6387.     --| time.
  6388.     --|
  6389.  
  6390.     ------------------------------------------------------------------
  6391.  
  6392. end RQS_StateStack;
  6393.  
  6394. ----------------------------------------------------------------------
  6395. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6396. --rqsstates.bdy
  6397. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6398.  
  6399. ----------------------------------------------------------------------
  6400.  
  6401. with RQS_ParseTables;               -- state tables generated
  6402.                             -- by parser generator
  6403. use RQS_ParseTables;
  6404. with RQS_Grammar_Constants;         -- constants generated by parser generator
  6405. use RQS_Grammar_Constants;          -- to have visiblity on operations
  6406.                             -- on type ParserInteger.
  6407.  
  6408. package body RQS_StateStack is
  6409.  
  6410. --| Overview
  6411. --|
  6412. --| The data structure is implemented as an array.
  6413. --|
  6414.  
  6415. --| Notes
  6416. --|
  6417. --| Abbreviations used in this compilation unit:
  6418. --|
  6419. --| Init : used as prefix for Initialize
  6420. --|
  6421.  
  6422.     ------------------------------------------------------------------
  6423.     -- Declarations Global to Package Body StateStack
  6424.     ------------------------------------------------------------------
  6425.  
  6426.     Index        : StateParseStacksIndex := 0;
  6427.     --| top element in stack.
  6428.     Next_To_Copy : StateParseStacksIndex := 0;
  6429.     --| next element to copy in stack.
  6430.  
  6431.     Space : array (StateParseStacksRange) of StateStackElement;
  6432.     --| Storage used to hold stack elements
  6433.  
  6434.  
  6435.     ------------------------------------------------------------------
  6436.     -- Subprogram Bodies Global to Package StateStack
  6437.     -- (declared in package specification).
  6438.     ------------------------------------------------------------------
  6439.  
  6440.     procedure Push(Element: in StateStackElement) is
  6441.  
  6442.     begin
  6443.  
  6444.     if (Index >= StateParseStacksRange'Last) then
  6445.         raise OverFlow;
  6446.     end if;
  6447.  
  6448.     Index := Index + 1;
  6449.     Space (Index) := Element;
  6450.  
  6451.     end Push;
  6452.  
  6453.     ------------------------------------------------------------------
  6454.  
  6455.     function Pop return StateStackElement is
  6456.  
  6457.     begin
  6458.  
  6459.     if (Index < StateParseStacksRange'First) then
  6460.         raise UnderFlow;
  6461.     end if;
  6462.  
  6463.        Index := Index - 1;
  6464.        return Space (Index + 1);
  6465.  
  6466.     end Pop;
  6467.  
  6468.     ------------------------------------------------------------------
  6469.  
  6470.     function CopyTop return StateStackElement is
  6471.  
  6472.     begin
  6473.  
  6474.     InitCopy;
  6475.     return CopyNext;
  6476.  
  6477.     end CopyTop;
  6478.  
  6479.     ------------------------------------------------------------------
  6480.  
  6481.     function CopyNext return StateStackElement is
  6482.  
  6483.     begin 
  6484.  
  6485.     Next_To_Copy := Next_To_Copy - 1;
  6486.  
  6487.     if (Next_To_Copy < StateParseStacksRange'First) then
  6488.         raise UnderFlow;
  6489.     end if;
  6490.  
  6491.     return Space (Next_To_Copy);
  6492.  
  6493.     end CopyNext;
  6494.  
  6495.     ------------------------------------------------------------------
  6496.  
  6497.     function Length return StateParseStacksIndex is
  6498.  
  6499.     begin
  6500.  
  6501.     return Index;
  6502.  
  6503.     end Length;
  6504.  
  6505.     ------------------------------------------------------------------
  6506.     procedure Initialize      --| Re-initializes the state to have no
  6507.                 --| elements.
  6508.     is
  6509.     begin
  6510.     Index := 0;
  6511.     end Initialize;
  6512.  
  6513.     --| Effects
  6514.     --| 
  6515.     --| Resets the top of the stack to the first element.
  6516.  
  6517.     ----------------------------------------------------------------------
  6518.  
  6519.     procedure InitCopy is
  6520.  
  6521.     begin
  6522.  
  6523.     Next_To_Copy := Index + 1;  -- start examination here
  6524.  
  6525.     end InitCopy;
  6526.  
  6527.     ------------------------------------------------------------------
  6528.  
  6529.     function CopyThisOne (    --| returns the which_oneth element
  6530.     which_one:   StateParseStacksRange) return StateStackElement is
  6531.  
  6532.     begin
  6533.  
  6534.     if which_one > Index then
  6535.         raise OverFlow;
  6536.     end if;
  6537.  
  6538.     return (Space (which_one));
  6539.  
  6540.     end CopyThisOne;
  6541.  
  6542.     ------------------------------------------------------------------
  6543.  
  6544.     procedure Reduce (TopN : StateParseStacksIndex) is
  6545.  
  6546.     begin
  6547.  
  6548.     if (TopN > Index) then
  6549.         raise UnderFlow;
  6550.     end if;
  6551.  
  6552.     Index := Index - TopN;
  6553.  
  6554.     end Reduce;
  6555.  
  6556.     ------------------------------------------------------------------
  6557.  
  6558. end RQS_StateStack;
  6559.  
  6560. ----------------------------------------------------------------------
  6561. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6562. --rqspdecls.bdy
  6563. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6564.  
  6565. with unchecked_deallocation;
  6566. ----------------------------------------------------------------------
  6567.  
  6568. package body RQS_ParserDeclarations is
  6569.  
  6570.     subtype Dump_String_Range_Plus_Zero is
  6571.     STANDARD.NATURAL range 0 .. 4000;
  6572.  
  6573.     Dump_String        : string (1..Dump_String_Range_Plus_Zero'Last);
  6574.  
  6575.     Dump_String_Length : Dump_String_Range_Plus_Zero;
  6576.     -- must be set to zero before each use.
  6577.  
  6578.     ------------------------------------------------------------------
  6579.     -- Subprograms Local to Package ParserDeclarations
  6580.     ------------------------------------------------------------------
  6581.  
  6582.     procedure Append_To_Dump_String (   --| Add In_String to Dump_String
  6583.     In_String : in string           --| String to append
  6584.     );
  6585.  
  6586.     --| Effects
  6587.  
  6588.     --| This subprogram appends In_String to the package Body global
  6589.     --| Dump_String.
  6590.  
  6591.     --| Modifies
  6592.     --|
  6593.     --| Dump_String
  6594.     --| Dump_String_Length
  6595.  
  6596.     ------------------------------------------------------------------
  6597.     -- Subprogram Bodies Global to Package ParserDeclarations
  6598.     -- (declared in package specification).
  6599.     ------------------------------------------------------------------
  6600.  
  6601.     function Get_Source_Text(
  6602.     In_Source_Text : in Source_Text
  6603.     ) return string is
  6604.  
  6605.     begin
  6606.  
  6607.     if (In_Source_Text = Null_Source_Text) then
  6608.         return "" ;
  6609.     else
  6610.         return In_Source_Text.all ;
  6611.     end if;
  6612.  
  6613.     end Get_Source_Text;
  6614.  
  6615.     ------------------------------------------------------------------
  6616.  
  6617.     procedure Put_Source_Text(
  6618.     In_String          : in     string ;
  6619.     In_Out_Source_Text : in out Source_Text
  6620.     ) is
  6621.  
  6622.     begin
  6623.  
  6624.     In_Out_Source_Text := new string'(In_String);
  6625.  
  6626.     end Put_Source_Text;
  6627.  
  6628.     ------------------------------------------------------------------
  6629.  
  6630.     function Dump_Parse_Stack_Element(
  6631.     In_PSE : in ParseStackElement
  6632.     ) return string is
  6633.  
  6634.     --| Notes
  6635.  
  6636.     --| Abbreviations used in this compilation unit
  6637.     --|
  6638.     --| PSE : ParseStackElement
  6639.     --|
  6640.  
  6641.     begin
  6642.  
  6643.     Dump_String_Length := 0;
  6644.  
  6645.     -- Output data common to all ParseStackElements
  6646.     Append_To_Dump_String
  6647.         ("Element Kind:  "
  6648.         & PT.Get_Grammar_Symbol(In_PSE.gram_sym_val)
  6649.         & " "       -- give extra space to help highlight delimiters
  6650.         );
  6651.  
  6652.     -- Output data common to all lexed_tokens
  6653.     Append_To_Dump_String
  6654.         (" Token - Line: "
  6655.         & HD.Source_Line'IMAGE  (In_PSE.lexed_token.srcpos_line)
  6656.         &       " Column: "
  6657.         & HD.Source_Column'IMAGE(In_PSE.lexed_token.srcpos_column)
  6658.         );
  6659.  
  6660.     Append_To_Dump_String
  6661.         ( " Text: %"
  6662.         & Get_Source_Text(In_PSE.lexed_token.text)
  6663.         & "%"
  6664.         );
  6665.  
  6666.  
  6667.     -- Finally, finish up the message
  6668.     Append_To_Dump_String("");
  6669.  
  6670.     return Dump_String(1..Dump_String_Length);
  6671.  
  6672.     end Dump_Parse_Stack_Element;
  6673.  
  6674.     ------------------------------------------------------------------
  6675.  
  6676.     procedure flush is new unchecked_deallocation (string,
  6677.                                   Source_Text);
  6678.  
  6679.     procedure flush_source_text (s : in out source_text) is
  6680.     begin
  6681.     if s /= null then flush (s); end if;
  6682.     end flush_source_text;
  6683.  
  6684.     ------------------------------------------------------------------
  6685.     -- Subprogram Bodies Local to Package ParserDeclarations
  6686.     ------------------------------------------------------------------
  6687.  
  6688.     procedure Append_To_Dump_String(
  6689.     In_String : in string       --| String to append
  6690.     ) is
  6691.  
  6692.     begin
  6693.  
  6694.     Dump_String((Dump_String_Length + 1) ..
  6695.         (Dump_String_Length + In_String'Last)) := In_String;
  6696.  
  6697.     Dump_String_Length := Dump_String_Length + In_String'Length;
  6698.  
  6699.     end Append_To_Dump_String;
  6700.  
  6701.     ------------------------------------------------------------------
  6702.  
  6703.  
  6704. end RQS_ParserDeclarations;
  6705.  
  6706. ----------------------------------------------------------------------
  6707. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6708. --rqsparses.spc
  6709. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6710.  
  6711. ----------------------------------------------------------------------
  6712.  
  6713. with RQS_ParserDeclarations;        -- declarations for the Parser
  6714. use RQS_ParserDeclarations;
  6715.  
  6716. package RQS_ParseStack is           --| Elements awaiting parsing
  6717.  
  6718. --| Overview
  6719. --|
  6720. --| The ParseStack used by the parser.
  6721. --|
  6722. --| This data structure has the following sets of operations:
  6723. --|
  6724. --| 1) A set that add and delete elements.  This set can
  6725. --| raise the exceptions: UnderFlow and OverFlow.
  6726. --| The set includes:
  6727. --|
  6728. --|     Pop
  6729. --|     Push
  6730. --|     Reduce
  6731. --|
  6732. --| 2) A function that returns the number of elements in the
  6733. --| data structure. This set raises no exceptions.
  6734. --| The set includes:
  6735. --|
  6736. --|     Length
  6737. --|
  6738. --| 3) A procedure that re-initializes the stack to have zero elements.
  6739. --| This set raises no exception.
  6740. --| The set includes:
  6741. --|
  6742. --|     Initialize 
  6743.  
  6744. --|
  6745. --| Notes
  6746. --|
  6747. --|     Under some implementations the exception
  6748. --| ParserDeclarations.MemoryOverflow could be raised.
  6749. --|
  6750.  
  6751.     package PD renames RQS_ParserDeclarations;
  6752.  
  6753.     ------------------------------------------------------------------
  6754.     -- Declarations Global to Package ParseStack
  6755.     ------------------------------------------------------------------
  6756.  
  6757.     OverFlow  : exception;
  6758.     --| raised if no more space in stack.
  6759.     UnderFlow : exception;
  6760.     --| raised if no more elements in stack.
  6761.  
  6762.     ------------------------------------------------------------------
  6763.  
  6764.     procedure Push(         --| Adds new top element to stack
  6765.     Element: in PD.ParseStackElement); --| element to add
  6766.  
  6767.     --| Raises
  6768.     --|
  6769.     --| OverFlow - no more space in stack.
  6770.  
  6771.     --| Effects
  6772.     --|
  6773.     --| This subprogram adds an element to the top of the stack.
  6774.     --|
  6775.     
  6776.     ------------------------------------------------------------------
  6777.     
  6778.     function Pop                 --| Removes top element in stack
  6779.     return PD.ParseStackElement;
  6780.  
  6781.     --| Raises
  6782.     --|
  6783.     --| UnderFlow - no more elements in stack.
  6784.  
  6785.     --| Effects
  6786.     --|
  6787.     --| This subprogram obtains the element at the top of the stack.
  6788.     --|
  6789.     
  6790.     ------------------------------------------------------------------
  6791.     
  6792.     function Length                 --| Returns the number of
  6793.                                 --| elements in the stack
  6794.     return PD.StateParseStacksIndex;
  6795.  
  6796.     --| Effects
  6797.     --|
  6798.     --| This subprogram returns the number of elements in the stack.
  6799.     --|
  6800.     
  6801.     ----------------------------------------------------------------------
  6802.  
  6803.     procedure Initialize;      --| Re-initializes the state to have no
  6804.                 --| elements.
  6805.  
  6806.     --| Effects
  6807.     --| 
  6808.     --| Resets the top of the stack to the first element.
  6809.  
  6810.     ----------------------------------------------------------------------
  6811.     
  6812.     procedure Deallocate_Tokens(--| Deallocates the source texts of tokens
  6813.                 --| on the stack about to be popped.
  6814.     TopN : in PD.StateParseStacksIndex
  6815.                 --| how many tokens to deallocate
  6816.     );
  6817.  
  6818.     ----------------------------------------------------------------------
  6819.  
  6820.     procedure Reduce(           --| Pops and discards top n elements on
  6821.                             --| the stack.
  6822.     TopN : in PD.StateParseStacksIndex);
  6823.     --| Number of elements to pop.
  6824.  
  6825.     --| Raises
  6826.     --|
  6827.     --| Underflow - no more elements in stack.
  6828.  
  6829.     --| Effects
  6830.     --|
  6831.     --| Pops and discards top N elements on the stack.
  6832.     --| If TopN is greater than the number of elements in the stack,
  6833.     --| Underflow is raised.
  6834.     --| This subprogram is used by the parser to reduce the stack during
  6835.     --| a reduce action.
  6836.     --| This stack reduction could be done with a for loop and
  6837.     --| the Pop subprogram at a considerable cost in execution time.
  6838.     --|
  6839.     
  6840.     ----------------------------------------------------------------------
  6841.  
  6842.     function Get_Stack_Element(
  6843.                            position : PD.StateParseStacksIndex
  6844.                           ) 
  6845.                            return PD.ParseStackElement;
  6846.                 
  6847.     ----------------------------------------------------------------------
  6848. end RQS_ParseStack;
  6849.     
  6850. --------------------------------------------------------------------------
  6851. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6852. --rqsparses.bdy
  6853. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6854.  
  6855. ----------------------------------------------------------------------
  6856.  
  6857. with RQS_ParseTables;               -- state tables generated by parser
  6858.                             --     generator
  6859. use RQS_ParseTables;
  6860.  
  6861. with RQS_Grammar_Constants;
  6862. use RQS_Grammar_Constants;          -- to have visibility on operations
  6863.                             -- on type ParserInteger declared there.
  6864.  
  6865. with RQS_StateStack;
  6866.  
  6867. package body RQS_ParseStack is
  6868.  
  6869. --| Overview
  6870. --|
  6871. --| The data structure is implemented as an array.
  6872. --|
  6873.  
  6874.     ------------------------------------------------------------------
  6875.     -- Declarations Global to Package Body ParseStack
  6876.     ------------------------------------------------------------------
  6877.  
  6878.     Index       : PD.StateParseStacksIndex := 0;
  6879.     --| top element in stack.
  6880.  
  6881.     Space : array (PD.StateParseStacksRange) of PD.ParseStackElement;
  6882.     --| Storage used to hold stack elements
  6883.  
  6884.     ------------------------------------------------------------------
  6885.     -- Subprogram Bodies Global to Package ParseStack
  6886.     -- (declared in package specification).
  6887.     ------------------------------------------------------------------
  6888.  
  6889.     procedure Push(Element : in PD.ParseStackElement) is
  6890.  
  6891.     begin
  6892.  
  6893.     if (Index >= PD.StateParseStacksRange'Last) then
  6894.         raise OverFlow;
  6895.     end if;
  6896.  
  6897.     Index := Index + 1;
  6898.     Space (Index) := Element;
  6899.  
  6900.     end Push;
  6901.  
  6902.     ------------------------------------------------------------------
  6903.  
  6904.     function Pop return PD.ParseStackElement is
  6905.  
  6906.     begin
  6907.  
  6908.     if (Index < PD.StateParseStacksRange'First) then
  6909.         raise UnderFlow;
  6910.     end if;
  6911.  
  6912.     Index := Index - 1;
  6913.     return Space (Index + 1);
  6914.  
  6915.     end Pop;
  6916.  
  6917.     ------------------------------------------------------------------
  6918.  
  6919.     function Length return PD.StateParseStacksIndex is
  6920.  
  6921.     begin
  6922.  
  6923.     return Index;
  6924.  
  6925.     end Length;
  6926.  
  6927.     ------------------------------------------------------------------
  6928.  
  6929.     procedure Initialize      --| Re-initializes the state to have no
  6930.                 --| elements.
  6931.     is
  6932.     element : PD.ParseStackElement;
  6933.     begin
  6934.     while Index > 0 loop
  6935.         element := Space (Index);
  6936.         PD.flush_source_text (element.lexed_token.text);
  6937.         Index := Index - 1;
  6938.     end loop;
  6939.     end Initialize;
  6940.  
  6941.     --| Effects
  6942.     --| 
  6943.     --| Resets the top of the stack to the first element.
  6944.  
  6945.     ----------------------------------------------------------------------
  6946.  
  6947.     
  6948.     procedure Deallocate_Tokens(--| Deallocates the source texts of tokens
  6949.                 --| on the stack about to be popped.
  6950.     TopN : in PD.StateParseStacksIndex
  6951.                   --| how many tokens to deallocate
  6952.     ) is
  6953.  
  6954.     element : PD.ParseStackElement;
  6955.  
  6956.     begin
  6957.     if (TopN > Index) then
  6958.         raise UnderFlow;
  6959.     end if;
  6960.  
  6961.     for i in 1..TopN loop
  6962.         element := Space ((Index - i) + 1);
  6963.         PD.flush_source_text (element.lexed_token.text);
  6964.     end loop;
  6965.     end Deallocate_Tokens;
  6966.  
  6967.     ----------------------------------------------------------------------
  6968.     procedure Reduce(TopN : in PD.StateParseStacksIndex) is
  6969.  
  6970.     begin
  6971.     if (TopN > Index) then
  6972.         raise UnderFlow;
  6973.     end if;
  6974.  
  6975.     Index := Index - TopN;
  6976.  
  6977.     end Reduce; -- procedure
  6978.  
  6979.     ------------------------------------------------------------------
  6980.     function Get_Stack_Element(position : PD.StateParseStacksIndex)
  6981.     return PD.ParseStackElement is
  6982.  
  6983.     begin
  6984.     
  6985.     return Space(RQS_StateStack.Length - Position);
  6986.  
  6987.     end Get_Stack_Element; 
  6988.  
  6989.     ------------------------------------------------------------------
  6990. end RQS_ParseStack;
  6991.  
  6992. ----------------------------------------------------------------------
  6993. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6994. --rqsparser.spc
  6995. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6996.  
  6997. ----------------------------------------------------------------------
  6998.  
  6999. with RQS_ParserDeclarations;        -- declarations for the Parser
  7000. use RQS_ParserDeclarations;
  7001.  
  7002. package RQS_Parser is
  7003.  
  7004.     --| Notes
  7005.     --| 
  7006.     --| WARNING:
  7007.     --| 
  7008.     --| Some of the code for this package is in the grammar source that is
  7009.     --| input to the parse table generator. One of the ouputs of the
  7010.     --| parse table generator is the source for the body of the procedure
  7011.     --| Apply_Actions used in this package. This procedure provides case
  7012.     --| statements to select the number of the rule to be used.
  7013.     --| This procedure is declared as separate subunits in the
  7014.     --| body of this package. It is strongly recommended that
  7015.     --| the code of these functions be kept integrated with the grammar
  7016.     --| for the following reasons.
  7017.     --|
  7018.     --| 1) to keep the case select numbers consistent with the reduce
  7019.     --| action numbers in the parse tables.
  7020.     --| 
  7021.     --| 2) to associate each grammar rule with the code for its actions.
  7022.     --| 
  7023.  
  7024.     package PD renames RQS_ParserDeclarations;
  7025.  
  7026.     ------------------------------------------------------------------
  7027.  
  7028.     procedure Apply_Actions(
  7029.     Rule_Number : in PT.LeftHandSideRange);
  7030.  
  7031.     ------------------------------------------------------------------
  7032.     
  7033.     function Parse                  --| NYU LALR style parser
  7034.     return PD.ParseStackElement;
  7035.     
  7036.     --| Raises
  7037.     --|
  7038.     --| ParserDeclarations.MemoryOverflow
  7039.     --|
  7040.     
  7041.     --| Effects
  7042.     --|
  7043.     --| This parser takes input from a Lexer and parses it according
  7044.     --| to a set of grammar rules that have been converted into a set of
  7045.     --| ParseTables by the NYU LALR Parser Generator.
  7046.     
  7047.     --| Requires
  7048.     --|
  7049.     --| The parser expects the Lexer and other units it uses to be
  7050.     --| initialized.
  7051.     --|
  7052.     --| The units that stay the same for different grammars are:
  7053.     --|
  7054.     --| Parser.Parse (this subprogram)
  7055.     --| ParseStack
  7056.     --|
  7057.     --| The units that need to be changed for different grammars are:
  7058.     --|
  7059.     --| Parser.Apply_Actions
  7060.     --| Lex
  7061.     --| ParserDeclarations
  7062.     --| ParseTables
  7063.     --|
  7064.     
  7065.     --| Modifies
  7066.     --|
  7067.     --| The following are modified:
  7068.     --|
  7069.     --| ParseStack
  7070.     --|
  7071.     
  7072.     ------------------------------------------------------------------
  7073.  
  7074. end RQS_Parser;
  7075.  
  7076. ----------------------------------------------------------------------
  7077. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7078. --rqsparser.bdy
  7079. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7080.  
  7081. ----------------------------------------------------------------------
  7082.  
  7083. with RQS_Lex;                       -- the lexical analyzer
  7084. with RQS_ParseStack;                -- elements awaiting parsing
  7085. with RQS_StateStack;                -- stack of parse states
  7086. with RQS_ParseTables;               -- state tables generated by parser
  7087.                             -- generator
  7088. use RQS_ParseTables;
  7089.  
  7090. with RQS_Grammar_Constants;         -- constants generated by parser generator
  7091. use RQS_Grammar_Constants;
  7092.  
  7093. package body RQS_Parser is
  7094.  
  7095.     ------------------------------------------------------------------
  7096.     -- Reduce Action Work Variables
  7097.     ------------------------------------------------------------------
  7098.  
  7099.     Reduce_Action_Number   : PT.LeftHandSideRange;
  7100.     --| reduction to perform
  7101.  
  7102.     Reduce_Action_LH_Value : GrammarSymbolRange;
  7103.     --| grammar symbol number of left hand side of reduction
  7104.  
  7105.     Reduce_Action_RH_Size  : PD.StateParseStacksIndex;
  7106.     --| number of elements in right hand side of reduction
  7107.  
  7108.     ------------------------------------------------------------------
  7109.  
  7110.     procedure Apply_Actions(
  7111.     Rule_Number : in PT.LeftHandSideRange) is separate;
  7112.  
  7113.     ------------------------------------------------------------------
  7114.  
  7115.     function Parse return PD.ParseStackElement is
  7116.  
  7117.     --| Overview
  7118.     --|
  7119.     --| The appropriate reference is:
  7120.     --|
  7121.     --| Using the NYU LALR Parser Generator. Philippe Charles and
  7122.     --| Gerald Fisher. Courant Institute, New York University, 251 Mercer
  7123.     --| Street, New York, N.Y.  10012. Unpublished paper. 1981.
  7124.     --|
  7125.  
  7126.     --|
  7127.     --| Notes
  7128.     --|
  7129.     --| Abbreviations Used:
  7130.     --|
  7131.     --| Cur : Current - used as prefix
  7132.     --| LH  : LeftHand
  7133.     --| RH  : RightHand
  7134.     --|
  7135.  
  7136.     ------------------------------------------------------------------
  7137.     -- Objects
  7138.     ------------------------------------------------------------------
  7139.  
  7140.     Current_Action      : ActionRange;
  7141.     --| return from PT.GetAction.
  7142.  
  7143.     Start_State         : constant := 1;
  7144.     --| Start state for parser.
  7145.  
  7146.     Last_Element_Popped : PD.ParseStackElement;
  7147.     --| Last element popped from parse stack
  7148.  
  7149.     ------------------------------------------------------------------
  7150.  
  7151.     begin
  7152.  
  7153.     --|
  7154.     --| Algorithm
  7155.     --|
  7156.     --| Function PT.GetAction returns an action value,
  7157.     --| which indicate one of four possible actions:
  7158.     --|
  7159.     --| Error:  action value = 0.
  7160.     --| Shift:  0 < action value < StateCountPlusOne.
  7161.     --| Accept: action value = StateCountPlusOne.
  7162.     --| Reduce: action value > StateCountPlusOne.
  7163.     --|
  7164.     --| The action is processed (as described below).
  7165.     --| This is repeated until no more tokens are obtained.
  7166.     --|
  7167.     --| The basic action processing is:
  7168.     --|
  7169.     --| SHIFT ACTION: the next token is placed on the ParseStack.
  7170.     --|
  7171.     --| REDUCE ACTION: the handle (a grammar rule's right hand side)
  7172.     --| found on the ParseStack is replaced with a
  7173.     --| non-terminal (grammar rule's left hand side) to which
  7174.     --| it has been reduced, and a new state.
  7175.     --|
  7176.     --| ACCEPT ACTION: the ParseStack contains the root
  7177.     --| of the parse tree, and processing is finished for
  7178.     --| If another compilation unit is present, parsing continues.
  7179.     --|
  7180.     --| ERROR ACTION: the exception Parser_Error is raised.
  7181.  
  7182.     ------------------------------------------------------------------
  7183.     
  7184.     -- Initialize Lexical Analyzer
  7185.     RQS_Lex.Initialization;
  7186.  
  7187.     PD.CurToken := RQS_Lex.GetNextNonCommentToken;
  7188.  
  7189.     RQS_StateStack.Initialize;
  7190.     RQS_ParseStack.Initialize;
  7191.  
  7192.     RQS_StateStack.Push(Start_State);
  7193.  
  7194.     Do_Parse: loop
  7195.  
  7196.         Current_Action := PT.GetAction(
  7197.             RQS_StateStack.CopyTop,
  7198.             PD.CurToken.gram_sym_val);
  7199.  
  7200.         -- Accept action
  7201.         exit when (Current_Action in PD.Accept_Action_Range);
  7202.     
  7203.         if Current_Action in PD.Shift_Action_Range then
  7204.  
  7205.             -- Shift token from CurToken to ParseStack.
  7206.             RQS_ParseStack.Push(PD.CurToken);
  7207.  
  7208.             -- Add new state to top of StateStack
  7209.             RQS_StateStack.Push(Current_Action);
  7210.     
  7211.             -- Get next token.
  7212.             PD.CurToken := RQS_Lex.GetNextNonCommentToken;
  7213.     
  7214.         elsif Current_Action in PD.Reduce_Action_Range then
  7215.     
  7216.             Reduce_Action_Number := Current_Action -
  7217.                 StateCountPlusOne;
  7218.  
  7219.             Reduce_Action_LH_Value  :=
  7220.                 PT.Get_LeftHandSide(Reduce_Action_Number);
  7221.  
  7222.             Reduce_Action_RH_Size :=
  7223.                 PT.Get_RightHandSide(Reduce_Action_Number);
  7224.  
  7225.             Apply_Actions(Reduce_Action_Number);
  7226.  
  7227.             -- Reduce Parse Stack
  7228.             RQS_ParseStack.Reduce(Reduce_Action_RH_Size);
  7229.  
  7230.             RQS_ParseStack.Push((
  7231.                 gram_sym_val => Reduce_Action_LH_Value,
  7232.                 lexed_token => (
  7233.                     text => PD.Null_Source_Text,
  7234.                     srcpos_line => 0,
  7235.                     srcpos_column => 0)));
  7236.  
  7237.             -- Reduce State Stack
  7238.             RQS_StateStack.Reduce(Reduce_Action_RH_Size);
  7239.  
  7240.             RQS_StateStack.Push(PT.GetAction(
  7241.                 RQS_StateStack.CopyTop,
  7242.                 Reduce_Action_LH_Value));
  7243.  
  7244.  
  7245.         else -- Current_Action is in PD.Error_Action_Range
  7246.             raise PD.Parser_Error;
  7247.         end if;
  7248.     end loop Do_Parse;
  7249.     return RQS_ParseStack.Pop;
  7250.     
  7251.     exception
  7252.     when PD.MemoryOverflow =>
  7253.         -- raised if Parse runs out of newable memory.
  7254.         raise PD.MemoryOverflow;
  7255.     
  7256.     end Parse;
  7257.     
  7258.     ------------------------------------------------------------------
  7259.  
  7260. end RQS_Parser;
  7261.  
  7262. ----------------------------------------------------------------------
  7263. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7264. --rqslexidv.bdy
  7265. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7266.  
  7267. ----------------------------------------------------------------------
  7268.  
  7269. with RQS_Grammar_Constants;           -- constants from the parser generator
  7270. use RQS_Grammar_Constants;
  7271.     --| to gain visibility on ParserInteger's operations
  7272.  
  7273. package body RQS_Lex_Identifier_Token_Value is
  7274.  
  7275. --| Overview
  7276. --|
  7277. --| This perfect hash algorithm taken from
  7278. --|  "A Perfect Hash Function for Ada Reserved Words"
  7279. --|  by David Wolverton, published in Ada Letters Jul-Aug 1984
  7280. --|
  7281.     use RQS_ParseTables;
  7282.     package PT renames RQS_ParseTables;
  7283.  
  7284.     ------------------------------------------------------------------
  7285.     -- Declarations Local to Package Lex_Identifier_Token_Value
  7286.     ------------------------------------------------------------------
  7287.  
  7288.     subtype HashRange is integer ;
  7289.     subtype HashIdentifierSubrange is HashRange range 0..70 ;
  7290.  
  7291.     type XlateArray is array(character) of HashRange ;
  7292.     Xlate : constant XlateArray := XlateArray'(
  7293.     'A' => 0,    'B' => 49,   'C' => 0,   'D' => -7,   'E' => -20,
  7294.     'F' => 18,   'G' => -2,   'H' =>-38,  'I' => 33,   'J' =>  0,
  7295.     'K' => -9,   'L' =>  9,   'M' => 29,   'N' => -9,   'O' =>  6,
  7296.     'P' => 26,   'Q' =>  0,   'R' =>  8,   'S' =>  1,   'T' =>  1,
  7297.     'U' => -9,   'V' =>  0,   'W' => 56,   'X' =>-28,   'Y' => 11,
  7298.     'Z' =>  0, others => 0) ;
  7299.  
  7300.     type HashTableArray is array( HashIdentifierSubrange)
  7301.     of RQS_ParseTables.TokenRange ;
  7302.     --| Mapping from hash value into the token values.
  7303.  
  7304.     HashTable : constant HashTableArray := HashTableArray'(
  7305.     40 => 2,   -- ABORT
  7306.     6 => 3,    -- ABS
  7307.     37 => 4,   -- ACCEPT
  7308.     43 => 5,   -- ACCESS
  7309.     34 => 6,   -- ALL
  7310.     22 => 7,   -- AND
  7311.     16 => 8,   -- ARRAY
  7312.     3 => 9,    -- AT
  7313.     61 => 10,  -- BEGIN
  7314.     70 => 11,  -- BODY
  7315.     20 => 12,  -- CASE
  7316.     35 => 13,  -- CONSTANT
  7317.     14 => 14,  -- DECLARE
  7318.     9 => 15,   -- DELAY
  7319.     36 => 16,  -- DELTA
  7320.     38 => 17,  -- DIGITS
  7321.     7 => 18,   -- DO
  7322.     0 => 19,   -- ELSE
  7323.     19 => 20,  -- ELSIF
  7324.     2 => 21,   -- END
  7325.     30 => 22,  -- ENTRY
  7326.     8 => 23,   -- EXCEPTION
  7327.     1 => 24,   -- EXIT
  7328.     57 => 25,  -- FOR
  7329.     45 => 26,  -- FUNCTION
  7330.     21 => 27,  -- GENERIC
  7331.     46 => 28,  -- GOTO
  7332.     69 => 29,  -- IF
  7333.     42 => 30,  -- IN
  7334.     52 => 31,  -- IS
  7335.     17 => 32,  -- LIMITED
  7336.     67 => 33,  -- LOOP
  7337.     53 => 34,  -- MOD
  7338.     58 => 35,  -- NEW
  7339.     23 => 36,  -- NOT
  7340.     26 => 37,  -- NULL
  7341.     54 => 38,  -- OF
  7342.     44 => 39,  -- OR
  7343.     47 => 40,  -- OTHERS
  7344.     50 => 41,  -- OUT
  7345.     25 => 42,  -- PACKAGE
  7346.     56 => 43,  -- PRAGMA
  7347.     51 => 44,  -- PRIVATE
  7348.     49 => 45,  -- PROCEDURE
  7349.     29 => 46,  -- RAISE
  7350.     5 => 47,   -- RANGE
  7351.     41 => 48,  -- RECORD
  7352.     48 => 49,  -- REM
  7353.     24 => 50,  -- RENAMES
  7354.     39 => 51,  -- RETURN
  7355.     31 => 52,  -- REVERSE
  7356.     12 => 53,  -- SELECT
  7357.     27 => 54,  -- SEPARATE
  7358.     18 => 55,  -- SUBTYPE
  7359.     32 => 56,  -- TASK
  7360.     28 => 57,  -- TERMINATE
  7361.     4 => 58,   -- THEN
  7362.     15 => 59,  -- TYPE
  7363.     10 => 60,  -- USE
  7364.     59 => 61,  -- WHEN
  7365.     63 => 62,  -- WHILE
  7366.     60 => 63,  -- WITH
  7367.     11 => 64,  -- XOR
  7368.     others => PT.IdentifierTokenValue
  7369.     ) ;
  7370.  
  7371.     --| These are used to convert lower to upper case.
  7372.     convert : array(character) of character ;
  7373.     difference : constant := character'pos('a') - character'pos('A');
  7374.  
  7375.     ------------------------------------------------------------------
  7376.     -- Subprogram Specifications Local to
  7377.     -- Package Lex_Identifier_Token_Value
  7378.     ------------------------------------------------------------------
  7379.  
  7380.     function NormalizeToUpperCase ( --| normalize SYMREP to upper case
  7381.     In_String: in String) return String;
  7382.  
  7383.     ------------------------------------------------------------------
  7384.     -- Subprogram Bodies Global to Package Lex_Identifier_Token_Value
  7385.     ------------------------------------------------------------------
  7386.  
  7387.     procedure Find(
  7388.     In_Identifier   : in string;
  7389.     Out_Token_Value : out RQS_ParseTables.TokenRange) is
  7390.  
  7391.     subtype id_string is string(In_Identifier'Range);
  7392.  
  7393.     In_Identifier_Normalized : id_string;
  7394.  
  7395.     Length : HashRange := In_Identifier_Normalized'length ;
  7396.     --| Length of string
  7397.  
  7398.     First : HashRange := In_Identifier_Normalized'first ;
  7399.     --| Lower bound
  7400.  
  7401.     FirstChar, LastChar : character ;
  7402.     --| First and last characters
  7403.  
  7404.     SecondToLastChar : character ;
  7405.     --| Second to last character
  7406.  
  7407.     SecondToLast : HashRange;
  7408.     --| Alphabetic position of 2nd to last char.
  7409.  
  7410.     HashValue : HashRange ;
  7411.     --| Perfect hash value.
  7412.  
  7413.     TokenValue : RQS_ParseTables.GrammarSymbolRange ;
  7414.  
  7415.     begin
  7416.     In_Identifier_Normalized := NormalizeToUpperCase(In_Identifier);
  7417.  
  7418.     -- Assume In_Identifier is a plain identifier.
  7419.     Out_Token_Value   := PT.IdentifierTokenValue;
  7420.  
  7421.     if (Length <= 1) or else (Length >= 10) then
  7422.         -- Couldn't be a reserved word.
  7423.         return;
  7424.     else
  7425.         FirstChar := In_Identifier_Normalized(First) ;
  7426.         LastChar := In_Identifier_Normalized( (First+Length) -1 ) ;
  7427.         SecondToLastChar := In_Identifier_Normalized(
  7428.             (First+Length) -2 ) ;
  7429.         SecondToLast := character'pos(SecondToLastChar)
  7430.             - character'pos('A') ;
  7431.         HashValue := XLate(FirstChar) + XLate(LastChar) +
  7432.             2*SecondToLast + Length ;
  7433.     end if;
  7434.  
  7435.     if HashValue in HashIdentifierSubrange then
  7436.         -- index and see if it matches a reserved word value.
  7437.         -- if so, then compare the string to the reserved word text.
  7438.         TokenValue := RQS_ParseTables.GrammarSymbolRange(
  7439.         HashTable(HashValue)) ; -- conversion
  7440.         if TokenValue /= PT.IdentifierTokenValue then
  7441.             if (In_Identifier_Normalized =
  7442.             PT.Get_Grammar_Symbol(TokenValue) ) then
  7443.                 Out_Token_Value := PT.TokenRange(TokenValue) ;
  7444.                                  -- conversion
  7445.             end if;
  7446.         end if;
  7447.     end if;
  7448.     end Find;
  7449.  
  7450.     ------------------------------------------------------------------
  7451.     -- Subprogram Bodies Local to
  7452.     -- Package Lex_Identifier_Token_Value
  7453.     ------------------------------------------------------------------
  7454.  
  7455.     function NormalizeToUpperCase(  --| normalize SYMREP to upper case
  7456.     In_String: in String) return String is
  7457.  
  7458.     OutString : string (In_String'range);
  7459.  
  7460.     begin
  7461.     for i in In_String'range loop
  7462.         OutString(i) := convert(In_String(i));
  7463.     end loop;
  7464.     return OutString;
  7465.     end NormalizeToUpperCase;
  7466.  
  7467.     ------------------------------------------------------------------
  7468.  
  7469.     begin
  7470.  
  7471.     --| Initialize the conversion array for lower to upper case conversion
  7472.     for i in character loop
  7473.     case i is
  7474.         when 'a' .. 'z' =>
  7475.         convert(i) := character'val(character'pos(i)
  7476.                 - difference);
  7477.         when others =>
  7478.         convert(i) := i;
  7479.     end case;
  7480.     end loop;
  7481.  
  7482.     ------------------------------------------------------------------
  7483.  
  7484. end RQS_Lex_Identifier_Token_Value;
  7485.  
  7486. ----------------------------------------------------------------------
  7487. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7488. --rqsgrmcon.bdy
  7489. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7490. --+ GRMCONST.BDY +--
  7491.  
  7492. Package body RQS_Grammar_Constants is
  7493.  
  7494.     function setGrammarSymbolCount return ParserInteger is
  7495.     begin
  7496.         return   315 ;
  7497.     end setGrammarSymbolCount;
  7498.     
  7499.     function setActionCount return ParserInteger is
  7500.     begin
  7501.         return  1416 ;
  7502.     end setActionCount;
  7503.     
  7504.     function setStateCountPlusOne return ParserInteger is
  7505.     begin
  7506.         return   943 ;
  7507.     end setStateCountPlusOne;
  7508.     
  7509.     function setLeftHandSideCount return ParserInteger is
  7510.     begin
  7511.     return   471 ;
  7512.     end setLeftHandSideCount;
  7513.     
  7514.     function setRightHandSideCount return ParserInteger is
  7515.     begin
  7516.         return   471 ;
  7517.     end setRightHandSideCount;
  7518.     
  7519. end RQS_Grammar_Constants;
  7520.  
  7521. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7522. --reqs.spc
  7523. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7524. with DOCUMENT_REF;
  7525. with HOST_DEPENDENCIES;
  7526. with HOST_LIB;
  7527. with rqs_PARSERDECLARATIONS;
  7528. with STACK_PKG;
  7529. with STRING_PKG;
  7530. with STRING_LISTS;
  7531. with LISTS;
  7532. with Labeled_Binary_Trees_Pkg;
  7533. with Binary_Trees_Pkg;
  7534.  
  7535. package REQS is
  7536.  
  7537. package HL renames HOST_LIB;
  7538. package HD renames HOST_DEPENDENCIES;
  7539. package PD renames rqs_PARSERDECLARATIONS;
  7540. package SL renames STRING_LISTS;
  7541.  
  7542. subtype LOCATION is SL.LIST;    --| contains the components of a full
  7543.                 --| Ada name.
  7544.  
  7545. package ST is new STACK_PKG(PD.SOURCE_TEXT);
  7546.  
  7547. type REF_LINE_RECORD is
  7548.     record
  7549.       REF  : DOCUMENT_REF.REFERENCE_STRING;
  7550.       LINE : HD.SOURCE_LINE;
  7551.     end record;
  7552.  
  7553. type LOC_LINE_RECORD is
  7554.     record
  7555.       LOC  : LOCATION;
  7556.       LINE : HD.SOURCE_LINE;
  7557.     end record;
  7558.  
  7559. function Ref_Line_Difference(
  7560.     X : in REF_LINE_RECORD;
  7561.     Y : in REF_LINE_RECORD
  7562.     ) return integer;
  7563.  
  7564.     -- Effects
  7565.     -- Compare records of requirement string and line number. If
  7566.     -- x and y are two such records then x is less than y  if its
  7567.     -- requirement string is less than that of y. In case the requirement
  7568.     -- strings are equal their line numbers are compared.
  7569.  
  7570. function Loc_Line_Difference(
  7571.     X : in LOC_LINE_RECORD;
  7572.     Y : in LOC_LINE_RECORD
  7573.     ) return Integer;
  7574.  
  7575.     -- Effects
  7576.     -- Compare records of location and line number of requirement strings.
  7577.     -- If x and y are two such records then x is less than y if its location
  7578.     -- is less than that of y. In case they are equal the line numbers of
  7579.     -- the requirement strings are compared.
  7580.  
  7581. package REF_LINE_TREES is new Binary_Trees_Pkg(
  7582.     Value_Type => Ref_Line_Record,
  7583.     Difference => Ref_Line_Difference
  7584.     );
  7585.  
  7586. package LOC_LINE_TREES is new Binary_Trees_Pkg(
  7587.     Value_Type => Loc_Line_Record,
  7588.     Difference => Loc_Line_Difference
  7589.     );
  7590.  
  7591. package REQ_TREE_PKG is new Labeled_Binary_Trees_Pkg(
  7592.     LABEL_TYPE => DOCUMENT_REF.REFERENCE_STRING,
  7593.     VALUE_TYPE => LOC_LINE_TREES.TREE,
  7594.     Difference => DOCUMENT_REF.Compare
  7595.     );
  7596.  
  7597. function Compare_Locations(
  7598.     SL1 : in SL.LIST;
  7599.     SL2 : in SL.LIST
  7600.     ) return Integer;
  7601.  
  7602. package LOC_TREE_PKG is new Labeled_Binary_Trees_Pkg(
  7603.     LABEL_TYPE => LOCATION,
  7604.     VALUE_TYPE => REF_LINE_TREES.TREE,
  7605.     Difference => Compare_Locations
  7606.     );
  7607.  
  7608. package RT renames REQ_TREE_PKG;
  7609. package LT renames LOC_TREE_PKG;
  7610. package SP renames STRING_PKG;
  7611.  
  7612.  
  7613. type PAIRS_RECORD_TYPE is
  7614.     record
  7615.       REF         : DOCUMENT_REF.REFERENCE_STRING;
  7616.       UNIT        : LOCATION;
  7617.       LINE_NUMBER : HD.SOURCE_LINE;
  7618.     end record;
  7619.  
  7620. package PAIRS_RECORD_LISTS is new LISTS(PAIRS_RECORD_TYPE);
  7621.  
  7622. package PRL renames PAIRS_RECORD_LISTS;
  7623.  
  7624.  
  7625. procedure PUT_ERROR(        --| Put error message
  7626.     TEXT: in STRING        --| error message to print
  7627.     );
  7628.  
  7629. EMPTYSTACK: exception;    --| Raised if an attemp is made to manipulate
  7630.             --| an empty list.
  7631.  
  7632. ------------------------------------------------------------------------------
  7633. --  Declarations of global variables for reqsref
  7634. ------------------------------------------------------------------------------
  7635.  
  7636. PAIRS_FILE_PRINT_FLAG : BOOLEAN;
  7637.     -- Set to false if exceptions are raised
  7638.     -- during source file processing
  7639.  
  7640. CURRENT_LINE          : HD.SOURCE_LINE := 0;
  7641.                                        --current line in source text
  7642.  
  7643. STACK_INFO            : PD.SOURCE_TEXT;
  7644.                     --| Holds current stack information.  Used by grammar
  7645.                     --| and ReduceActions.apply_red.
  7646. SUBUNIT_STACK         : ST.STACK;
  7647.                     --| Holds current stack pointer
  7648. IDENTIFIER            : PD.SOURCE_TEXT;
  7649.                     --| Identifier for current subunit
  7650. IDENT_LINE_NUMBER     : HD.SOURCE_LINE;
  7651. PAIRS_CHECK_FLAG      : BOOLEAN;
  7652. IDENT_FLAG            : BOOLEAN := FALSE;
  7653.                     --| flag to mark identifier  (see getnext.sub)
  7654. REQ_TREE              : RT.TREE;
  7655. LOC_TREE              : LT.TREE;
  7656. PAIRS_RECORD_LIST     : PRL.LIST;
  7657.  
  7658. -------------------------------------------------------------------------
  7659. -- Procedures for stack operations
  7660. -------------------------------------------------------------------------
  7661.  
  7662. procedure PUSH_STACK;      --| Makes Element first item in stack Stk.
  7663.  
  7664. --| Effects
  7665. --| This prepends stack Stk with Element.
  7666.  
  7667. --| Modifies
  7668. --| This adds Element to the beginning of the stack Stk.
  7669.  
  7670. procedure POP_STACK;
  7671.  
  7672. function GET_LOCATION return LOCATION;
  7673. --| Reads through Subunit_Stack and puts out all back identifiers.
  7674.  
  7675. function IMAGE(LOCATION_NAME : in LOCATION) return SP.STRING_TYPE;
  7676. --| Returns the image of a program unit.
  7677.  
  7678. procedure GET_REF(
  7679.     Pairs_Record: Pairs_Record_Type
  7680.     );
  7681.  
  7682. --| N/A: Raises, Requires
  7683.  
  7684. --| Effects
  7685. --| This procedure looks at Ada comment tokens, If a comment starts with
  7686. --| the keyword that indicates the presence of a reference string then
  7687. --| the comment string is passed to the scan procedure in the document_ref
  7688. --| package to be parsed.
  7689.  
  7690. procedure CHECK_PAIRS;
  7691. --| N/A: Raises, Requires
  7692.  
  7693. --| Effects
  7694. --| Some requirement strings belong to program units that are not yet
  7695. --| on the parse stack when these requirement strings are found. This
  7696. --| procedure checks that a given requirement string is associated with the
  7697. --| correct program unit. If its line number in the source file is greater or
  7698. --| equal to the line number of identifier (see getnextnoncommenttoken) then
  7699. --| its program unit gets changed to include the new stack_info.
  7700.  
  7701. procedure PLACE_PAIR(PAIR : in PAIRS_RECORD_TYPE);
  7702.  
  7703. --| N/A: Raises, Requires
  7704.  
  7705. --| Effects
  7706. --| This procedure is needed to sort pairs of requirement-cited and
  7707. --| location-in-code by requirement as well as by location. Two labeled
  7708. --| tree structures, req_tree and loc_tree are used for the sorting.
  7709.  
  7710. procedure PRINT_PAIRS_FILE(
  7711.     PAIRS_FILE_NAME  : in SP.STRING_TYPE;    --| pairs file
  7712.     SOURCE_FILE_NAME : in SP.STRING_TYPE    --| corresponding source file
  7713.     );
  7714. --| N/A: Raises, Requires
  7715.  
  7716. --| Effects
  7717. --| After all requirement strings in a source file are found and sorted
  7718. --| binary trees the information from both trees is printed to a
  7719. --| pairs file.
  7720.  
  7721. function MAKE_PAIRS_FILE_NAME(
  7722. --| For a source file name return the corresponding pairs file name.
  7723.     SOURCE_FILE_NAME : in SP.STRING_TYPE
  7724.     ) return SP.STRING_TYPE;
  7725.  
  7726. end REQS;
  7727. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7728. --rqsapply.sub
  7729. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7730.  
  7731. with reqs;
  7732. -- with INT_IO;
  7733.  
  7734. separate (rqs_Parser)
  7735. procedure Apply_Actions(Rule_Number : in PT.LeftHandSideRange) is
  7736.  
  7737.     use reqs;
  7738. --  use INT_IO;
  7739.  
  7740. begin
  7741.     case Rule_Number is
  7742.  
  7743.  
  7744.  ----------------------------------------------------------------------
  7745. -- subprogram_declaration ::= subprogram_specification ;  
  7746.  
  7747. when 213 =>
  7748. -- PUT( 213 ,4);
  7749.  
  7750.     Pop_Stack ;
  7751.  ----------------------------------------------------------------------
  7752. -- subprogram_specification ::= PROCEDURE identifier  
  7753.  
  7754. when 214 =>
  7755. -- PUT( 214 ,4);
  7756.  
  7757.     Push_Stack ;
  7758.  ----------------------------------------------------------------------
  7759. -- subprogram_specification ::= PROCEDURE identifier ( parameter_specification  
  7760. --     )  
  7761.  
  7762. when 215 =>
  7763. -- PUT( 215 ,4);
  7764.  
  7765.     Push_Stack ;
  7766.  ----------------------------------------------------------------------
  7767. -- subprogram_specification ::= FUNCTION designator RETURN type_mark  
  7768.  
  7769. when 216 =>
  7770. -- PUT( 216 ,4);
  7771.  
  7772.     Push_Stack ;
  7773.  ----------------------------------------------------------------------
  7774. -- subprogram_specification ::= FUNCTION designator ( parameter_specification ) 
  7775.  
  7776. when 217 =>
  7777. -- PUT( 217 ,4);
  7778.  
  7779.     Push_Stack ;
  7780.  ----------------------------------------------------------------------
  7781. -- subprogram_body ::= subprogram_specification IS [end_designator] ;  
  7782.  
  7783. when 226 =>
  7784. -- PUT( 226 ,4);
  7785.  
  7786.    Pop_Stack ;
  7787.  ----------------------------------------------------------------------
  7788. -- package_declaration ::= package_specification ;  
  7789.  
  7790. when 228 =>
  7791. -- PUT( 228 ,4);
  7792.  
  7793.     Pop_Stack ;
  7794.  ----------------------------------------------------------------------
  7795. -- package_spec_indicator ::= PACKAGE identifier IS  
  7796.  
  7797. when 231 =>
  7798. -- PUT( 231 ,4);
  7799.  
  7800.     Push_Stack ;
  7801.  ----------------------------------------------------------------------
  7802. -- package_body ::= package_body_indicator declarative_part END [identifier] ;  
  7803.  
  7804. when 232 =>
  7805. -- PUT( 232 ,4);
  7806.  
  7807.     Pop_Stack ;
  7808.  ----------------------------------------------------------------------
  7809. -- package_body ::= package_body_indicator declarative_part__begin_end_block ;  
  7810.  
  7811. when 233 =>
  7812. -- PUT( 233 ,4);
  7813.  
  7814.     Pop_Stack ;
  7815.  ----------------------------------------------------------------------
  7816. -- package_body_indicator ::= PACKAGE BODY identifier IS  
  7817.  
  7818. when 234 =>
  7819. -- PUT( 234 ,4);
  7820.  
  7821.     Push_Stack ;
  7822.  ----------------------------------------------------------------------
  7823. -- renaming_declaration ::= subprogram_specification RENAMES name ;  
  7824.  
  7825. when 243 =>
  7826. -- PUT( 243 ,4);
  7827.  
  7828.     Pop_Stack ;
  7829.  ----------------------------------------------------------------------
  7830. -- task_declaration ::= task_specification ;  
  7831.  
  7832. when 244 =>
  7833. -- PUT( 244 ,4);
  7834.  
  7835.    pop_stack;
  7836.  ----------------------------------------------------------------------
  7837. -- task_specification ::= TASK identifier  
  7838.  
  7839. when 245 =>
  7840. -- PUT( 245 ,4);
  7841.  
  7842.    push_stack;
  7843.  ----------------------------------------------------------------------
  7844. -- task_specification ::= TASK TYPE identifier  
  7845.  
  7846. when 246 =>
  7847. -- PUT( 246 ,4);
  7848.  
  7849.    push_stack;
  7850.  ----------------------------------------------------------------------
  7851. -- task_specification ::= TASK identifier IS {entry_declaration} END  
  7852. --     [identifier]  
  7853.  
  7854. when 247 =>
  7855. -- PUT( 247 ,4);
  7856.  
  7857.    push_stack;
  7858.  ----------------------------------------------------------------------
  7859. -- task_specification ::= TASK TYPE identifier IS {entry_declaration} END  
  7860.  
  7861. when 248 =>
  7862. -- PUT( 248 ,4);
  7863.  
  7864.    push_stack;
  7865.  ----------------------------------------------------------------------
  7866. -- task_body ::= task_body_indicator declarative_part__begin_end_block ;  
  7867.  
  7868. when 249 =>
  7869. -- PUT( 249 ,4);
  7870.  
  7871.     pop_Stack ;
  7872.  ----------------------------------------------------------------------
  7873. -- task_body_indicator ::= TASK BODY identifier IS  
  7874.  
  7875. when 250 =>
  7876. -- PUT( 250 ,4);
  7877.  
  7878.     Push_Stack ;
  7879.  ----------------------------------------------------------------------
  7880. -- body_stub ::= subprogram_specification IS SEPARATE ;  
  7881.  
  7882. when 284 =>
  7883. -- PUT( 284 ,4);
  7884.  
  7885.     Pop_Stack ;
  7886.  ----------------------------------------------------------------------
  7887. -- body_stub ::= PACKAGE BODY identifier IS SEPARATE ;  
  7888.  
  7889. when 285 =>
  7890. -- PUT( 285 ,4);
  7891.  
  7892.     Pop_Stack ;
  7893.  ----------------------------------------------------------------------
  7894. -- body_stub ::= TASK BODY identifier IS SEPARATE ;  
  7895.  
  7896. when 286 =>
  7897. -- PUT( 286 ,4);
  7898.  
  7899.     pop_Stack ;
  7900.  ----------------------------------------------------------------------
  7901. -- generic_specification ::= generic_formal_part subprogram_specification  
  7902.  
  7903. when 295 =>
  7904. -- PUT( 295 ,4);
  7905.  
  7906.     Pop_Stack ;
  7907.  ----------------------------------------------------------------------
  7908. -- generic_specification ::= generic_formal_part package_specification  
  7909.  
  7910. when 296 =>
  7911. -- PUT( 296 ,4);
  7912.  
  7913.     Pop_Stack ;
  7914.  ----------------------------------------------------------------------
  7915. -- generic_parameter_declaration ::= WITH subprogram_specification ;  
  7916.  
  7917. when 301 =>
  7918. -- PUT( 301 ,4);
  7919.  
  7920.     Pop_Stack ;
  7921.  ----------------------------------------------------------------------
  7922. -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ;  
  7923.  
  7924. when 314 =>
  7925. -- PUT( 314 ,4);
  7926.  
  7927.     Pop_Stack ;
  7928.  ----------------------------------------------------------------------
  7929. -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ( )  
  7930. --     ;  
  7931.  
  7932. when 315 =>
  7933. -- PUT( 315 ,4);
  7934.  
  7935.     Pop_Stack ;
  7936.  
  7937.     when others =>
  7938.         null;
  7939.     end case;
  7940.  
  7941. end Apply_Actions;
  7942.  
  7943.  
  7944.  
  7945. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7946. --reqs.bdy
  7947. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7948. with FILE_MANAGER;
  7949. with DOCUMENT_REF;
  7950. with case_insensitive_string_comparison;
  7951. with TEXT_IO;
  7952.  
  7953. package body REQS is
  7954.  
  7955. package SC renames case_insensitive_string_comparison;
  7956.  
  7957. procedure PUT_ERROR(TEXT : in STRING) is
  7958. begin
  7959.     TEXT_IO.PUT_LINE("?? " & TEXT);
  7960.   end PUT_ERROR;
  7961.  
  7962. -- Procedures for stack operations
  7963. --------------------------------------------------------------------------
  7964.  
  7965.   procedure INIT_STACK_ELEMENT is
  7966.  
  7967.   begin
  7968.  
  7969.     STACK_INFO := IDENTIFIER;
  7970.  
  7971.   end INIT_STACK_ELEMENT;
  7972.  
  7973.   procedure PUSH_STACK is
  7974.  
  7975.   begin
  7976.  
  7977.     ST.PUSH(SUBUNIT_STACK, STACK_INFO);
  7978.     INIT_STACK_ELEMENT;
  7979.     PAIRS_CHECK_FLAG := TRUE;
  7980.     CHECK_PAIRS;
  7981.     PAIRS_RECORD_LIST := PRL.CREATE;
  7982.   end PUSH_STACK;
  7983.  
  7984.   procedure POP_STACK is
  7985.  
  7986.   begin
  7987.     ST.POP(SUBUNIT_STACK, STACK_INFO);
  7988.     PAIRS_CHECK_FLAG := FALSE;
  7989.     CHECK_PAIRS;
  7990.     PAIRS_RECORD_LIST := PRL.CREATE;
  7991.   exception
  7992.     when ST.EMPTY_STACK =>
  7993.       raise EMPTYSTACK;
  7994.   end POP_STACK;
  7995.  
  7996.  
  7997.   function GET_LOCATION return LOCATION is
  7998.  
  7999.     STR           : SP.STRING_TYPE;
  8000.     STK           : ST.STACK;
  8001.     NAME          : PD.SOURCE_TEXT;
  8002.     LOCATION_NAME : SL.LIST := SL.CREATE;
  8003.  
  8004.   begin
  8005.     STK := ST.COPY(SUBUNIT_STACK);
  8006.     STR := SP.CREATE(PD.GET_SOURCE_TEXT(STACK_INFO));
  8007.     SL.ATTACH(STR, LOCATION_NAME);
  8008.     while not ST.IS_EMPTY(STK) loop
  8009.       ST.POP(STK, NAME);
  8010.       STR := SP.CREATE(PD.GET_SOURCE_TEXT(NAME));
  8011.       SL.ATTACH(STR, LOCATION_NAME);
  8012.     end loop;
  8013.     SL.DELETEHEAD(LOCATION_NAME);
  8014.     ST.DESTROY(STK);
  8015.     return LOCATION_NAME;
  8016.   end GET_LOCATION;
  8017.  
  8018. function IMAGE(LOCATION_NAME : in LOCATION) return SP.STRING_TYPE is
  8019.     S    : SP.STRING_TYPE := SP.CREATE("");
  8020.     T    : SP.STRING_TYPE;
  8021.     ITER : SL.LISTITER := SL.MAKELISTITER(LOCATION_NAME);
  8022.  
  8023. begin
  8024.     if SL.MORE(ITER) then
  8025.       SL.NEXT(ITER, S);
  8026.     end if;
  8027.     while SL.MORE(ITER) loop
  8028.  
  8029.       SL.NEXT(ITER, T);
  8030.       S := SP."&"(S, ".");
  8031.       S := SP."&"(S, T);
  8032.     end loop;
  8033.     return S;
  8034.  
  8035. end IMAGE;
  8036.  
  8037. function Compare_Locations(
  8038.     SL1 : in SL.LIST;
  8039.     SL2 : in SL.LIST
  8040.     ) return integer
  8041. is
  8042.     S1, S2: SP.STRING_TYPE;
  8043.     ITER1: SL.LISTITER := SL.MAKELISTITER(SL1);
  8044.     ITER2: SL.LISTITER := SL.MAKELISTITER(SL2);
  8045.     Diff: integer;
  8046.  
  8047.   begin
  8048.     while SL.MORE(ITER1) and SL.MORE(ITER2) loop
  8049.       SL.NEXT(ITER1, S1);
  8050.       SL.NEXT(ITER2, S2);
  8051.       Diff := SC.Compare(SP.Value(S1), SP.Value(S2));
  8052.       if Diff /= 0 then
  8053.     return Diff;
  8054.       end if;
  8055.     end loop;
  8056.     if not SL.More(Iter1) then
  8057.     if SL.More(Iter2) then
  8058.       return -1;
  8059.     else
  8060.       return 0;
  8061.     end if;
  8062.     end if;
  8063.     return 1;
  8064.   end Compare_Locations;
  8065.  
  8066. function Ref_Line_Difference(
  8067.     X : in REF_LINE_RECORD;
  8068.     Y : in REF_LINE_RECORD
  8069.     ) return integer
  8070. is
  8071.     diff: integer := document_Ref.Compare(X.Ref, Y.Ref);
  8072.  
  8073. begin
  8074.     if Diff = 0 then
  8075.     return Integer(X.Line) - Integer(Y.Line);
  8076.     else
  8077.     return Diff;
  8078.     end if;
  8079.  
  8080. end Ref_Line_Difference;
  8081.  
  8082. function Loc_Line_Difference(
  8083.     X : in LOC_LINE_RECORD;
  8084.     Y : in LOC_LINE_RECORD
  8085.     ) return integer
  8086. is
  8087. begin
  8088.     if SL.EQUAL(X.LOC, Y.LOC) then
  8089.       return INTEGER(X.LINE) - INTEGER(Y.LINE);
  8090.     else
  8091.       return Compare_Locations(X.LOC, Y.LOC);
  8092.     end if;
  8093.   end LOC_LINE_Difference;
  8094.  
  8095. procedure GET_REF(
  8096.     Pairs_Record: Pairs_Record_Type
  8097.     ) is
  8098.  
  8099. begin
  8100.     PRL.ATTACH(PAIRS_RECORD_LIST, PAIRS_RECORD);
  8101.  
  8102. end GET_REF;
  8103.  
  8104.   procedure CHECK_PAIRS is
  8105.     ITER         : PRL.LISTITER := PRL.MAKELISTITER(PAIRS_RECORD_LIST);
  8106.     PAIRS_RECORD : PAIRS_RECORD_TYPE;
  8107.  
  8108.   begin
  8109.     while PRL.MORE(ITER) loop
  8110.       PRL.NEXT(ITER, PAIRS_RECORD);
  8111.       if PAIRS_CHECK_FLAG then
  8112.         if INTEGER(PAIRS_RECORD.LINE_NUMBER) >= INTEGER(IDENT_LINE_NUMBER) then
  8113.           PAIRS_RECORD.UNIT := GET_LOCATION;
  8114.         end if;
  8115.       end if;
  8116.       PLACE_PAIR(PAIRS_RECORD);
  8117.     end loop;
  8118.     PRL.DESTROY(PAIRS_RECORD_LIST);
  8119.   end CHECK_PAIRS;
  8120.  
  8121.   procedure PLACE_PAIR(PAIR : in PAIRS_RECORD_TYPE) is
  8122.     Found: BOOLEAN;
  8123.     REF_LINE, Dupl_Ref: REF_LINE_RECORD;
  8124.     LOC_LINE, Dupl_Loc: LOC_LINE_RECORD;
  8125.     Old_Refs: ref_Line_Trees.Tree;
  8126.     Old_Locs: loc_Line_Trees.Tree;
  8127.     New_Refs: ref_Line_Trees.Tree := ref_Line_Trees.Create;
  8128.     New_Locs: loc_Line_Trees.Tree := loc_Line_Trees.Create;
  8129.  
  8130.   begin
  8131.     REF_LINE.REF := PAIR.REF;
  8132.     REF_LINE.LINE := PAIR.LINE_NUMBER;
  8133.     LOC_LINE.LOC := PAIR.UNIT;
  8134.     LOC_LINE.LINE := PAIR.LINE_NUMBER;
  8135.  
  8136.     RT.Insert_If_Not_Found(Pair.Ref, new_Locs, req_Tree, Found, Old_Locs);
  8137.     if Found then
  8138.       Loc_Line_Trees.Destroy(new_Locs);    -- Not needed
  8139.       Loc_Line_Trees.Insert_If_Not_Found(Loc_Line, Old_Locs, Found, Dupl_Loc);
  8140.     else
  8141.       Loc_Line_Trees.Insert_If_Not_Found(Loc_Line, new_Locs, Found, Dupl_Loc);
  8142.     end if;
  8143.  
  8144.     LT.Insert_If_Not_Found(Pair.Unit, new_Refs, Loc_Tree, Found, Old_Refs);
  8145.     if Found then
  8146.       Ref_Line_Trees.Destroy(new_Refs);    -- Not needed
  8147.       Ref_Line_Trees.Insert_If_Not_Found(Ref_Line, Old_Refs, Found, Dupl_Ref);
  8148.     else
  8149.       Ref_Line_Trees.Insert_If_Not_Found(Ref_Line, new_Refs, Found, Dupl_Ref);
  8150.     end if;
  8151.  
  8152.   end PLACE_PAIR;
  8153.  
  8154.   procedure PRINT_PAIRS_FILE(PAIRS_FILE_NAME  : in SP.STRING_TYPE;
  8155.                              SOURCE_FILE_NAME : in SP.STRING_TYPE) is
  8156.     OUTPUT_FILE   : TEXT_IO.FILE_TYPE;
  8157.     LOCATION_NAME : LOCATION;
  8158.     REF           : DOCUMENT_REF.REFERENCE_STRING;
  8159.     STR           : SP.STRING_TYPE;
  8160.     REF_LINE_TREE : REF_LINE_TREES.TREE;
  8161.     LOC_LINE_TREE : LOC_LINE_TREES.TREE;
  8162.     REF_LINE_ITER : REF_LINE_TREES.Iterator;
  8163.     LOC_LINE_ITER : LOC_LINE_TREES.Iterator;
  8164.     REF_LINE      : REF_LINE_RECORD;
  8165.     LOC_LINE      : LOC_LINE_RECORD;
  8166.     REQ_ITER      : RT.Iterator := RT.MAKE_ITER(REQ_TREE);
  8167.     LOC_ITER      : LT.Iterator := LT.MAKE_ITER(LOC_TREE);
  8168.  
  8169.   begin
  8170.     if not RT.MORE(REQ_ITER) then
  8171.       PAIRS_FILE_PRINT_FLAG := FALSE;
  8172.       return;
  8173.     end if;
  8174.     TEXT_IO.CREATE(
  8175.         FILE => OUTPUT_FILE,
  8176.         MODE => TEXT_IO.OUT_FILE,
  8177.         NAME => SP.VALUE(PAIRS_FILE_NAME)
  8178.         );
  8179.     TEXT_IO.PUT_LINE(OUTPUT_FILE, SP.VALUE(SOURCE_FILE_NAME));
  8180.          -- print req_tree in sorted order.
  8181.     while RT.MORE(REQ_ITER) loop
  8182.       RT.NEXT(REQ_ITER, REF, LOC_LINE_TREE);
  8183.       TEXT_IO.PUT(OUTPUT_FILE, DOCUMENT_REF.IMAGE(REF));
  8184.       TEXT_IO.PUT(OUTPUT_FILE, '%');
  8185.       LOC_LINE_ITER := LOC_LINE_TREES.MAKE_ITER(LOC_LINE_TREE);
  8186.       while LOC_LINE_TREES.MORE(LOC_LINE_ITER) loop
  8187.         LOC_LINE_TREES.NEXT(LOC_LINE_ITER, LOC_LINE);
  8188.         STR := SP."&"(IMAGE(LOC_LINE.LOC), ",");
  8189.         STR := SP."&"(STR, SP.CREATE(INTEGER'IMAGE(LOC_LINE.LINE)));
  8190.         TEXT_IO.PUT(OUTPUT_FILE, SP.VALUE(STR));
  8191.         TEXT_IO.PUT(OUTPUT_FILE, "$");
  8192.       end loop;
  8193.       TEXT_IO.PUT_LINE(OUTPUT_FILE, "");
  8194.     end loop;
  8195.     TEXT_IO.PUT_LINE(OUTPUT_FILE, "@");
  8196.          -- print loc_tree in sorted order.
  8197.     while LT.MORE(LOC_ITER) loop
  8198.       LT.NEXT(LOC_ITER, LOCATION_NAME, REF_LINE_TREE);
  8199.       TEXT_IO.PUT(OUTPUT_FILE, SP.VALUE(IMAGE(LOCATION_NAME)));
  8200.       TEXT_IO.PUT(OUTPUT_FILE, '%');
  8201.       REF_LINE_ITER := REF_LINE_TREES.MAKE_ITER(REF_LINE_TREE);
  8202.       while REF_LINE_TREES.MORE(REF_LINE_ITER) loop
  8203.         REF_LINE_TREES.NEXT(REF_LINE_ITER, REF_LINE);
  8204.         STR := SP."&"(SP.CREATE(DOCUMENT_REF.IMAGE(REF_LINE.REF)), ",");
  8205.         STR := SP."&"(STR, SP.CREATE(INTEGER'IMAGE(REF_LINE.LINE)));
  8206.         TEXT_IO.PUT(OUTPUT_FILE, SP.VALUE(STR));
  8207.         TEXT_IO.PUT(OUTPUT_FILE, "$");
  8208.       end loop;
  8209.       TEXT_IO.PUT_LINE(OUTPUT_FILE, "");
  8210.     end loop;
  8211.     TEXT_IO.CLOSE(OUTPUT_FILE);
  8212.   end PRINT_PAIRS_FILE;
  8213.  
  8214.   function MAKE_PAIRS_FILE_NAME(
  8215.     SOURCE_FILE_NAME : in SP.STRING_TYPE
  8216.     )return SP.STRING_TYPE
  8217.   is
  8218.     POSITION   : NATURAL;
  8219.     SHORT_NAME : SP.STRING_TYPE := 
  8220.     SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(SOURCE_FILE_NAME)));
  8221.     SUFFIX     : SP.STRING_TYPE;
  8222.  
  8223.   begin
  8224.     POSITION := SP.MATCH_C(SHORT_NAME, '.', 1);
  8225.     SUFFIX := 
  8226.     SP.SUBSTR(SHORT_NAME, POSITION + 1, SP.LENGTH(SHORT_NAME) - POSITION);
  8227.     if SP.EQUAL(SUFFIX, "ADA") then
  8228.       SUFFIX := SP.CREATE("APR");
  8229.     elsif SP.EQUAL(SUFFIX, "BDY") then
  8230.       SUFFIX := SP.CREATE("BPR");
  8231.     elsif SP.EQUAL(SUFFIX, "DAT") then
  8232.       SUFFIX := SP.CREATE("DPR");
  8233.     elsif SP.EQUAL(SUFFIX, "SPC") then
  8234.       SUFFIX := SP.CREATE("SPR");
  8235.     elsif SP.EQUAL(SUFFIX, "SUB") then
  8236.       SUFFIX := SP.CREATE("UPR");
  8237.     else
  8238.       SUFFIX := SP.CREATE("PR");
  8239.     end if;
  8240.     return SP."&"(
  8241.     SP.SUBSTR(SOURCE_FILE_NAME, 1, SP.LENGTH(SOURCE_FILE_NAME) - 3), 
  8242.     SUFFIX
  8243.     );
  8244.   end MAKE_PAIRS_FILE_NAME;
  8245.  
  8246. end REQS;
  8247. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8248. --merge.spc
  8249. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8250. with REQS; use REQS; 
  8251. with TEXT_IO; 
  8252. with DOCUMENT_REF; 
  8253.  
  8254. package MERGE_PKG is 
  8255.  
  8256. BAD_PAIRS_FILE: exception; 
  8257. --| Raised when an attempt is made to read pairs from a file that
  8258. --| contains invalid data.
  8259.  
  8260. ABORT_MERGE_PHASE : exception; 
  8261. --| raised when merge phase cannot be completed.
  8262.  
  8263. type REPORT_TYPE is (LOCATION, REQUIREMENT, NOREPORT); 
  8264.  
  8265. type FILE_PTR is access TEXT_IO.FILE_TYPE; 
  8266.  
  8267. type REQ_RECORD is 
  8268.     record
  8269.       REF              : DOCUMENT_REF.REFERENCE_STRING; 
  8270.       SOURCE_FILE_NAME : SP.STRING_TYPE; 
  8271.       PAIRS_FILE_NAME  : SP.STRING_TYPE; 
  8272.       PAIRS_FILE       : FILE_PTR; 
  8273.       LOCATION_STRING  : SP.STRING_TYPE; 
  8274.       MORE             : BOOLEAN := TRUE; 
  8275.     end record; 
  8276.  
  8277.  
  8278. REF_WIDTH: constant INTEGER := 20; 
  8279. --| Maximal number of characters in a reference string   
  8280.  
  8281. FILE_NAME_WIDTH: constant INTEGER := 15; 
  8282. --| maximal number of characters in a file pathname
  8283.  
  8284. UNIT_WIDTH: constant INTEGER := 35; 
  8285. --| maximal number of characters in a program unit name   
  8286.  
  8287. LINE_NUM_WIDTH: constant INTEGER := 6; 
  8288. --| maximal number of characters in line number
  8289.  
  8290. function GET_REPORT_HEADER(REPORT_KIND : in REPORT_TYPE) return STRING; 
  8291.  
  8292. procedure LOCATION_REPORT(
  8293.     PAIRS_FILES : in SL.LIST    -- list of pairs files
  8294.     ); 
  8295.  
  8296. --| N/A: Raises
  8297.  
  8298. --| Requires
  8299. --| The files in pairs_list must be pairs files, e. i. files created by 
  8300. --| REQSREF containing pairs of Requirement-Cited and Location-in-Code. 
  8301.  
  8302. --| Effects
  8303. --| This procedure is called when the sort_by parameter is set to LOCATION.
  8304. --| It sorts the pairs files alphabetically. Then from each file it gets those
  8305. --| lines which contain pairs sorted by location and passes them to 
  8306. --| proccess_ location_line. 
  8307.  
  8308. procedure REQUIREMENT_MERGE(
  8309.     PAIRS_FILES : in SL.LIST    -- list of pairs files
  8310.     ); 
  8311.  
  8312. --| N/A: Raises
  8313.  
  8314. --| Requires
  8315. --| The files in pairs_list must be pairs files, e.i. files created by
  8316. --| REQSREF, containing pairs of Requirement-Cited and Location-in-Code.
  8317.  
  8318. --| Effects
  8319. --| This procedure is called when the sort_by parameter is set to REQUIREMENT.
  8320. --| It merges the pairs which are sorted by requirement so that a report can
  8321. --| be generated. The records are first sorted by REQUIREMENT then by file
  8322. --| names, then by line numbers.
  8323.  
  8324. procedure PROCESS_LOCATION_LINE(LINE : in SP.STRING_TYPE); 
  8325. --| A string whose first part is a requirement, followed by a list of Ada
  8326. --| locations and line numbers
  8327.  
  8328. --| N/A: Raises, Requires
  8329.  
  8330. --| Effects
  8331. --| Gets the requirements, Ada unit names and line numbers of the requirement
  8332. --| in the file from LINE and prints the information to the report file.
  8333.  
  8334. procedure PROCESS_REQ_LINE(
  8335.     LINE : in SP.STRING_TYPE; 
  8336.     --| A string whose first part is an Ada unit name. That is followed
  8337.     --| by a list of requirements and their line_numbers in the file.
  8338.     REQ  : in out REQ_RECORD
  8339.     --| The record whose fields are to hold information from line
  8340.     ); 
  8341.  
  8342. --| N/A Raises, Requires
  8343.  
  8344. --| Effects
  8345. --| Takes Requirement and Location from line and assigns them to the 
  8346. --| appropriate fields of req.
  8347.  
  8348. procedure PRINT_RECORD(
  8349.     REQ : in REQ_RECORD        --| Record to be printed
  8350.     );
  8351. --| N/A: Raises, Requires
  8352.  
  8353. --| Effects
  8354. --| Prints information from the req_record to the report file.
  8355.  
  8356. function REQ_LESS_EQ(X : in REQ_RECORD; 
  8357.                      Y : in REQ_RECORD) return BOOLEAN; 
  8358. --| N/A Raises, Requires
  8359.  
  8360. --| Effects
  8361. --| This comparison function compares the reference_string fields and the
  8362. --| file_name fields of x and y. It returns true if x.ref , y.ref, or if
  8363. --| in case of their equality x.file_name <= y.file_name.
  8364.  
  8365. end MERGE_PKG; 
  8366. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8367. --merge.bdy
  8368. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8369. with FILE_MANAGER; 
  8370. with PAGINATED_OUTPUT; 
  8371. with case_insensitive_string_comparison;
  8372. with Binary_Trees_Pkg; 
  8373.  
  8374. package body MERGE_PKG is 
  8375.  
  8376.   package PO renames PAGINATED_OUTPUT; 
  8377.   package SC renames  case_insensitive_string_comparison;
  8378.  
  8379.   package INT_IO is new TEXT_IO.INTEGER_IO(INTEGER); 
  8380.  
  8381.   function compare_File_Names(P, Q: SP.String_Type) return integer;
  8382.  
  8383.   package FILE_TREE_PKG is new BINARY_TREES_Pkg(
  8384.     Value_Type => SP.STRING_TYPE,
  8385.     Difference => compare_File_Names
  8386.     ); 
  8387.  
  8388.   package FTP renames FILE_TREE_PKG; 
  8389.   FILE_TREE: FTP.TREE; 
  8390.  
  8391.  
  8392.   INT_STRING       : STRING(1 .. LINE_NUM_WIDTH); 
  8393.   LAST             : INTEGER; 
  8394.   SOURCE_FILE_NAME : SP.STRING_TYPE; 
  8395.  
  8396. function compare_File_Names(P, Q: SP.String_Type) return integer is
  8397. begin
  8398.     return SC.Compare(SP.Value(P), SP.Value(Q));
  8399.  
  8400. end compare_File_Names;
  8401.  
  8402.  
  8403. function GET_REPORT_HEADER(
  8404.     REPORT_KIND : in REPORT_TYPE
  8405.     ) return STRING
  8406. is 
  8407.     BLANKS : SP.STRING_TYPE := SP.CREATE(
  8408.         "                                              "); 
  8409.     S      : SP.STRING_TYPE; 
  8410.  
  8411. begin
  8412.     if REPORT_KIND = REQUIREMENT then 
  8413.       S := SP."&"("Requirement", SP.SUBSTR(BLANKS, 1, REF_WIDTH - 11)); 
  8414.       S := SP."&"(S, "File"); 
  8415.       S := SP."&"(S, SP.SUBSTR(BLANKS, 1, FILE_NAME_WIDTH + LINE_NUM_WIDTH - 8))
  8416.         ; 
  8417.       S := SP."&"(S, "Line"); 
  8418.       S := SP."&"(S, SP.SUBSTR(BLANKS, 1, 3)); 
  8419.       S := SP."&"(S, "Unit"); 
  8420.     elsif REPORT_KIND = LOCATION then 
  8421.       S := SP."&"("File", SP.SUBSTR(BLANKS, 1, FILE_NAME_WIDTH + LINE_NUM_WIDTH
  8422.         - 8)); 
  8423.       S := SP."&"(S, "Line"); 
  8424.       S := SP."&"(S, SP.SUBSTR(BLANKS, 1, 3)); 
  8425.       S := SP."&"(S, "Unit"); 
  8426.       S := SP."&"(S, SP.SUBSTR(BLANKS, 1, UNIT_WIDTH - 4)); 
  8427.       S := SP."&"(S, "Requirement"); 
  8428.     end if; 
  8429.     return SP.VALUE(S); 
  8430. end GET_REPORT_HEADER; 
  8431.  
  8432. procedure LOCATION_REPORT(PAIRS_FILES : in SL.LIST) is 
  8433. -- This procedure sorts and reada pairs files. A pairs file is a file 
  8434. -- created by REQSREF, which contains two sections: pairs sorted by 
  8435. -- require<ment and the same pairs sorted by location. '@' is used to 
  8436. -- separate these sections. Location_merge is only interested in the
  8437. -- second part of a pairs file, the pairs sorted by location.
  8438. --
  8439. -- The elements of the pairs_files list are first sorted and stored in a
  8440. -- binary tree. Then each file is opened and read line by line. When the
  8441. -- separator '@' is found the following lines are passed to process_
  8442. -- location_line in order to be printed.
  8443.  
  8444.     PRESENT    : BOOLEAN; 
  8445.     MAX_LINE   : INTEGER := 1000; 
  8446.     LINE       : STRING(1 .. MAX_LINE); 
  8447.     STR        : SP.STRING_TYPE; 
  8448.     PAIRS_FILE : TEXT_IO.FILE_TYPE; 
  8449.     LIST_ITER  : SL.LISTITER; 
  8450.     FILE_ITER  : FTP.Iterator; 
  8451.  
  8452.   begin
  8453.       -- sort the pairs_files
  8454.     FILE_TREE := FTP.CREATE; 
  8455.     LIST_ITER := SL.MAKELISTITER(PAIRS_FILES); 
  8456.     while SL.MORE(LIST_ITER) loop
  8457.       SL.NEXT(LIST_ITER, STR); 
  8458.       STR := SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(STR)));
  8459.       FTP.INSERT(STR, FILE_TREE); 
  8460.     end loop; 
  8461.  
  8462.          -- For each pairs file get the stored information line by line.
  8463.     FILE_ITER := FTP.MAKE_ITER(FILE_TREE); 
  8464.     while FTP.MORE(FILE_ITER) loop
  8465.       FTP.NEXT(FILE_ITER, STR); 
  8466.       TEXT_IO.OPEN(
  8467.         FILE => PAIRS_FILE,
  8468.         MODE => TEXT_IO.IN_FILE,
  8469.         NAME => SP.VALUE(STR)
  8470.         ); 
  8471.       TEXT_IO.SET_INPUT(PAIRS_FILE); 
  8472.       TEXT_IO.GET_LINE(PAIRS_FILE, LINE, LAST); 
  8473.       STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST); 
  8474.       SOURCE_FILE_NAME := SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(STR)));
  8475.             -- Skip over the first part of the file which contains the
  8476.             -- pairs sorted by reqrequirement. 
  8477.       loop
  8478.         begin
  8479.           TEXT_IO.GET_LINE(PAIRS_FILE, LINE, LAST); 
  8480.           exit when LINE(1) = '@'; 
  8481.         exception
  8482.           when TEXT_IO.END_ERROR => 
  8483.             raise BAD_PAIRS_FILE; 
  8484.         end; 
  8485.       end loop; 
  8486.       while not TEXT_IO.END_OF_FILE(PAIRS_FILE) loop
  8487.         TEXT_IO.GET_LINE(PAIRS_FILE, LINE, LAST); 
  8488.         PROCESS_LOCATION_LINE(SP.CREATE(LINE)); 
  8489.       end loop; 
  8490.       TEXT_IO.CLOSE(PAIRS_FILE); 
  8491.     end loop; 
  8492.  
  8493.   exception
  8494.  
  8495.     when TEXT_IO.STATUS_ERROR => 
  8496.       PUT_ERROR("File " & SP.VALUE(STR) & " already open."); 
  8497.       raise ABORT_MERGE_PHASE; 
  8498.  
  8499.     when TEXT_IO.USE_ERROR => 
  8500.       PUT_ERROR("Unable to open file " & SP.VALUE(STR) & " for input."); 
  8501.       raise ABORT_MERGE_PHASE; 
  8502.  
  8503.     when TEXT_IO.NAME_ERROR => 
  8504.       PUT_ERROR("Invalid file name " & SP.VALUE(STR) & "."); 
  8505.       raise ABORT_MERGE_PHASE; 
  8506.  
  8507.     when BAD_PAIRS_FILE => 
  8508.       PUT_ERROR("Unable to interpret " & TEXT_IO.NAME(PAIRS_FILE) & 
  8509.         " as a pairs_file."); 
  8510.       raise ABORT_MERGE_PHASE; 
  8511.  
  8512. end LOCATION_REPORT; 
  8513.  
  8514. procedure PROCESS_LOCATION_LINE(LINE : in SP.STRING_TYPE) is 
  8515.  
  8516. -- This procedure takes a location line and extracts from it the 
  8517. -- location (which is a full Ada name) and the reference strings with
  8518. -- their line numbers. These items are then printed to the report file.
  8519. --
  8520. -- '%' separates the location from the list of reference strings. Two
  8521. -- reference strings are separated by '$', and ',' is used to separate  
  8522. -- a reference string and its line number.
  8523.  
  8524.     LOCATION_STRING    : SP.STRING_TYPE; 
  8525.     REQ_STRING         : SP.STRING_TYPE; 
  8526.     NUMBER             : INTEGER; 
  8527.     LINE_NUMBER        : SP.STRING_TYPE; 
  8528.     POSITION, PREV_POS : NATURAL := 1; 
  8529.     TEMP_POS           : POSITIVE; 
  8530.  
  8531.   begin
  8532.     POSITION := SP.MATCH_C(LINE, '%', PREV_POS); 
  8533.     LOCATION_STRING := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS); 
  8534.     PREV_POS := POSITION + 1; 
  8535.     loop
  8536.       POSITION := SP.MATCH_C(LINE, ',', PREV_POS); 
  8537.       exit when POSITION = 0; 
  8538.       REQ_STRING := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS); 
  8539.       PREV_POS := POSITION + 1; 
  8540.       POSITION := SP.MATCH_C(LINE, '$', PREV_POS); 
  8541.       LINE_NUMBER := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS); 
  8542.  
  8543.       PREV_POS := POSITION + 1; 
  8544.       PO.PUT(SOURCE_FILE_NAME); 
  8545.       if SP.LENGTH(SOURCE_FILE_NAME) > FILE_NAME_WIDTH then 
  8546.         PO.PUT_LINE(""); 
  8547.         PO.SPACE(FILE_NAME_WIDTH); 
  8548.       else 
  8549.         PO.SPACE(FILE_NAME_WIDTH - SP.LENGTH(SOURCE_FILE_NAME)); 
  8550.       end if; 
  8551.       INT_IO.GET(SP.VALUE(LINE_NUMBER), NUMBER, TEMP_POS); 
  8552.       INT_IO.PUT(INT_STRING, NUMBER); 
  8553.       PO.PUT(INT_STRING); 
  8554.       PO.SPACE(3); 
  8555.       PO.PUT(LOCATION_STRING); 
  8556.       if SP.LENGTH(LOCATION_STRING) > UNIT_WIDTH then 
  8557.         PO.PUT_LINE(""); 
  8558.         PO.SPACE(FILE_NAME_WIDTH + LINE_NUM_WIDTH + 3 + UNIT_WIDTH); 
  8559.       else 
  8560.         PO.SPACE(UNIT_WIDTH - SP.LENGTH(LOCATION_STRING)); 
  8561.       end if; 
  8562.       PO.PUT_LINE(REQ_STRING); 
  8563.       exit when PREV_POS >= LAST; 
  8564.     end loop; 
  8565. end PROCESS_LOCATION_LINE; 
  8566.  
  8567. function REQ_LESS_EQ(X : in REQ_RECORD; 
  8568.                        Y : in REQ_RECORD) return BOOLEAN is 
  8569. begin
  8570.     if DOCUMENT_REF.EQ(X.REF, Y.REF) then 
  8571.       return SP."<"(X.PAIRS_FILE_NAME, Y.PAIRS_FILE_NAME); 
  8572.     else 
  8573.       return DOCUMENT_REF."<"(X.REF, Y.REF); 
  8574.     end if; 
  8575. end REQ_LESS_EQ; 
  8576.  
  8577. procedure REQUIREMENT_MERGE(PAIRS_FILES : in SL.LIST) is 
  8578.  
  8579. -- Assign the file names in the pairs_files list to the file_name
  8580. -- fields of the records in req_array. For each element x in req_array
  8581. -- open the corresponding pairs file, read its first line and assign
  8582. -- the appropriate strings to x.ref and x.location_string (see 
  8583. -- process_req_line). 
  8584. -- Print the smallest record and read the next line from the file that
  8585. -- that record came from. Continue this until everything is read and
  8586. -- printed.  
  8587.  
  8588.     MAX_LINE   : INTEGER := 1000; 
  8589.     STR        : SP.STRING_TYPE; 
  8590.     LINE       : STRING(1 .. MAX_LINE); 
  8591.     I          : NATURAL; 
  8592.     N          : NATURAL := SL.LENGTH(PAIRS_FILES); 
  8593.     START      : NATURAL := 1; 
  8594.     OPEN_FILES : NATURAL; 
  8595.     ITER       : SL.LISTITER := SL.MAKELISTITER(PAIRS_FILES); 
  8596.     REQ_ARRAY  : array(INTEGER range 1 .. SL.LENGTH(PAIRS_FILES)) of REQ_RECORD
  8597.       ; 
  8598.  
  8599.  
  8600.     function FIND_FIRST_RECORD return NATURAL is 
  8601.       I     : NATURAL; 
  8602.       START : NATURAL := 1; 
  8603.  
  8604.     begin
  8605.       START := 1; 
  8606.       loop
  8607.         exit when REQ_ARRAY(START).MORE or START = N; 
  8608.         START := START + 1; 
  8609.       end loop; 
  8610.       if START = N then 
  8611.         return START; 
  8612.       else 
  8613.         I := START + 1; 
  8614.       end if; 
  8615.       while I <= N loop
  8616.         if REQ_LESS_EQ(REQ_ARRAY(I), REQ_ARRAY(START)) and REQ_ARRAY(I).MORE
  8617.           then 
  8618.           START := I; 
  8619.         end if; 
  8620.         I := I + 1; 
  8621.       end loop; 
  8622.       return START; 
  8623.     end FIND_FIRST_RECORD; 
  8624.  
  8625.   begin
  8626.     I := 0; 
  8627.     while SL.MORE(ITER) loop
  8628.       I := I + 1; 
  8629.       SL.NEXT(ITER, REQ_ARRAY(I).PAIRS_FILE_NAME); 
  8630.       REQ_ARRAY(I).PAIRS_FILE := new TEXT_IO.FILE_TYPE; 
  8631.       TEXT_IO.OPEN(FILE => REQ_ARRAY(I).PAIRS_FILE.all, NAME => SP.VALUE(
  8632.         REQ_ARRAY(I).PAIRS_FILE_NAME), MODE => TEXT_IO.IN_FILE); 
  8633.             --first read the name of the corresponding source_file.
  8634.       TEXT_IO.GET_LINE(REQ_ARRAY(I).PAIRS_FILE.all, LINE, LAST); 
  8635.       STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST); 
  8636.       REQ_ARRAY(I).SOURCE_FILE_NAME := 
  8637.         SP.Create(FILE_MANAGER.STRIP_DIR(SP.Value(STR))); 
  8638.       TEXT_IO.GET_LINE(REQ_ARRAY(I).PAIRS_FILE.all, LINE, LAST); 
  8639.       STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST); 
  8640.       PROCESS_REQ_LINE(STR, REQ_ARRAY(I)); 
  8641.     end loop; 
  8642.     OPEN_FILES := SL.LENGTH(PAIRS_FILES); 
  8643.     START := FIND_FIRST_RECORD; 
  8644.     PRINT_RECORD(REQ_ARRAY(START)); 
  8645.     loop
  8646.       TEXT_IO.GET_LINE(REQ_ARRAY(START).PAIRS_FILE.all, LINE, LAST); 
  8647.       if LINE(1) = '@' then 
  8648.         REQ_ARRAY(START).MORE := FALSE; 
  8649.         TEXT_IO.CLOSE(REQ_ARRAY(START).PAIRS_FILE.all); 
  8650.         OPEN_FILES := OPEN_FILES - 1; 
  8651.       else 
  8652.         STR := SP.SUBSTR(SP.CREATE(LINE), 1, LAST); 
  8653.         PROCESS_REQ_LINE(STR, REQ_ARRAY(START)); 
  8654.       end if; 
  8655.       exit when OPEN_FILES = 0; 
  8656.       START := FIND_FIRST_RECORD; 
  8657.       PRINT_RECORD(REQ_ARRAY(START)); 
  8658.     end loop; 
  8659.  
  8660. exception
  8661.     when TEXT_IO.STATUS_ERROR => 
  8662.       PUT_ERROR("File " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME) & 
  8663.         " already open."); 
  8664.       raise ABORT_MERGE_PHASE; 
  8665.  
  8666.     when TEXT_IO.USE_ERROR => 
  8667.       PUT_ERROR("Unable to open file " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME)
  8668.         & " for input."); 
  8669.       raise ABORT_MERGE_PHASE; 
  8670.  
  8671.     when TEXT_IO.NAME_ERROR => 
  8672.       PUT_ERROR("Invalid file name " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME) & 
  8673.         "."); 
  8674.       raise ABORT_MERGE_PHASE; 
  8675.  
  8676.     when BAD_PAIRS_FILE => 
  8677.       PUT_ERROR("Unable to interpret " & SP.VALUE(REQ_ARRAY(I).PAIRS_FILE_NAME)
  8678.         & " as a pairs file."); 
  8679.       raise ABORT_MERGE_PHASE; 
  8680.  
  8681. end REQUIREMENT_MERGE; 
  8682.  
  8683. procedure PROCESS_REQ_LINE(LINE : in SP.STRING_TYPE; 
  8684.                            REQ  : in out REQ_RECORD) is 
  8685.  
  8686. -- This procedure looks at a req_line and extracts the reference
  8687. -- string and the locations from it. The reference string is assigned to
  8688. -- req.ref and the location part is assigned to req.location_string.
  8689. -- '%' separates the reference string from the list of locations.
  8690.  
  8691.     POSITION : NATURAL := 1; 
  8692.     PREV_POS : NATURAL := 1; 
  8693.     I        : NATURAL := 1; 
  8694.     STR      : SP.STRING_TYPE; 
  8695.  
  8696. begin
  8697.     POSITION := SP.MATCH_C(LINE, '%', PREV_POS); 
  8698.     STR := SP.SUBSTR(LINE, PREV_POS, POSITION - PREV_POS); 
  8699.     DOCUMENT_REF.SCAN(S => SP.VALUE(STR), INDEX => I, RS => REQ.REF); 
  8700.     PREV_POS := POSITION + 1; 
  8701.     REQ.LOCATION_STRING := SP.SUBSTR(LINE, PREV_POS, 
  8702.  
  8703.     SP.LENGTH(LINE) - POSITION); 
  8704.  
  8705. exception
  8706.     when CONSTRAINT_ERROR => 
  8707.       raise BAD_PAIRS_FILE; 
  8708.  
  8709. end PROCESS_REQ_LINE; 
  8710.  
  8711. procedure PRINT_RECORD(REQ : in REQ_RECORD) is 
  8712.  
  8713. -- This prints information from req to the report file. req.location_string
  8714. -- contains Ada unit names and the line numbers of the requirements.
  8715. -- '$' separates two locations, and ',' separates a unit name from a line
  8716. -- number.
  8717.  
  8718.     LOCATION_STRING : SP.STRING_TYPE; 
  8719.     LINE_NUMBER     : SP.STRING_TYPE; 
  8720.     POSITION        : NATURAL := 1; 
  8721.     TEMP_POS        : NATURAL; 
  8722.     NUMBER          : INTEGER; 
  8723.     PREV_POS        : NATURAL := 1; 
  8724.     STR             : SP.STRING_TYPE; 
  8725.     REFSTR          : SP.STRING_TYPE; 
  8726.  
  8727. begin
  8728.     REFSTR := SP.CREATE(DOCUMENT_REF.IMAGE(REQ.REF)); 
  8729.     loop
  8730.       POSITION := SP.MATCH_C(REQ.LOCATION_STRING, ',', PREV_POS); 
  8731.       exit when POSITION = 0; 
  8732.       LOCATION_STRING := SP.SUBSTR(REQ.LOCATION_STRING, PREV_POS, POSITION - 
  8733.         PREV_POS); 
  8734.       PREV_POS := POSITION + 1; 
  8735.       POSITION := SP.MATCH_C(REQ.LOCATION_STRING, '$', PREV_POS); 
  8736.       LINE_NUMBER := SP.SUBSTR(REQ.LOCATION_STRING, PREV_POS, POSITION - 
  8737.         PREV_POS); 
  8738.  
  8739.       PREV_POS := POSITION + 1; 
  8740.       PO.PUT(REFSTR); 
  8741.       if SP.LENGTH(REFSTR) > REF_WIDTH then 
  8742.         PO.PUT_LINE(""); 
  8743.         PO.SPACE(REF_WIDTH); 
  8744.       else 
  8745.         PO.SPACE(REF_WIDTH - SP.LENGTH(REFSTR)); 
  8746.       end if; 
  8747.       PO.PUT(REQ.SOURCE_FILE_NAME); 
  8748.       if SP.LENGTH(REQ.SOURCE_FILE_NAME) > FILE_NAME_WIDTH then 
  8749.         PO.PUT_LINE(""); 
  8750.         PO.SPACE(REF_WIDTH + FILE_NAME_WIDTH); 
  8751.       else 
  8752.         PO.SPACE(FILE_NAME_WIDTH - SP.LENGTH(REQ.SOURCE_FILE_NAME)); 
  8753.       end if; 
  8754.       INT_IO.GET(SP.VALUE(LINE_NUMBER), NUMBER, TEMP_POS); 
  8755.       INT_IO.PUT(INT_STRING, NUMBER); 
  8756.       PO.PUT(INT_STRING); 
  8757.       PO.SPACE(3); 
  8758.       PO.PUT_LINE(LOCATION_STRING); 
  8759.     end loop; 
  8760.  
  8761. end PRINT_RECORD; 
  8762.  
  8763. end MERGE_PKG; 
  8764. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8765. --getnext.sub
  8766. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8767. with text_io;
  8768. with case_insensitive_string_comparison;
  8769. with scanners; use scanners;
  8770. with rqs_ParserDeclarations;
  8771. with document_Ref;
  8772. with reqs;
  8773.  
  8774. separate (rqs_Lex)
  8775. function GetNextNonCommentToken return PD.ParseStackElement
  8776. is
  8777.     use reqs;
  8778.     package SC renames case_insensitive_string_comparison;
  8779.  
  8780.     Comment_Flag: constant Character := '|';
  8781.     Alt_Flag: constant Character := '!';
  8782.  
  8783.     Keyword: constant string := "Requirements_Satisfied";
  8784.     Alt_Keyword: constant string := "Requirements Satisfied";
  8785.  
  8786.     Found_Keyword: boolean := False;
  8787.     Found_Flag: boolean := False;
  8788.     Found_Valid_Ref: boolean := False;
  8789.     New_Comment: boolean := True;
  8790.     Continued: boolean := False;
  8791.  
  8792.     procedure check_For_Keyword(
  8793.     S: in out Scanner_Type;
  8794.     C: string
  8795.     )
  8796.     is
  8797.     TS: Scanner_Type := S;
  8798.  
  8799.     --| Effects: Look for a keyword comment in C.  On exit, Found_Keyword
  8800.     --| is True iff the keyword was found.  The scanner S is advanced past
  8801.     --| the keyword, the trailing ':' (if any), and the following white
  8802.     --| space.  Use is_Empty to determine if there is anything more to scan.
  8803.     --| Otherwise, if a Byron flag is found (--|, --|+, or --|-) then 
  8804.     --| Found_Flag is made True, and S is advanced past it.
  8805.     --| If neither keyword nor flag is found, S is not changed.
  8806.     --| Valid keyword is --| Keyword: or --| Keyword<nl>.  The goal here
  8807.     --| is to accept both Byron syntax and NOSC's slightly different syntax.
  8808.  
  8809.     begin
  8810.     Found_Keyword := False;
  8811.     Found_Flag := False;
  8812.     if (C(TS.Index) = Comment_Flag or else C(TS.Index) = Alt_Flag) then
  8813.       TS.Index := TS.Index + 1;    -- Skip the | or !
  8814.       if is_sign(TS, C) then
  8815.         TS.Index := TS.Index + 1;    -- Skip the + or -
  8816.       end if;
  8817.       S := TS;
  8818.       Found_Flag := True;
  8819.       skip_Blanks(TS, C);        -- Skip blanks after |
  8820.       scan_until(TS, C, ':');    -- Look for "Keyword:"
  8821.       if (TS.Length > 0)
  8822.          and then ( SC.equal(Keyword, C(TS.First..TS.Last))
  8823.              or else 
  8824.             SC.equal(Alt_Keyword, C(TS.First..TS.Last))
  8825.             )
  8826.       then
  8827.         Found_Keyword := True;
  8828.         TS.Index := TS.Index + 1;    -- Skip the :
  8829.         skip_Blanks(TS, C);        -- Skip trailing blanks
  8830.         S := TS;            -- Update the scanner
  8831.         return;
  8832.       else    -- Keyword by itself on a line?
  8833.         TS.First := TS.Index;
  8834.         TS.Last := TS.Max_Index;
  8835.         trim_Blanks(TS, C);
  8836.         if SC.equal(Keyword, C(TS.First..TS.Last))
  8837.         or else SC.equal(Alt_Keyword, C(TS.First..TS.Last))
  8838.         then
  8839.           S.Index := S.Max_Index + 1;    -- Gobble up entire line
  8840.           Found_Keyword := True;    -- Found keyword
  8841.           return;
  8842.         end if;    
  8843.       end if;
  8844.     end if;
  8845.  
  8846.     end check_For_Keyword;
  8847.  
  8848.     procedure scan_Pair(
  8849.     S: in out Scanner_Type;
  8850.     C: String
  8851.     )
  8852.     is
  8853.     Pairs_Record: Pairs_Record_Type;
  8854.     Line_Num: HD.Source_Line := CST.lexed_token.srcpos_line;
  8855.  
  8856.     begin
  8857.     Document_Ref.Scan(C, S.Index, Pairs_Record.Ref);
  8858.     Pairs_Record.Unit := Get_Location;
  8859.     Pairs_Record.Line_Number := Line_Num;
  8860.     get_Ref(Pairs_Record);
  8861.     Found_Valid_Ref := True;
  8862.     New_Comment := False;
  8863.     skip_Blanks(S, C);
  8864.     if not is_Empty(S) and then C(S.Index) = ',' then
  8865.       S.Index := S.Index + 1;
  8866.     end if;
  8867.     exception
  8868.     when Document_Ref.Invalid_ParagraphId_String =>
  8869.       if Found_Valid_Ref and new_Comment then
  8870.         -- Already found at least one valid reference, and this invalid one
  8871.         -- is in a new comment, therefore this isn't an error, its simply
  8872.         -- not a Requirement_Satisfied comment or continuation of one
  8873.         Continued := False;
  8874.       else
  8875.         Put_Error("Invalid paragraph string at line"
  8876.             & integer'Image(Line_Num) 
  8877.             & ", column" & integer'Image(S.Index)
  8878.             & ".");
  8879.         Pairs_File_Print_Flag := False;
  8880.       end if;
  8881.       S.Index := S.Max_Index + 1;
  8882.     when Document_Ref.Invalid_DocId_String =>
  8883.       if Found_Valid_Ref and New_Comment then
  8884.         Continued := False;
  8885.       else
  8886.         Put_Error("Invalid document id at line"
  8887.             & Integer'Image(Line_Num) 
  8888.             & ", column" & integer'Image(S.Index)
  8889.             & ".");
  8890.         Pairs_File_Print_Flag := False;
  8891.       end if;
  8892.       S.Index := S.Max_Index + 1;
  8893.     end scan_Pair;
  8894.  
  8895. begin
  8896.     CST := GetNextSourceToken;
  8897.     Found_Valid_Ref := False;
  8898.  
  8899.     while (CST.gram_sym_val = PT.Comment_TokenValue) loop
  8900.     declare
  8901.       Comment: constant string
  8902.             := pd.get_source_text(cst.lexed_token.text);
  8903.       CS: Scanner_Type;
  8904.  
  8905.     begin
  8906.       start_Scanner(CS, Comment, Comment'Last);
  8907.       New_Comment := True;
  8908.       if not is_Empty(CS) then    -- if Comment is non-blank
  8909.         check_For_Keyword(CS, Comment);
  8910.         if Continued and not Found_Keyword then
  8911.           -- This comment is a continuation of a previous comment
  8912.           if Found_Flag then
  8913.         while CS.Index < CS.Max_Index loop
  8914.           Scan_Pair(CS, Comment);
  8915.         end loop;
  8916.           else    -- Encountered a non-Byron Comment
  8917.         Continued := False;
  8918.           end if;
  8919.         elsif Found_Keyword then
  8920.           Continued := True;
  8921.           while CS.Index <= CS.Max_Index loop
  8922.             Scan_Pair(CS, Comment);
  8923.           end loop;
  8924.         end if;
  8925.       end if;
  8926.     end;
  8927.  
  8928.     CST := GetNextSourceToken;    -- Get the next token
  8929.     end loop;
  8930.  
  8931.     -- Now process the token that was not a comment:
  8932.     if (CST.gram_sym_val = PT.PackageTokenValue)
  8933.     or (CST.gram_sym_val = PT.ProcedureTokenValue)
  8934.     or (CST.gram_sym_val = PT.FunctionTokenValue)
  8935.     or (CST.gram_sym_val = PT.TaskTokenValue)
  8936.     then
  8937.     Ident_Flag := True;
  8938.  
  8939.     elsif (CST.gram_sym_val = PT.IdentifierTokenValue)
  8940.     or (CST.gram_sym_val = PT.StringTokenValue)
  8941.     then
  8942.     if Ident_Flag then
  8943.         Identifier := CST.lexed_token.text;
  8944.         ident_line_number := cst.lexed_token.srcpos_line; 
  8945.         Ident_Flag := False;
  8946.     end if;
  8947.  
  8948.  
  8949.     -- Debug Aid
  8950.     -- TEXT_IO.Put_Line(PD.Dump_Parse_Stack_Element(CST));
  8951.  
  8952.     end if;
  8953.     return CST; -- return the token that is not a comment
  8954.  
  8955. end GetNextNonCommentToken;
  8956. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8957. --rdriver.ada
  8958. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8959.  
  8960. -------SPEC---------------------------------------------------------------
  8961. function REQSREF return INTEGER;
  8962.  
  8963. -------BODY---------------------------------------------------------------
  8964.  
  8965. with REQS; use REQS;
  8966. with MERGE_PKG; use MERGE_PKG;
  8967. with STRING_LISTS;
  8968. with STANDARD_INTERFACE;
  8969. with STRING_PKG;
  8970. with FILE_MANAGER;
  8971. with TEXT_IO;
  8972. with PAGINATED_OUTPUT;
  8973. with HOST_LIB;
  8974. with rqs_PARSER;
  8975. with rqs_PARSERDECLARATIONS;
  8976. with HOST_DEPENDENCIES;
  8977.  
  8978. function REQSREF return INTEGER is
  8979.  
  8980.  
  8981.   package SL renames STRING_LISTS;
  8982.   package SP renames STRING_PKG;
  8983.   package FM renames FILE_MANAGER;
  8984.   package PO renames PAGINATED_OUTPUT;
  8985.   package PD renames rqs_PARSERDECLARATIONS;
  8986.  
  8987.   package STRINGTYPE is new STANDARD_INTERFACE.STRING_ARGUMENT("string");
  8988.  
  8989.   package REPORT is new STANDARD_INTERFACE.ENUMERATED_ARGUMENT(
  8990.     ENUM_TYPE => MERGE_PKG.REPORT_TYPE,
  8991.     ENUM_TYPE_NAME => "report_type"
  8992.     );
  8993.  
  8994.   package FILE_LIST is new STANDARD_INTERFACE.STRING_LIST_ARGUMENT(
  8995.     STRING_TYPE_NAME => "string_type",
  8996.     STRING_TYPE_LIST => "string_list"
  8997.     );
  8998.  
  8999.   REQSR       : STANDARD_INTERFACE.PROCESS_HANDLE;
  9000.   OUTPUT_FILE : SP.STRING_TYPE;    -- name of report file
  9001.   SOURCE_LIST : STRING_LISTS.LIST; -- expanded source file names
  9002.   PAIRS_LIST  : STRING_LISTS.LIST; -- expanded pairs file names
  9003.   REPORT_KIND : MERGE_PKG.REPORT_TYPE;
  9004.   SOURCE_ARG  : SL.LIST;           -- source file list before expansion
  9005.   PAIRS_ARG   : SL.LIST;           -- pairs file list before expansion
  9006.   SOURCE_FILE : SP.STRING_TYPE;
  9007.   PAIRS_FILE  : SP.STRING_TYPE;
  9008.   ITER        : STRING_LISTS.LISTITER;
  9009.   TOKEN       : PD.PARSESTACKELEMENT;
  9010.  
  9011.   procedure EXPAND_FILE_NAMES(
  9012.       INPUT_LIST    : in SL.LIST;    -- file list before expansion
  9013.       EXPANDED_LIST : in out SL.LIST    --expanded file list
  9014.       ) is
  9015.  
  9016.     --| Effects: A list of user-specified file names including *-notation
  9017.     --| is expanded into the list of the actual file names.
  9018.  
  9019.     NAME       : SP.STRING_TYPE;
  9020.     FILE_NAMES : STRING_LISTS.LIST;
  9021.     LIST_ITER  : SL.LISTITER := SL.MAKELISTITER(INPUT_LIST);
  9022.  
  9023.   begin
  9024.     SP.MARK;
  9025.     while SL.MORE(LIST_ITER) loop
  9026.       SL.NEXT(LIST_ITER, NAME);
  9027.       begin
  9028.         FILE_NAMES := FM.EXPAND(SP.Value(NAME), FM.NO_VERSION);
  9029.         STRING_LISTS.ATTACH(EXPANDED_LIST, FILE_NAMES);
  9030.       exception
  9031.         when FM.FILE_NOT_FOUND =>
  9032.       Put_Error("File " & SP.VALUE(NAME) & " not found.");
  9033.           exit;
  9034.         when FM.DEVICE_NOT_READY =>
  9035.       Put_Error("File " & SP.VALUE(NAME) & " device not ready.");
  9036.           exit;
  9037.         when FM.DIRECTORY_NOT_FOUND =>
  9038.       Put_Error("File " & SP.VALUE(NAME) & " directory not found.");
  9039.           exit;
  9040.         when FM.EXPAND_ERROR | FM.PARSE_ERROR =>
  9041.       Put_Error("File " & SP.VALUE(NAME) & " file name error.");
  9042.           exit;
  9043.       end;
  9044.     end loop;
  9045.  
  9046.     SP.RELEASE;
  9047.  
  9048.   end EXPAND_FILE_NAMES;
  9049.  
  9050.   procedure DO_SOURCE_FILE(FILE_NAME : in SP.STRING_TYPE) is
  9051.  
  9052. --| Effects: Call the parser for input_source. When a requirement string is
  9053. --| found in the source file call place_pair in order to find the proper
  9054. --| position for the requirement string in tthe sorted tree. If no exception
  9055. --| is raised during this function print_pairs_file is called to print the
  9056. --| sorted trees out to a pairs file.
  9057.  
  9058.     INPUT_SOURCE : TEXT_IO.FILE_TYPE;
  9059.  
  9060.   begin
  9061.  
  9062.     REQ_TREE := RT.CREATE;   -- The tree holding pairs sorted by requirement
  9063.     LOC_TREE := LT.CREATE;   -- The tree holding pairs sorted by location
  9064.     PAIRS_FILE_PRINT_FLAG := TRUE;
  9065.     SUBUNIT_STACK := ST.CREATE;
  9066.     TEXT_IO.OPEN(FILE => INPUT_SOURCE,
  9067.          MODE => TEXT_IO.IN_FILE,
  9068.          NAME => SP.VALUE(FILE_NAME)
  9069.          );
  9070.     text_IO.PUT_LINE("-- Source file " & SP.VALUE(FILE_NAME));
  9071.     TEXT_IO.SET_INPUT(INPUT_SOURCE);
  9072.     TOKEN := rqs_PARSER.PARSE;
  9073. -- The routine check_pairs is called whenever the subunit_stack changes in
  9074. -- order to make sure that requirements are associated with the appropriate
  9075. -- program units.
  9076.     REQS.PAIRS_CHECK_FLAG := FALSE;
  9077.     REQS.CHECK_PAIRS;
  9078.     TEXT_IO.CLOSE(INPUT_SOURCE);
  9079.     ST.DESTROY(SUBUNIT_STACK);
  9080.     if pairs_file_print_flag then
  9081.        PAIRS_FILE := MAKE_PAIRS_FILE_NAME(FILE_NAME);
  9082.        PRINT_PAIRS_FILE(PAIRS_FILE, FILE_NAME);
  9083.     end if;
  9084.  
  9085.  
  9086.   exception
  9087.  
  9088.     when TEXT_IO.STATUS_ERROR =>
  9089.       PUT_ERROR("File " & SP.VALUE(FILE_NAME) & "already open.");
  9090.       PAIRS_FILE_PRINT_FLAG := FALSE;
  9091.  
  9092.     when TEXT_IO.USE_ERROR =>
  9093.       PUT_ERROR("Unable to open file " & SP.VALUE(FILE_NAME) & " for input.");
  9094.       PAIRS_FILE_PRINT_FLAG := FALSE;
  9095.  
  9096.     when TEXT_IO.NAME_ERROR =>
  9097.       PUT_ERROR("Invalid file name " & SP.VALUE(FILE_NAME) & ".");
  9098.       PAIRS_FILE_PRINT_FLAG := FALSE;
  9099.  
  9100.     when PD.PARSER_ERROR =>
  9101.       PUT_ERROR("Syntax error at line"
  9102.         & HD.SOURCE_LINE'IMAGE(PD.CURTOKEN.LEXED_TOKEN.SRCPOS_LINE)
  9103.         & " column"
  9104.         & HD.SOURCE_COLUMN'IMAGE(PD.CURTOKEN.LEXED_TOKEN.SRCPOS_COLUMN)
  9105.         );
  9106.       TEXT_IO.CLOSE(INPUT_SOURCE);
  9107.       ST.DESTROY(SUBUNIT_STACK);
  9108.       PAIRS_FILE_PRINT_FLAG := FALSE;
  9109.  
  9110.   end DO_SOURCE_FILE;
  9111.  
  9112.  
  9113. begin  -- reqsref
  9114.  
  9115.   SP.MARK;
  9116.   HOST_LIB.SET_ERROR;
  9117.   STANDARD_INTERFACE.SET_TOOL_IDENTIFIER(IDENTIFIER => "1.1");
  9118.  
  9119.   STANDARD_INTERFACE.DEFINE_PROCESS(
  9120.     PROC => REQSR,
  9121.     NAME => "Requirements_Reference",
  9122.     HELP => "Finds requirement strings in Ada source files"
  9123.     );
  9124.   FILE_LIST.DEFINE_ARGUMENT(
  9125.     PROC => REQSR,
  9126.     NAME => "source_files",
  9127.     DEFAULT => SL.CREATE,
  9128.     HELP => "Names of the input source files"
  9129.     );
  9130.   FILE_LIST.DEFINE_ARGUMENT(
  9131.     PROC => REQSR,
  9132.     NAME => "PAIRS_FILES",
  9133.     DEFAULT => SL.CREATE,
  9134.     HELP => "names of the input pairs files"
  9135.     );
  9136.   STRINGTYPE.DEFINE_ARGUMENT(
  9137.     PROC => REQSR,
  9138.     NAME => "output",
  9139.     DEFAULT => "",
  9140.     HELP => "Name of the report file (defaults to standard output)"
  9141.     );
  9142.   REPORT.DEFINE_ARGUMENT(
  9143.     PROC => REQSR,
  9144.     NAME => "report",
  9145.     DEFAULT => REQUIREMENT,
  9146.     HELP => "requirement (default), location or noreport)"
  9147.     );
  9148.   STANDARD_INTERFACE.DEFINE_PROCESS_HELP(
  9149.     PROC => REQSR,
  9150.     HELP => "Finds requirement strings in Ada source files and"
  9151.     );
  9152.   STANDARD_INTERFACE.APPEND_PROCESS_HELP(
  9153.     PROC => REQSR,
  9154.     HELP => "generates a report merging results of previous runs"
  9155.     );
  9156.  
  9157.   STANDARD_INTERFACE.PARSE_LINE(REQSR);
  9158.  
  9159.   -- Assign arguments:
  9160.  
  9161.   SOURCE_ARG := FILE_LIST.GET_ARGUMENT(PROC => REQSR, NAME => "source_files");
  9162.   PAIRS_ARG := FILE_LIST.GET_ARGUMENT(PROC => REQSR, NAME => "pairs_files");
  9163.   REPORT_KIND := REPORT.GET_ARGUMENT(PROC => REQSR, NAME => "report");
  9164.   OUTPUT_FILE := STRINGTYPE.GET_ARGUMENT(PROC => REQSR, NAME => "output");
  9165.  
  9166.  
  9167.   SP.RELEASE;
  9168.  
  9169.   -- Open the report file.
  9170.   if REPORT_KIND /= NOREPORT then
  9171.     STANDARD_INTERFACE.DEFINE_OUTPUT(
  9172.     PROC => REQSR,
  9173.     HEADER_SIZE => 2,
  9174.     FILE_NAME => SP.VALUE(OUTPUT_FILE)
  9175.     );
  9176.     STANDARD_INTERFACE.DEFINE_HEADER(LINE => 1, TEXT => "Reqsref Report");
  9177.     STANDARD_INTERFACE.DEFINE_HEADER(
  9178.     LINE => 2, TEXT => MERGE_PKG.GET_REPORT_HEADER(REPORT_KIND));
  9179.   end if;
  9180.  
  9181.   -- Expand lists of source and pairs files:
  9182.   if not SL.ISEMPTY(SOURCE_ARG) then
  9183.     EXPAND_FILE_NAMES(SOURCE_ARG, SOURCE_LIST);
  9184.   end if;
  9185.   if not SL.ISEMPTY(PAIRS_ARG) then
  9186.     EXPAND_FILE_NAMES(PAIRS_ARG, PAIRS_LIST);
  9187.   end if;
  9188.  
  9189.         -- For each file specified in source_list call do_source_file.
  9190.         -- Then, unless an exception was raised, attach the corresponding
  9191.         -- pairs file name to pairs_list.
  9192.         -- In case an exception was raised delete the corresponding
  9193.         -- pairs file name from pairs_list if it is there.
  9194.  
  9195.   if not STRING_LISTS.ISEMPTY(SOURCE_LIST) then
  9196.     ITER := STRING_LISTS.MAKELISTITER(SOURCE_LIST);
  9197.     while STRING_LISTS.MORE(ITER) loop
  9198.       STRING_LISTS.NEXT(ITER, SOURCE_FILE);
  9199.       DO_SOURCE_FILE(SOURCE_FILE);
  9200.       if REQS.PAIRS_FILE_PRINT_FLAG then
  9201.         if not STRING_LISTS.ISINLIST(PAIRS_LIST, PAIRS_FILE) then
  9202.           STRING_LISTS.ATTACH(PAIRS_FILE, PAIRS_LIST);
  9203.         end if;
  9204.       else
  9205.         if SL.ISINLIST(PAIRS_LIST, PAIRS_FILE) then
  9206.           SL.DELETEITEM(PAIRS_LIST, PAIRS_FILE);
  9207.         end if;
  9208.       end if;
  9209.     end loop;
  9210.   end if;
  9211.  
  9212.         -- The merging phase
  9213.  
  9214.   if not STRING_LISTS.ISEMPTY(PAIRS_LIST) then
  9215.     if REPORT_KIND = MERGE_PKG.LOCATION then
  9216.       MERGE_PKG.LOCATION_REPORT(PAIRS_LIST);
  9217.     elsif REPORT_KIND = REQUIREMENT then
  9218.       MERGE_PKG.REQUIREMENT_MERGE(PAIRS_LIST);
  9219.     else
  9220.       TEXT_IO.PUT_LINE(TEXT_IO.STANDARD_OUTPUT,
  9221.         "REQSREF: not generating a report");
  9222.     end if;
  9223.   end if;
  9224.  
  9225.   return HOST_LIB.RETURN_CODE(HOST_LIB.SUCCESS);
  9226.  
  9227. exception
  9228.  
  9229.   when PO.FILE_ALREADY_OPEN =>
  9230.     PUT_ERROR("File " & SP.VALUE(OUTPUT_FILE) & " already open.");
  9231.     return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
  9232.  
  9233.   when PO.FILE_ERROR =>
  9234.     PUT_ERROR("Unable to open " & SP.VALUE(OUTPUT_FILE) & " for output.");
  9235.     return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
  9236.  
  9237.   when STANDARD_INTERFACE.PROCESS_HELP =>
  9238.     return HOST_LIB.RETURN_CODE(HOST_LIB.INFORMATION);
  9239.  
  9240.   when STANDARD_INTERFACE.ABORT_PROCESS =>
  9241.     return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
  9242.  
  9243.   when MERGE_PKG.ABORT_MERGE_PHASE =>
  9244.     return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
  9245.  
  9246. --  when others =>
  9247. --    PUT_ERROR("Internal error.");
  9248. --    return HOST_LIB.RETURN_CODE(HOST_LIB.ERROR);
  9249.  
  9250. end REQSREF;
  9251.