home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / metric / mccabe.src < prev    next >
Encoding:
Text File  |  1988-05-03  |  422.0 KB  |  10,836 lines

  1. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. --mccgrmcon.spc
  3. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  4. package MCC_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 MCC_Grammar_Constants;
  21. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  22. --mccptbls.spc
  23. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  24. with Host_Dependencies;      -- host dependent constants for the compiler.
  25. with MCC_Grammar_Constants;      -- constants generated by parser generator
  26. use MCC_Grammar_Constants;
  27.  
  28. package MCC_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 MCC_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 MCC_ParseTables;
  490. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  491. --mcclexidv.spc
  492. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  493. with MCC_ParseTables;               -- tables from parser generator
  494.  
  495. package MCC_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 MCC_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 MCC_Lex_Identifier_Token_Value;
  523.  
  524. ----------------------------------------------------------------------
  525. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  526. --mccpdecls.spc
  527. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  528.  
  529. -----------------------------------------------------------------------
  530.  
  531. with Host_Dependencies;    -- host dependent constants
  532. with MCC_ParseTables;          -- constants and state tables
  533. use MCC_ParseTables;
  534.  
  535. with MCC_Grammar_Constants;
  536. use MCC_Grammar_Constants;
  537.  
  538. package MCC_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 MCC_ParseTables;
  551.     package GC renames MCC_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 MCC_ParserDeclarations;
  725.  
  726. ----------------------------------------------------------------------
  727. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  728. --mcclex.spc
  729. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  730.  
  731. ----------------------------------------------------------------------
  732.  
  733. with MCC_ParserDeclarations;        -- declarations for the Parser
  734. with Host_Dependencies;         -- Host dependents constants
  735.  
  736. package MCC_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 MCC_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 MCC_Lex;
  816.  
  817. ----------------------------------------------------------------------
  818. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  819. --mcclex.bdy
  820. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  821.  
  822. ----------------------------------------------------------------------
  823.  
  824. with Host_Dependencies;         -- Host dependents constants
  825. with MCC_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 MCC_ParseTables;               -- tables from parser generator
  831. use MCC_ParseTables;
  832. with MCC_Grammar_Constants;         -- constants from the parser generator
  833. use MCC_Grammar_Constants;
  834. with TEXT_IO;
  835.  
  836.  
  837. package body MCC_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 MCC_ParserDeclarations;
  863.     package LEM  renames Lexical_Error_Message;
  864.     package PT   renames MCC_ParseTables;
  865.     package GC   renames MCC_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.     MCC_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 MCC_Lex;
  2649.  
  2650. ----------------------------------------------------------------------
  2651. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2652. --mccwritel.sub
  2653. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2654. ----------------------------------------------------------------------
  2655.  
  2656. separate (MCC_Lex)
  2657. procedure Write_Line is
  2658.     begin
  2659.     null;
  2660.     end Write_Line;
  2661.  
  2662. ----------------------------------------------------------------------
  2663. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2664. --mccptbls.bdy
  2665. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2666. --+ PTBLS.BDY +--
  2667.  
  2668. package body MCC_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.          8247 ;
  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.          8247 ;
  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.           945 ;
  2689.         --| Length (number of entries) in map Defaults.
  2690.     subtype DefaultMapRange is GC.ParserInteger range 1..DefaultMapLength;
  2691.     
  2692.     FollowMapLength : constant GC.ParserInteger :=
  2693.           223 ;
  2694.         --| Length (number of entries) in the FollowMap.
  2695.     
  2696.     GrammarSymbolCountPlusOne : constant GC.ParserInteger :=
  2697.           320 ;
  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, 3051, 3052, 3099
  2765. , 3100, 3129, 3130, 3138, 3139, 3150, 3151, 3178, 3179, 3192
  2766. , 3193, 3218, 3219, 3236, 3237, 3248, 3249, 3262, 3263, 3277
  2767. , 3278, 3310, 3311, 3346, 3347, 3365, 3366, 3389, 3390, 3412
  2768. , 3413, 3438, 3439, 3448, 3449, 3452, 3453, 3474, 3475, 3490
  2769. , 3491, 3511, 3512, 3533, 3534, 3555, 3556, 3571, 3572, 3589
  2770. , 3590, 3608, 3609, 3631, 3632, 3650, 3651, 3681, 3682, 3698
  2771. , 3699, 3725, 3726, 3739, 3740, 3761, 3762, 3777, 3778, 3795
  2772. , 3796, 3819, 3820, 3845, 3846, 3863, 3864, 3880, 3881, 3901
  2773. , 3902, 3925, 3926, 3932, 3933, 3950, 3951, 3963, 3964, 3979
  2774. , 3980, 3993, 3994, 4018, 4019, 4025, 4026, 4050, 4051, 4068
  2775. , 4069, 4079, 4080, 4103, 4104, 4120, 4121, 4136, 4137, 4155
  2776. , 4156, 4176, 4177, 4195, 4196, 4226, 4227, 4255, 4256, 4278
  2777. , 4279, 4296, 4297, 4315, 4316, 4337, 4338, 4389, 4390, 4413
  2778. , 4414, 4437, 4438, 4450, 4451, 4483, 4484, 4497, 4498, 4525
  2779. , 4526, 4543, 4544, 4559, 4560, 4575, 4576, 4588, 4589, 4601
  2780. , 4602, 4623, 4624, 4651, 4652, 4673, 4674, 4688)  ;
  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'
  3088. ,'N','{','E','L','S','I','F','_','_','c'
  3089. ,'o','n','d','i','t','i','o','n','_','_'
  3090. ,'T','H','E','N','_','_','s','e','q','u'
  3091. ,'e','n','c','e','_','o','f','_','s','t'
  3092. ,'a','t','e','m','e','n','t','s','}','['
  3093. ,'E','L','S','E','_','_','s','e','q','u'
  3094. ,'e','n','c','e','_','o','f','_','s','t'
  3095. ,'a','t','e','m','e','n','t','s',']','c'
  3096. ,'o','n','d','i','t','i','o','n','{','p'
  3097. ,'r','a','g','m','a','_','a','l','t','}'
  3098. ,'{','c','a','s','e','_','s','t','a','t'
  3099. ,'e','m','e','n','t','_','a','l','t','e'
  3100. ,'r','n','a','t','i','v','e','}','W','H'
  3101. ,'E','N','_','c','h','o','i','c','e','_'
  3102. ,'=','>','c','a','s','e','_','s','t','a'
  3103. ,'t','e','m','e','n','t','_','a','l','t'
  3104. ,'e','r','n','a','t','i','v','e','[','l'
  3105. ,'o','o','p','_','i','d','e','n','t','i'
  3106. ,'f','i','e','r',':',']','[','i','d','e'
  3107. ,'n','t','i','f','i','e','r',']','i','t'
  3108. ,'e','r','a','t','i','o','n','_','r','u'
  3109. ,'l','e','b','e','g','i','n','_','e','n'
  3110. ,'d','_','b','l','o','c','k','d','e','c'
  3111. ,'l','a','r','a','t','i','v','e','_','p'
  3112. ,'a','r','t','_','_','b','e','g','i','n'
  3113. ,'_','e','n','d','_','b','l','o','c','k'
  3114. ,'{','p','r','a','g','m','a','_','a','l'
  3115. ,'t','}','_','_','e','x','c','e','p','t'
  3116. ,'i','o','n','_','h','a','n','d','l','e'
  3117. ,'r','_','l','i','s','t','[','b','l','o'
  3118. ,'c','k','_','i','d','e','n','t','i','f'
  3119. ,'i','e','r',':',']','s','u','b','p','r'
  3120. ,'o','g','r','a','m','_','s','p','e','c'
  3121. ,'i','f','i','c','a','t','i','o','n','p'
  3122. ,'a','r','a','m','e','t','e','r','_','s'
  3123. ,'p','e','c','i','f','i','c','a','t','i'
  3124. ,'o','n','{',';','p','a','r','a','m','e'
  3125. ,'t','e','r','_','s','p','e','c','i','f'
  3126. ,'i','c','a','t','i','o','n','}','d','e'
  3127. ,'s','i','g','n','a','t','o','r','m','o'
  3128. ,'d','e','g','e','n','e','r','i','c','_'
  3129. ,'p','a','r','a','m','e','t','e','r','_'
  3130. ,'m','o','d','e','[','e','n','d','_','d'
  3131. ,'e','s','i','g','n','a','t','o','r',']'
  3132. ,'p','a','c','k','a','g','e','_','s','p'
  3133. ,'e','c','i','f','i','c','a','t','i','o'
  3134. ,'n','p','a','c','k','a','g','e','_','s'
  3135. ,'p','e','c','_','i','n','d','i','c','a'
  3136. ,'t','o','r','p','a','c','k','a','g','e'
  3137. ,'_','b','o','d','y','_','i','n','d','i'
  3138. ,'c','a','t','o','r','{',',','e','x','p'
  3139. ,'a','n','d','e','d','_','n','a','m','e'
  3140. ,'}','t','a','s','k','_','s','p','e','c'
  3141. ,'i','f','i','c','a','t','i','o','n','{'
  3142. ,'e','n','t','r','y','_','d','e','c','l'
  3143. ,'a','r','a','t','i','o','n','}','{','r'
  3144. ,'e','p','r','e','s','e','n','t','a','t'
  3145. ,'i','o','n','_','c','l','a','u','s','e'
  3146. ,'}','t','a','s','k','_','b','o','d','y'
  3147. ,'_','i','n','d','i','c','a','t','o','r'
  3148. ,'[','(','d','i','s','c','r','e','t','e'
  3149. ,'_','r','a','n','g','e',')',']','[','f'
  3150. ,'o','r','m','a','l','_','p','a','r','t'
  3151. ,']','e','n','t','r','y','_','d','e','c'
  3152. ,'l','a','r','a','t','i','o','n','[','('
  3153. ,'e','x','p','r','e','s','s','i','o','n'
  3154. ,')',']','[','f','o','r','m','a','l','_'
  3155. ,'p','a','r','t',']','s','e','l','e','c'
  3156. ,'t','i','v','e','_','w','a','i','t','c'
  3157. ,'o','n','d','i','t','i','o','n','a','l'
  3158. ,'_','e','n','t','r','y','_','c','a','l'
  3159. ,'l','t','i','m','e','d','_','e','n','t'
  3160. ,'r','y','_','c','a','l','l','s','e','l'
  3161. ,'e','c','t','_','a','l','t','e','r','n'
  3162. ,'a','t','i','v','e','{','O','R','_','_'
  3163. ,'s','e','l','e','c','t','_','a','l','t'
  3164. ,'e','r','n','a','t','i','v','e','}','s'
  3165. ,'e','l','e','c','t','i','v','e','_','w'
  3166. ,'a','i','t','_','a','l','t','e','r','n'
  3167. ,'a','t','i','v','e','a','c','c','e','p'
  3168. ,'t','_','a','l','t','e','r','n','a','t'
  3169. ,'i','v','e','d','e','l','a','y','_','a'
  3170. ,'l','t','e','r','n','a','t','i','v','e'
  3171. ,'t','e','r','m','i','n','a','t','e','_'
  3172. ,'a','l','t','e','r','n','a','t','i','v'
  3173. ,'e','[','s','e','q','u','e','n','c','e'
  3174. ,'_','o','f','_','s','t','a','t','e','m'
  3175. ,'e','n','t','s',']','{',',','n','a','m'
  3176. ,'e','}','{','c','o','m','p','i','l','a'
  3177. ,'t','i','o','n','_','u','n','i','t','}'
  3178. ,'p','r','a','g','m','a','_','h','e','a'
  3179. ,'d','e','r','c','o','m','p','i','l','a'
  3180. ,'t','i','o','n','_','u','n','i','t','c'
  3181. ,'o','n','t','e','x','t','_','c','l','a'
  3182. ,'u','s','e','l','i','b','r','a','r','y'
  3183. ,'_','o','r','_','s','e','c','o','n','d'
  3184. ,'a','r','y','_','u','n','i','t','s','u'
  3185. ,'b','u','n','i','t','{','w','i','t','h'
  3186. ,'_','c','l','a','u','s','e','{','u','s'
  3187. ,'e','_','c','l','a','u','s','e','}','}'
  3188. ,'{',',','u','s','e','d','_','i','d','e'
  3189. ,'n','t','i','f','i','e','r','}','w','i'
  3190. ,'t','h','_','c','l','a','u','s','e','W'
  3191. ,'H','E','N','_','e','x','c','e','p','t'
  3192. ,'i','o','n','_','c','h','o','i','c','e'
  3193. ,'_','=','>','e','x','c','e','p','t','i'
  3194. ,'o','n','_','h','a','n','d','l','e','r'
  3195. ,'e','x','c','e','p','t','i','o','n','_'
  3196. ,'c','h','o','i','c','e','{','|','e','x'
  3197. ,'c','e','p','t','i','o','n','_','c','h'
  3198. ,'o','i','c','e','}','g','e','n','e','r'
  3199. ,'i','c','_','s','p','e','c','i','f','i'
  3200. ,'c','a','t','i','o','n','g','e','n','e'
  3201. ,'r','i','c','_','f','o','r','m','a','l'
  3202. ,'_','p','a','r','t','{','g','e','n','e'
  3203. ,'r','i','c','_','p','a','r','a','m','e'
  3204. ,'t','e','r','_','d','e','c','l','a','r'
  3205. ,'a','t','i','o','n','}','g','e','n','e'
  3206. ,'r','i','c','_','p','a','r','a','m','e'
  3207. ,'t','e','r','_','d','e','c','l','a','r'
  3208. ,'a','t','i','o','n','g','e','n','e','r'
  3209. ,'i','c','_','t','y','p','e','_','d','e'
  3210. ,'f','i','n','i','t','i','o','n','[','I'
  3211. ,'S','_','_','n','a','m','e','_','_','o'
  3212. ,'r','_','_','<','>',']','g','e','n','e'
  3213. ,'r','i','c','_','a','s','s','o','c','i'
  3214. ,'a','t','i','o','n','{',',','g','e','n'
  3215. ,'e','r','i','c','_','a','s','s','o','c'
  3216. ,'i','a','t','i','o','n','}','[','g','e'
  3217. ,'n','e','r','i','c','_','f','o','r','m'
  3218. ,'a','l','_','p','a','r','a','m','e','t'
  3219. ,'e','r','=','>',']','g','e','n','e','r'
  3220. ,'i','c','_','a','c','t','u','a','l','_'
  3221. ,'p','a','r','a','m','e','t','e','r','g'
  3222. ,'e','n','e','r','i','c','_','f','o','r'
  3223. ,'m','a','l','_','p','a','r','a','m','e'
  3224. ,'t','e','r','g','e','n','e','r','i','c'
  3225. ,'_','a','c','t','u','a','l','_','p','a'
  3226. ,'r','a','m','e','t','e','r','l','e','n'
  3227. ,'g','t','h','_','c','l','a','u','s','e'
  3228. ,'e','n','u','m','e','r','a','t','i','o'
  3229. ,'n','_','r','e','p','r','e','s','e','n'
  3230. ,'t','a','t','i','o','n','_','c','l','a'
  3231. ,'u','s','e','a','d','d','r','e','s','s'
  3232. ,'_','c','l','a','u','s','e','r','e','c'
  3233. ,'o','r','d','_','r','e','p','r','e','s'
  3234. ,'e','n','t','a','t','i','o','n','_','c'
  3235. ,'l','a','u','s','e','{','c','o','m','p'
  3236. ,'o','n','e','n','t','_','c','l','a','u'
  3237. ,'s','e','}','a','l','i','g','n','m','e'
  3238. ,'n','t','_','c','l','a','u','s','e','c'
  3239. ,'o','m','p','o','n','e','n','t','_','c'
  3240. ,'l','a','u','s','e','g','a','_','e','x'
  3241. ,'p','r','e','s','s','i','o','n','{','|'
  3242. ,'i','d','e','n','t','i','f','i','e','r'
  3243. ,'}','E','L','S','I','F','_','_','c','o'
  3244. ,'n','d','i','t','i','o','n','_','_','T'
  3245. ,'H','E','N','E','L','S','E','_','_','s'
  3246. ,'e','q','u','e','n','c','e','_','o','f'
  3247. ,'_','s','t','a','t','e','m','e','n','t'
  3248. ,'s','e','x','c','e','p','t','i','o','n'
  3249. ,'_','h','a','n','d','l','e','r','_','l'
  3250. ,'i','s','t','u','s','e','_','c','l','a'
  3251. ,'u','s','e','_','l','i','s','t')  ;
  3252.         --| Table of symbols used in the grammar.
  3253.         -- NYU Reference Name: NO_SYM
  3254.     
  3255.     LeftHandSide :
  3256.          constant array (LeftHandSideRange)
  3257.          of GrammarSymbolRange :=
  3258.           (  100,  100,  102,  102,  102,  102,  102,  102,  102,  102
  3259. ,  102,  102,  102,  101,  101,  101,  101,  103,  113,  104
  3260. ,  104,  104,  119,  119,  122,  122,  122,  122,  122,  122
  3261. ,  122,  105,  114,  114,  132,  133,  133,  133,  133,  131
  3262. ,  135,  135,  125,  139,  141,  141,  126,  127,  127,  136
  3263. ,  142,  137,  144,  128,  128,  145,  116,  146,  148,  150
  3264. ,  150,  152,  152,  129,  153,  153,  153,  156,  123,  157
  3265. ,  159,  159,  161,  161,  161,  130,  120,  120,  164,  164
  3266. ,  167,  167,  167,  170,  170,  170,  170,  170,  170,  170
  3267. ,  165,  165,  171,  171,  171,  149,  149,  149,  149,  149
  3268. ,  149,  176,  177,  177,  179,  179,  179,  178,  180,  180
  3269. ,  180,  180,  182,  181,  181,  181,  181,  181,   99,   99
  3270. ,   99,  117,  117,  117,  117,  117,  117,  191,  191,  138
  3271. ,  201,  204,  204,  206,  202,  202,  202,  202,  202,  202
  3272. ,  202,  209,  209,  209,  209,  209,  209,  210,  210,  210
  3273. ,  211,  211,  205,  205,  212,  212,  212,  212,  213,  208
  3274. ,  208,  207,  207,  207,  207,  218,  216,  216,  216,  216
  3275. ,  219,  219,  219,  219,  219,  219,  219,  219,  219,  219
  3276. ,  220,  220,  220,  220,  220,  220,  238,  222,  223,  232
  3277. ,  242,  233,  246,  245,  245,  234,  234,  249,  249,  249
  3278. ,  251,  250,  250,  235,  235,  224,  224,  224,  224,  225
  3279. ,  225,  226,  106,  254,  254,  254,  254,  257,  257,  255
  3280. ,  258,  258,  259,  259,  259,  173,  231,  107,  261,  261
  3281. ,  262,  174,  174,  263,  121,  121,  121,  121,  169,  112
  3282. ,  112,  112,  112,  108,  265,  265,  265,  265,  175,  268
  3283. ,  270,  236,  236,  227,  237,  237,  237,  272,  275,  275
  3284. ,  277,  277,  277,  278,  279,  280,  273,  274,  228,   98
  3285. ,  284,  285,  285,  285,  287,  287,  287,  287,  287,  287
  3286. ,  287,  286,  291,  172,  172,  172,  288,  110,  293,  292
  3287. ,  292,  294,  229,  229,  109,  296,  296,  297,  299,  299
  3288. ,  299,  299,  300,  300,  300,  300,  300,  300,  300,  300
  3289. ,  111,  111,  111,  111,  111,  111,  302,  305,  305,  306
  3290. ,  168,  168,  168,  168,  307,  308,  310,  310,  313,  312
  3291. ,  309,  230,  154,  154,  158,  158,  215,  215,  243,  243
  3292. ,  115,  115,  118,  118,  134,  214,  214,  140,  140,  143
  3293. ,  143,  147,  147,  151,  151,  155,  155,  124,  124,  160
  3294. ,  160,  162,  162,  163,  163,  166,  166,  183,  183,  185
  3295. ,  186,  186,  184,  184,  187,  314,  314,  314,  188,  188
  3296. ,  189,  190,  190,  315,  315,  192,  192,  193,  193,  194
  3297. ,  194,  195,  195,  196,  196,  197,  197,  198,  198,  199
  3298. ,  199,  199,  200,  200,  203,  203,  217,  217,  221,  221
  3299. ,  240,  240,  241,  241,  317,  239,  316,  244,  244,  247
  3300. ,  247,  248,  248,  253,  253,  252,  318,  318,  256,  256
  3301. ,  260,  260,  260,  264,  264,  266,  266,  267,  267,  269
  3302. ,  269,  269,  269,  271,  271,  271,  271,  276,  276,  281
  3303. ,  281,  282,  282,  283,  283,  289,  289,  319,  319,  290
  3304. ,  290,  295,  295,  298,  298,  301,  301,  301,  303,  303
  3305. ,  304,  304,  311,  311)  ;
  3306.         --| Map of the grammar rule number (constant array index) to
  3307.         --| numeric value of left hand side symbol.
  3308.         -- NYU Reference Name: LHS
  3309.  
  3310.     RightHandSide :
  3311.          constant array (RightHandSideRange)
  3312.          of GC.ParserInteger :=
  3313.           (    6,    3,    1,    1,    1,    1,    1,    1,    1,    1
  3314. ,    1,    1,    1,    5,    6,    5,    6,    6,    2,    1
  3315. ,    1,    1,    5,    9,    1,    1,    1,    1,    1,    1
  3316. ,    1,    5,    1,    2,    1,    1,    1,    1,    3,    2
  3317. ,    2,    4,    4,    1,    1,    1,    1,    1,    1,    2
  3318. ,    2,    2,    2,    1,    1,    7,    4,    3,    4,    2
  3319. ,    1,    1,    3,    4,    4,    4,    3,    5,    4,    9
  3320. ,    5,    4,    1,    3,    2,    2,    3,    7,    1,    3
  3321. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3322. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3323. ,    1,    4,    3,    3,    1,    1,    1,    3,    1,    1
  3324. ,    1,    1,    3,    2,    5,    5,    3,    1,    1,    4
  3325. ,    2,    1,    1,    1,    1,    1,    1,    2,    3,    1
  3326. ,    1,    2,    2,    3,    1,    1,    1,    1,    1,    1
  3327. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3328. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    3
  3329. ,    3,    2,    5,    4,    4,    3,    1,    1,    2,    2
  3330. ,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1
  3331. ,    1,    1,    1,    1,    1,    1,    3,    2,    4,    8
  3332. ,    1,    8,    2,    4,    3,    7,    8,    2,    4,    5
  3333. ,    2,    3,    5,    5,    4,    2,    4,    3,    5,    2
  3334. ,    3,    3,    2,    2,    6,    4,    8,    1,    1,    4
  3335. ,    1,    2,    1,    2,    3,    5,    2,    2,    4,    6
  3336. ,    3,    5,    4,    4,    6,   10,    5,    9,    4,    6
  3337. ,    6,    5,    4,    2,    2,    3,    7,    8,    4,    4
  3338. ,    4,    4,    8,    3,    1,    1,    1,    7,    5,    2
  3339. ,    1,    1,    1,    2,    2,    3,    9,   10,    4,    1
  3340. ,    2,    5,    2,    2,    1,    1,    1,    1,    1,    1
  3341. ,    1,    1,    4,    4,    6,    6,    5,    4,    2,    4
  3342. ,    3,    1,    2,    3,    2,    2,    2,    2,    5,    5
  3343. ,    9,    4,    3,    2,    2,    2,    2,    1,    1,    1
  3344. ,    6,   10,    6,   10,    5,    9,    1,    1,    1,    1
  3345. ,    1,    1,    1,    1,    5,    5,    8,    9,    5,    4
  3346. ,    6,    4,    0,    2,    0,    2,    0,    2,    0,    2
  3347. ,    0,    2,    0,    3,    1,    1,    3,    0,    3,    0
  3348. ,    1,    0,    3,    0,    3,    0,    3,    0,    3,    0
  3349. ,    2,    0,    3,    1,    3,    1,    3,    3,    3,    4
  3350. ,    0,    3,    0,    2,    3,    1,    3,    2,    1,    3
  3351. ,    4,    0,    3,    0,    3,    3,    3,    3,    3,    3
  3352. ,    3,    4,    4,    4,    4,    0,    2,    1,    2,    1
  3353. ,    2,    3,    1,    3,    0,    2,    1,    3,    1,    2
  3354. ,    0,    3,    0,    1,    2,    2,    3,    1,    2,    0
  3355. ,    2,    0,    1,    0,    2,    2,    1,    2,    0,    3
  3356. ,    0,    1,    1,    0,    3,    1,    3,    0,    3,    0
  3357. ,    4,    3,    7,    0,    4,    3,    7,    0,    3,    1
  3358. ,    1,    0,    3,    1,    2,    0,    3,    1,    3,    0
  3359. ,    3,    0,    3,    0,    2,    0,    2,    2,    0,    3
  3360. ,    1,    3,    1,    3)  ;
  3361.         --| Map of the grammar rule number (constant array index) to
  3362.         --| size of right hand sides (number of symbols).
  3363.         -- NYU Reference Name: RHS
  3364.  
  3365.     ActionTableOne :
  3366.          constant array (ActionTableOneRange)
  3367.          of GC.ParserInteger :=
  3368.           (    0,    0, 6920, 6923,  202,  203,    0,    0,    0,    0
  3369. ,   79,    0,    0,    0,    0,    0,  609,    0,    0,  793
  3370. ,    0,    0,    0,   49,   50, 6927,  229,    0,    0, 6930
  3371. ,  565,    0,    0,    0,    0,   53, 6933,    0,   55,   56
  3372. , 6936, 6939,   59,   60,    0,    0,   61,   62,   63, 6942
  3373. ,    0,   65,   66,   67,   68,   69,    0,    0,   70,    0
  3374. ,    0,    0,  312, 6945,    0,   40,   41,    0,  597,    0
  3375. ,    0,    0,    0,    0,  313,    0,  124,   34,    0,    0
  3376. ,    0,    0,    0,    0,    0,    0,    0,  169,    0,    0
  3377. ,    0,  823,    0,    0,    0,  295,    0,   40,   41,    0
  3378. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,   35
  3379. ,   36,   37,    0,    0,    0,    0,    0,    0,    0,    0
  3380. ,    0,    0,  316,    0,    0,  672,    0,    0,    0,    0
  3381. ,    0,    0,    0,    0,  633,  260,    0,    0,    0, 6948
  3382. ,   39,   40,   41,    0,  170,   42,    0,  720,   43,    0
  3383. ,   44,    0,    0,    0,    0,    0,   96,    0,    0,    0
  3384. ,    0,   71,    0,    0,  644,    0,    0,  316,    0,  904
  3385. ,  873, 6951, 6954,   37,   49,   50,   51,    0,    0,  296
  3386. ,    0,    0,    0,    0,    0,    0,  508,    0,    0,    0
  3387. ,    0,    0,  341,    0,    0,    0,    0,    0,  351,    0
  3388. ,  767,  102,   39,   40,   41,    0, 6957, 6960,  297,    0
  3389. ,   43,    0, 6963,    0,    0,    0,    0,    0,    0,    0
  3390. ,    0,    0,    0, 6966,    0,   98,    0,    0,    0,    0
  3391. ,    0,    0,    0,    0,    0,  344,  615,    0,   42,    0
  3392. ,    0,    0,    0,    0,    0,    0,    0,  393,    0,    0
  3393. ,   49,   50,   51,  566,    0,    0,   52,    0,    0,    0
  3394. ,    0,    0,    0,   96,    0,  216,    0,    0,    0,    0
  3395. ,    0,    0,    0,   61, 6969,   63,   64,    0,   65,   66
  3396. ,   67, 6972,   69,    0,  915, 6976,    0,    0,    0,    0
  3397. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3398. ,    0,    0,    0,    0,  112,  277,    0,    0,    0,    0
  3399. ,  113,  721,   49, 6980, 6983,    0,    0,    0,   52,    0
  3400. ,    0,    0,  738, 6986, 6989,    0,    0,   55,   56,   57
  3401. , 6992,   59, 6996,    0,    0,   61,   62,   63, 6999,  794
  3402. ,   65,   66,   67, 7002,   69,    0, 1342,   70,  924, 7005
  3403. ,    0,    0,    0,    0,    0,  114,  115,  116, 1019, 1019
  3404. ,  231,    0,    0, 7008,  119,  120,    0,    0,    0,    0
  3405. ,    0,    0,  509,  326,    0,  567,    0,    0,  568,    0
  3406. ,    0,    0,    0,    0,    0,  719,    0,  925,    0,    0
  3407. ,  510,    0,   98,    0,    0,    0,    0,    0,    0,   34
  3408. ,  217,    0,    0,    0,    0,    0,    0,  487,    0,    0
  3409. ,    0,    0,   99,    0,    0,  298,    0,    0,    3,    0
  3410. ,    0,    0,    0,    0,    0,    0,  782,    0,  916,  102
  3411. ,    0, 7011, 7014,   37,  488,    0,    0,  169,    0,    0
  3412. ,    0,    0,    0,    0,    0,    0,  926,    0,    0,  125
  3413. ,  126,    0,    0,    0,    0,    0,  127,    0,    0,    0
  3414. ,    0,  102,   39,   40,   41,    0,    0,   42,    0,    0
  3415. ,    0,  121, 7017,  647,  217,   96,  159,    0,    0,    0
  3416. ,    0,    0,    0,  123,    0,    0,  726,  874,    0,    0
  3417. ,    0,    0,    0,    0,  170,    0,    0,    0,    0,    0
  3418. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3419. ,    0,    0,    0,  720,  734,    0,    0,    0,  407,    0
  3420. , 7020,    0,    0,    0, 7023,    0, 1370,    0,  409,    0
  3421. , 1370,  410,  129,    0,    0, 7026, 7029, 1396,    0,    0
  3422. , 7032, 7036, 7039,    0, 7042, 7045,    0,    0,    0, 1366
  3423. ,    0,  691,  327,  414,    0, 1396,    0,    0,    0,  169
  3424. ,    0,    0,  415,    0,    0,    0,    0, 7048,   35, 7051
  3425. ,   37,    0,   49,   50,   51,    0,    0,    0, 7054,    0
  3426. ,    0,  418,    0, 7057,   41,    0,    0,    0,    0,    0
  3427. ,    0,    0,    0,    0,    0,    0,   62,  153, 7061,   39
  3428. , 7064, 7067, 7070, 7073, 7077,    6,    7,   43,  419, 7081
  3429. ,    0,    0,    0,    0,    0,    0,  420,    0,    0,    0
  3430. ,    0,    0,    0,    0,  277,  200, 7086,  202,  203,    0
  3431. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3432. ,    0,  124,  739,    0,    0,    0,    0,    0,    0,    0
  3433. ,    0,    0,    0,    0,    0,    0,   34,  905,  159,    0
  3434. ,    0,    0,    0,    0,  125, 7089, 7092,    0,    0,    0
  3435. ,    0, 7095,    0,    0,    0,    0,    0,  721,    0,    0
  3436. ,    0,    0,  151,    0,    0,  242,    0,  927, 7098,   36
  3437. ,   37,    0,   49,   50,   51,  100,    0,    0,    0,    0
  3438. ,    0,  225,    0,    0,    0,    9,  278,    0,    0, 7101
  3439. , 7104,   51,    0,    0,    0,   52,  225,    0,  102, 7107
  3440. ,   40,   41,    0,  170,   42,  894,    0,   43,    0, 7110
  3441. ,    0,    0, 7113,   62, 7116, 7119,  424, 7122, 7125, 7128
  3442. , 7131, 7134,  430,  431, 7138,  433,  434,  435,  436,  437
  3443. , 7141,  439,  440,  441,  442,    0,    0,    0,    0,    0
  3444. ,    0,    0,  847,  443,    0,    0,    0,    0,    0,  444
  3445. ,    0,    0,    0,    0,    0,    0,    0,    0,  731,    0
  3446. ,    0,    0,    0,    0,    0,    0,    0,    0,  445,  446
  3447. ,  447,  241,    0,    0,   96,    0,  280,    0,    0,    0
  3448. ,    0,    0,  649,  860,    0,  651,    0,    0,    0,    0
  3449. ,  635,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3450. ,    0,    0,    0,    0,   83,    0,    0,    0,    0,   49
  3451. ,   50,   51,    0,  299,    0,   52,    0,    0,  619,    0
  3452. ,    0,   96,    0,    0,    0,    0,    0,    0,  599,    0
  3453. ,    0,    0, 7144,   62,   63,   64, 7147,   65,   66,   67
  3454. ,   68,   69,    0,  616,   70,  169,    0,    0,    0,    0
  3455. ,    0,    0,  328,    0,  346,    0,    0,    0,    0,    0
  3456. ,    0,    0,    0,  648,    0,    0,    0,    0,   35,   36
  3457. ,   37,    0,    0,    0,    0,    0,    0,  592,    0,    0
  3458. ,    0,    0,    0,    0,    0,    0,  593,  796,    0,    0
  3459. ,    0,    0,    0,    0,    0,    0,  408,    0,  102,   39
  3460. ,   40,   41,  170,    0,   42,    0,    0, 7150,    0,   44
  3461. ,    0,    0,    0,    0,    0,    0,    0,    0,  936,    0
  3462. ,    0,    0,    0, 7153,    0,    0,  466,    0,    0,    0
  3463. ,    0,    0,    0,    0,    0,  169,    0,    0,    0,  225
  3464. ,    0,    0,  740,    0,    0,    0,    0,  130,    0,  676
  3465. ,    0,    0,    0,  677,    0,  769,    0,    0,   96,    0
  3466. ,    0,    0,  661,    0,    0,    0,    0,    0,    0,    0
  3467. ,  571,  243,    0,    0,    0,  722,    0,    0,    0,    0
  3468. ,    0,    0,  151,    0,    0,    0,    0,    0,   34,    0
  3469. ,    0,    0,  420,    0,    0,    0,    0,    0,    0,    0
  3470. ,    0,  316,    0, 7156,  692,    0,    0,  600,    0,   49
  3471. ,   50, 7160,    0,    0,    0,   52,    0,    0,    0,  466
  3472. , 7163,   36, 7166,  375,  126,  510,    0,   98,    0,    0
  3473. ,  127,    0, 7169,   62,   63, 7172,  946,   65,   66,   67
  3474. ,   68,   69,    0,    0,   70,    0,    0,    0,    0,    0
  3475. ,  102,   39, 7175, 7178,    0,    0, 7181,   89,    0, 7184
  3476. ,    0,   44,    0,    0,    0,    0,    0,  636,    0,    0
  3477. ,    0,    0,    0,    0,    0,    0,   16,    0,    0, 7187
  3478. ,    0,    0,    0,    0,  131,    0,    0,  487,    0,    0
  3479. ,  770,    0,    0,    0,   34,    0,    0,    0,    0,    0
  3480. ,    0,    0,    0,    0,    0,    0,    0,  277,    0,   34
  3481. ,   34,   35,   36,   37,  783,    0,  132,    0,    0,  679
  3482. ,    0,    0,    0,  262,    0,    0,   35,   36, 7190,    0
  3483. ,    0,    0,  342,    0,  151,    0,    0,    0,    0,    0
  3484. ,    0, 7193, 7197, 7201, 7205, 1042,    0,   42,   13,   14
  3485. ,   43,    0,   44,    0,    0,  217, 7209,   39,   40,   41
  3486. ,    0,   49, 7213,   51,  395,   43,    0, 7216, 1042,  682
  3487. ,  683, 7220, 7223, 7228, 7231,   41,  347, 7235, 7238,    0
  3488. ,   43,   43, 7241, 7245, 7249, 7252, 7255, 7258,   35, 7261
  3489. , 7264,   67,   68, 7267,    0,    0,   70,    0,  124,    0
  3490. ,    0,    0, 1042,  467,    0,    0,  468, 1042, 1042, 1042
  3491. , 1042, 1042, 7270, 1042, 7273, 7277, 1042,    0,  102, 7280
  3492. , 7283, 7286, 1330, 7289, 7292, 7296,    0, 7299, 7302, 7305
  3493. , 7310,  399,    0, 7313,    0,    0,    0,    0,    0,    0
  3494. ,  151,    0,  518,    0, 7316, 7319,  519,  674,    0,    0
  3495. ,    0,  937,   49, 7322, 7325,  151,  151,    0,   52,    0
  3496. ,  127,    0,  848,    0,    0,    0,    0, 7328, 7331, 7334
  3497. , 7338,   59,   60,   52,    0,   61,   62,   63,   64,    0
  3498. ,   65,   66, 7341, 7345, 7349, 7354, 7357, 7361,   52,   52
  3499. ,   61, 7365, 7369, 7373,  208, 7376, 7379, 7382, 7386, 7390
  3500. , 7395, 7398, 7401, 7407,    0, 7410, 7413, 7416, 7420,   64
  3501. ,   65, 7423, 7426, 7429, 7432,   69,    0,   70,   70,    0
  3502. ,  521,    0,    0, 7437, 7440, 7443, 7446,  526,  527, 7449
  3503. ,   50,   51,    0,  529,  530, 7452,    0,   34,  895,    0
  3504. , 7456,  113,  533,  478,  861,    0,    0,    0,  693,  301
  3505. ,  784,    0,   61,   62, 7459, 7462, 7466, 7469,   66,   67
  3506. , 7472, 7475,    0,   43,   70,   44,    0,    0,  918,   35
  3507. , 7478,   37,    0,    0,    0,    0,  404,    0,    0,    0
  3508. ,    0,    0,    0,   25,   26,   27,  114, 7481,  116,    0
  3509. ,  213,    0,    0,    0,  118,  119,  120,    0,    0,  747
  3510. ,   39, 7484,   41,    0,  134,   42,    0,    0,   43,    0
  3511. ,   44,    0,  798,    0,   96, 7487,    0,    0, 7490,   31
  3512. ,  618,    0,    0,    0,    0,    0,    0,  241,    0,    0
  3513. ,   34,    0,    0,    0,    0,    0,    0,  707,  649,  650
  3514. ,    0,  651,    0,    0,    0,    0,    0, 7493,   36,   37
  3515. ,    0,    0,    0,  100,    0,    0,    0,    0,    0,  694
  3516. ,    0,    0,   35, 7496,   37,   49,   50,   51,    0,  282
  3517. ,    0,   52,  241,    0,    0,  825,    0, 7499,   39,   40
  3518. ,   41,  510,    0, 7502,  849,    0,  651,    0,   61, 7506
  3519. , 7510, 7513,  102, 7516, 7519, 7522, 7527,   69,   42,    0
  3520. , 7530,   43,  121, 7533,    0,    0,    0,    0,    0,    0
  3521. ,   49,   50,   51,    0,  123,    0,   52,    0,    0,    0
  3522. ,  247,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3523. ,    0,    0,    0,   61,   62,   63,   64,    0, 7536,   66
  3524. ,   67,   68,   69,    0, 7539, 7543,    7,    0,    0,    8
  3525. ,    0,  886,    0,    0,    0,    0,    0,    0,    0,    0
  3526. ,    0,  151,    0, 7546,    0, 7549,    0,    0,    0,    0
  3527. ,    0,    0,    0,    0,    0,    0,  151,    0,    0,    0
  3528. ,    0,    0,    0,  159,    0,  875,    0,    0,   49, 7552
  3529. , 7555,  169,    0,    0,   52,  356,   83,    0,    0,    0
  3530. ,    0,    0,    0,   49,   50, 7558,  167,    0,    0, 7561
  3531. ,    0,  574,   62,  272,   64,    0,   65,   66, 7564, 7567
  3532. , 7570, 7573,   59,   60,    0,    0,   61, 7576,   63,   64
  3533. ,    0, 7579,   66,   67,   68, 7582,    0,    0,   70,    0
  3534. ,    0,  534,    0,    0,    0,    0,    0,  652, 7585,    0
  3535. ,    0,   11,    0,  249,    0,  250,    0,    0,    0,    0
  3536. ,   12,    0,    0,    0,    0,  862,    0,    0,    0,    0
  3537. ,    0,  575,    0,  466,    0,  303,    0,    0,  170,  251
  3538. ,    0,    0,    0,    0,    0,    0,    0,  154,    0,    0
  3539. ,    0,    0,    0,  168,    0,    0,    0,    0,    0,    0
  3540. ,    0,    0,    0,  732,  159,    0,    0,  155,    0,    0
  3541. ,    0,    0,    0,    0,    0,    0,    0,    0,  236,    0
  3542. ,    0,    0,  620,  621,    0,    0,    0,  156,    0,    0
  3543. ,    0,    0,    0,    0, 7588,    0,    0,    0,    0,    0
  3544. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3545. , 7591,    0,  480,    0,    0,    0,  135,    0,    0,    0
  3546. ,    0,    0,  785,    0,    0,    0,   35,   36,   37,    0
  3547. ,    0,  101,    0,    0,    0,    0,    0,    0,    0,    0
  3548. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3549. ,    0,    0,    0,    0,    0, 7594, 7597,   39,   40,   41
  3550. ,    0,    0,   42,    0,    0,   43,    0,   44,    0,    0
  3551. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3552. ,    0,    0,    0,    0,    0,    0,    0, 7600, 7604, 7607
  3553. ,   37,    0,    0,    0,    0,    0,    0,    0,    0,  314
  3554. ,    0,  756,    0,    0,    0,    0,    0,    0,  622,    0
  3555. ,    0,    0,    0,    0,  163,   34,    0,  102, 7610, 7614
  3556. , 7617,   41,    0,   42,   42,    0,   43, 7620,   44, 7623
  3557. ,    0,    0,    0,  377,    0,    0,    0,    0,    0,    0
  3558. ,  105,    0,    0,    0,    0,    0,    0, 7626, 7630,   37
  3559. ,    0,    0, 7633,  126,    0,    0,    0,    0,    0,  127
  3560. ,   83,    0, 7638,    0,   40,   41,    0,   49,   50, 7641
  3561. , 7645,    0,  107,   52,  108,  358,  109,  102, 7648,   40
  3562. ,   41,    0,   55, 7651,   57,   58, 7654,   60,   44,    0
  3563. , 7657, 7661, 7664,   64,  863,   65,   66,   67,   68,   69
  3564. ,    0,  151, 7667,    0,    0,    0,    0,  603,   34,    0
  3565. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3566. ,    0,    0,    0,    0,   35, 7670,   37,    0,   49, 7673
  3567. , 7676,   51,    0,    0,   52,   52,    0,    0,    0,    0
  3568. ,   35, 7679, 7682,   55, 7685, 7688, 7691, 7695, 7698, 7701
  3569. ,  241,   61, 7704, 7707, 7710, 7714, 7718, 7721, 7726, 7729
  3570. , 7732, 7736,  876, 7739, 7742,   44,    0,    0,  919,    0
  3571. , 7745,   39,   40, 7748,   50,   51,   42,    0,    0,   43
  3572. ,    0,   44,    0,  306,    0,    0,    0,    0,   49,   50
  3573. ,   51,  786,    0,    0, 7751,  157,  908,    0,    0,  158
  3574. ,  237,  159,    0,    0,    0,    0,  653,    0,    0,    0
  3575. ,    0,   61,   62,   63,   64,    0,   65,   66,   67, 7754
  3576. , 7757,    0,  898,   70,    0,    0,  127,  262,    0,    0
  3577. , 7760,    0,    0,    0,    0,    0,    0,    0,  151,    0
  3578. ,    0,    0,    0,  262, 7763,    0,  408,    0,    0,  160
  3579. ,    0,    0, 1370,    0, 7766,    0, 1370,  410,  594,    0
  3580. ,    0, 7769,   35,   36,   37,   49, 7772, 7775,    0,    0
  3581. ,  412, 7779,    0,    0,    0, 7782,   35,   36,   37, 7785
  3582. ,   55, 7788, 7791, 7794,   59, 7797,    0,   52, 7800,   62
  3583. ,   63, 7803,  102, 7808, 7812, 7815, 7819, 7822,   42,   98
  3584. ,   70,   43,  410,   44, 7825,   62, 7829, 7832,   40, 7836
  3585. , 7840,   67, 7843,   69,    0,   43,   70,   44,    0,    0
  3586. ,    0,    0,    0,    0,  378,    0,    0,    0,  172,   13
  3587. , 7846,    0,    0,    0,  419,    0,    0,    0,  254,    0
  3588. ,  255,  256,  420,  887, 7849, 7852,    0,    0, 7855,    0
  3589. ,   80,    0, 7858,    0,   40,   41,    0,    0, 7861,  176
  3590. ,    0,    0,  177,  178,    0,  104,    0,    0,  159,    0
  3591. ,    0,    0,    0,    0,  742,    0,  105,  604,    0, 7864
  3592. ,    0,    0,    0,    0,    0,    0,    0,  420,  106,    0
  3593. ,  151,  421,    0,  535,    0,  316,   34,    0, 7867,   81
  3594. ,    0,    0,    0,   49, 7870, 7873, 7876, 7879,  183, 7882
  3595. , 7885,  186, 7888,  188,  189,  190,  191,   49, 7891, 7895
  3596. , 7899,   58, 7902, 7906,  194,   16,   61,   62, 7910, 7913
  3597. ,   37,   65, 7916, 7919, 7923, 7927, 7931,   60,   70,  360
  3598. ,   61,   62, 7934,   64,    0,   65,   66,   67,   68,   69
  3599. ,    0,   85, 7937,    0,    0,    0,    0,    0, 7941,   39
  3600. ,   40, 7944,  424, 7948, 7951, 7955,  428, 7958,  430, 7961
  3601. , 7964, 7967, 7971,  435, 7974,  437,  438,  439,  440,  441
  3602. , 7978,    0,    0,  757,    0,    0,   18,   19,    0, 7981
  3603. ,    0,   21,    0,    0,    0,  444,    0, 7984,    0,    0
  3604. ,    0,    0,  285,    0,   34,    0,    0,    0,    0,    0
  3605. ,    0,  461,    0,    0, 7987,  446,  447,  225,  680,    0
  3606. ,  462,  162,    0,  681, 7990,    0,    0,    0,    0,    0
  3607. ,    0,  454,  799,    0,    0,    0,   35,   36,   37,  315
  3608. ,    0,    0,  105,    0,    0,    0,    0,    0,    0,    0
  3609. ,   34,    0,    0,   22, 7993,    0,    0, 7997,    0,    0
  3610. ,    0,    0,    0,    0, 8000, 8003, 8008, 8011, 8014, 8017
  3611. ,   50,   51,   42,    0,    0, 8020,    0,   44,    0,    0
  3612. ,    0,   34,   35, 8023,   37,  449,    0,  839,    0,  169
  3613. ,  840,    0,   61,   62,   63, 8026,    0,   65,   66, 8029
  3614. , 8032,   69,    0,    0,   70,    0,    0,  697,    0,    0
  3615. ,  200, 8035, 8038, 8041, 8045, 8048,    0,    0, 8051,    0
  3616. ,    0,   43,    0,   44,    0,    0,    0,   35,   36,   37
  3617. ,    0,  375,  126,    0,   24,    0,    0,    0,  127,  454
  3618. ,    0, 8054,   26, 8057, 8060,   40, 8063,    0,    0,   42
  3619. ,  105,    0,   43,    0, 8066,    0,    0,  494,   39,  495
  3620. ,   41,    0,  455,   42,    0,    0,   43, 8069, 8072,    0
  3621. ,    0, 1042,    0, 1042,    0,    0, 8075, 8078,   50,   51
  3622. ,    0,    0,    0,   52, 1042, 8081, 1042,    0,    0,    0
  3623. ,    0,    0,    0,    0,    0,  103,  151,    0,    0,    0
  3624. ,   61, 8084, 8087,   64,    0,   65, 8091, 8094, 8097, 8100
  3625. , 1042, 1042, 8105, 1042, 8108, 1042, 8111,  217, 1042, 8114
  3626. , 1042,    0,    0, 8117, 8120,   51, 1042, 8123, 1042,   52
  3627. ,  262,  555,    0,    0, 8126,   36,   37,    0,  375, 8130
  3628. ,    0,  151,    0,    0,    0,  127, 8133,   62, 8136, 8139
  3629. ,    0,   65,   66,   67, 8142, 8145,   51,    0, 8149,  107
  3630. ,   52,  108,    0, 8152,  494, 8155, 8158,   41,   49, 8161
  3631. , 8164,   57,   58, 8168, 8171,   44,    0,   61,   62,   63
  3632. ,   64,    0,   65, 8175, 8178, 8181, 8184,   59,   60,   70
  3633. ,  361, 8188,   62,   63,   64,    0,   65,   66,   67,   68
  3634. ,   69,  463,    0,   70,    0,    0,    0,  163,    0,    0
  3635. ,    0,    0,    0,    0,    0,  170,  496, 8191,    0,    0
  3636. ,    0,    0,    0,  316,   34,    0, 8194,    0,    0,    0
  3637. ,    0,    0,    0,    0,    0,    0,    0,  262, 8197, 8200
  3638. ,    0,    0,    0,    0,  655,    0,    0,  888,  151,    0
  3639. ,    0,  829,    0,    0,    0,    0,   35,   36,   37,    0
  3640. ,    0,    0,    0,    0,  701,    0,    0,    0,    0,  909
  3641. ,   35,   36,   37,    0,  170,   49, 8203,   51,    0,    0
  3642. ,    0,   52,    0,  686,    0,    0,  102, 8206,   40,   41
  3643. ,   55,   56, 8209,   58, 8212, 8215,  498, 8218, 8221,   62
  3644. , 8224, 8229,   40, 8232,   66,   67, 8235, 8239,    0,   43
  3645. ,   70,   44,    0,  127,    0,    0, 8242,  830,    0,    0
  3646. ,    0,    0,    0,    0,  580,    0,    0,    0, 8245,  841
  3647. ,    0,  625,    0,    0,    0,    0,    0, 1371,  456,    0
  3648. ,    0, 1371,    0,    0,    0,    0,    0,    0,   35,   36
  3649. , 8248,    0, 1367,    0,    0,    0,    0,    0,  817, 8251
  3650. , 1367,    0,  450,  636,    0,    0,  386,    0,    0,    0
  3651. ,  151,    0,    0,  244,    0,    0,    0,   81,   38,   39
  3652. ,   40,   41,    0,    0, 8254,    0,    0,   43,    0, 8257
  3653. ,    0,   33,    0,  217,    0,    0,    0,   49,   50,   51
  3654. ,    0,  497,    0, 8260,  499, 8263,    0,    0,  380,    0
  3655. ,    0, 8266, 8269, 8272, 8275,   58,   59, 8278,    0,    0
  3656. , 8281,   62, 8284, 8287,    0,   65,   66,   67,   68, 8290
  3657. , 8293,    0,   70,    0,   61,   62,   63,   64,    0, 8296
  3658. ,   66,   67,   68,   69,    0,    0, 8299,    0,    0,    0
  3659. ,    0,   47,    0,    0,    0,    0,    0,    0,    0,  664
  3660. ,    0,    0,   48,    0,    0,    0,    0, 8302,    0, 8305
  3661. ,    0,    0,  540,    0,  541,    0,    0,    0,    0,  941
  3662. ,  638,    0,   34,  159,    0,    0,    0,    0,    0,   49
  3663. , 8308,   51,   98,    0,    0, 8311,  758,    0,    0,  759
  3664. ,    0,    0,  258,    0,   55,   56,   57,   58,   59,   60
  3665. ,    0,    0,   61, 8314, 8317, 8321,   37,   65,   66,   67
  3666. ,   68,   69,   84,    0,   70,    0,    0,    0,    0,  724
  3667. ,    0,  802,    0,    0,    0,    0,  362,    0,   98,    0
  3668. ,    0,    0,    0,    0,  494, 8324,  495,   41,    0,    0
  3669. ,   42,    0,    0,   43,    0,   44,    0,    0,    0,    0
  3670. ,    0,    0,  760,    0,    0,    0,    0,  164,    0,    0
  3671. ,    0,    0,  277,    0,  803, 8327, 8330,    0,    0,    0
  3672. ,  775,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3673. ,    0,    0,    0,    0,    0,    0,  496,    0,    0,    0
  3674. ,    0,    0,    0,    0,  222,   96,    0,   35,   36,   37
  3675. ,    0,    0,  464,    0,   98,    0,    0,  262,  277,    0
  3676. ,    0,    0,    0,    0,  278,    0,  139,  259, 8333,    0
  3677. ,    0,  140,    0,  141,    0,    0,    0,  102,   39,   40
  3678. ,   41,    0,    0,   42,    0,    0,    0,    0,  316,    0
  3679. ,    0,  868,    0,    0,    0,   49,   50,   51,    0,  665
  3680. ,    0,   52,  889,  656,    0,    0,    0,    0,    0,    0
  3681. ,   55, 8336, 8339,   58,   59,   60,    0,    0,   61,   62
  3682. ,   63,   64,    0,   65,   66,   67,   68,   69,    0,    0
  3683. ,   70,    0,    0,    0, 8342,    0,    0,  556,    0,    0
  3684. ,    0,    0,    0,    0,    0,    0,    0,    0,  260,    0
  3685. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3686. ,    0,  151,    0,    0,  239,    0,    0,    0,  542,    0
  3687. ,  334,  942,    0,    0,    0,    0,    0,  745,    0,  666
  3688. ,  687,    0,  746,    0,    0,    0,    0,    0,   49,   50
  3689. ,   51,    0,    0,    0, 8345,    0,    0,    0,  543,    0
  3690. ,  930,    0,    0,    0,    0,    0,  287,  142,    0,    0
  3691. ,    0,  581,    0,  582,   64,    0,  273,   66,   67,   68
  3692. ,   69,  788,    0,  498,  499,  500,    0,  606,    0,  309
  3693. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3694. ,    0,    0,    0,    0,    0,  725,    0,    0,    0,  172
  3695. ,  805,    0,    0,  806,    0,    0,  758,    0,    0,  759
  3696. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  339
  3697. ,    0,    0,    0,   83,  777,    0,    0,    0,    0,    0
  3698. ,    0,    0,   85,   86,    0,    0,    0,    0,    0,    0
  3699. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3700. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3701. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  852
  3702. ,  467,   96,  761,  468,    0,    0,    0,    0,    0,    0
  3703. ,    0,  469,  470,    0,    0,    0,    0,    0,    0,    0
  3704. ,  910,    0,    0,  288,    0,    0,    0,  471,  225,    0
  3705. ,    0,  143,    0,    0,    0,    0,    0,    0,    0, 8348
  3706. ,    0,    0,  473,    0,    0,    0,  144,    0,    0,    0
  3707. ,   87,    0,    0,  813,    0,    0,    0,    0,  595,    0
  3708. ,    0,    0,    0,    0,    0,    0,  474,    0,    0,    0
  3709. ,  145,    0,  726,    0,    0,  146,   34,    0,    0,    0
  3710. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3711. ,    0,  626,    0,    0,    0,    0,    0,    0,  943,    0
  3712. ,    0,    0,    0,  245,  246,   34,    0,    0,   35,   36
  3713. ,   37,  475,    0,    0,    0,    0,    0,    0,    0,    0
  3714. ,    0,    0,    0,  476,    0,  477,    0,    0,    0,    0
  3715. ,  111,  261,    0,    0, 8351,    0,   96, 8354, 8358, 8361
  3716. , 8364,   41,    0,    0,   42,    0,    0,   43,    0,   44
  3717. ,  165,    0,  248,    0,    0,    0,    0,    0,  504,    0
  3718. ,    0,    0,    0,    0,    0,    0,    0, 8367,   39,   40
  3719. ,   41,    0,    0,   42,  383,    0,   43,    0,   44,    0
  3720. ,    0,    0,   34, 8370,    0,  890,    0,    0,    0,    0
  3721. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3722. ,    0,    0,    0,  510,    0,   98,  487,    0,    0, 8373
  3723. ,    0, 8376,  201,  202, 8379, 8382, 8386,   37,    0,  748
  3724. ,    0,    0,  151,    0,    0,    0,    0,    0,  667,   96
  3725. ,    0,    0,    0,  544,    0,  733,    0,    0,    0,    0
  3726. ,  262,    0,    0,  710,   38, 8389, 8392, 8395,   41,   49
  3727. , 8398, 8401,    0,   43,   43, 8405, 8408,    0,  808,  759
  3728. ,    0,    0,    0,    0,  263,    0,  223,  249,  711,  688
  3729. ,    0,    0,   61,   62,   63,   64,    0,   65, 8411, 8415
  3730. , 8419,   69,    0,    0, 8422,  277,    0,    0,  922,  657
  3731. ,    0,  166,    0,   55,   56, 8425, 8428, 8431,   60,    0
  3732. ,    0,   61,   62,   63,   64,    0,   65,   66,   67,   68
  3733. ,   69,    0,  465,   70,    0,    0,  712,   47,   47,    0
  3734. ,  466,    0,  762,    0,    0,    0,    0,    0,   48,   48
  3735. ,    0,    0,  316,  853,    0,  814,   96,    0,    0,    0
  3736. ,    0,  911,    0,    0,    0,    0,    0,  514,  515,  466
  3737. ,   34,    0,    0,    0,    0,   49, 8434, 8437, 8441,    0
  3738. ,    0,   52,   52,    0,    0,    0,    0,   53, 8444,   54
  3739. ,   55, 8447, 8450, 8453, 8456, 8459,   60,    0, 8462, 8467
  3740. , 8470, 8473, 8476, 8479, 8482, 8486, 8489, 8492,   69,    0
  3741. ,   70,   70,    0,    0,    0,    0,   34,    0,    0,    0
  3742. ,    0,    0,  547, 1303,    0,    0,    0,    0,    0,    0
  3743. ,   83,    0, 8496,   39,   40,   41,    0,    0,   42,   85
  3744. ,  167,   43,    0,   44,    0,    0,    0,  451,   35,   36
  3745. ,   37,    0,    0,    0,  169,    0,    0,    0,    0,    0
  3746. ,  750,    0,  102,    0,   40,   41,    0,    0,    0,    0
  3747. ,    0,    0, 1011,    0,    0,    0, 1303,    0,  102,   39
  3748. ,   40,   41,    0,    0, 8500,    0,  549, 8504,  551,   44
  3749. ,    0,   34,    0,  532,    0,  533,    0,    0,    0,    0
  3750. ,    0,    0,    0,    0,    0, 8507,    0,    0,  319,    0
  3751. ,    0,  170,    0,   71,   71,    0,  105,    0,    0,    0
  3752. ,  225,    0,  751,   35,   36,   37,    0,  168,  106,    0
  3753. ,    0,    0,    0,    0,    0,  316,   34,    0,  778,    0
  3754. ,    0,    0,    0,   49,   50,   51, 8510,    0,    0,   52
  3755. ,    0,  262,  337,  102, 8513,   40, 8516,  880,   55, 8519
  3756. ,   57,   58, 8522,   60,   44,    0, 8526,   62, 8529, 8533
  3757. ,   37,   65,   66, 8536, 8540, 8543,  167,    0,   70,    0
  3758. ,  225,    0,    0,    0,    0,  467,    0,    0,  468,   49
  3759. ,   50,   51,    0,    0,    0,   52,  469,  470,  102,   39
  3760. , 8547, 8550,   37,    0, 8553,  566,    0,   43,    0,   44
  3761. ,    0,    0, 8556,   62,   63,   64,    0,   65,   66,   67
  3762. ,   68, 8559,    0,    0, 8562,    0,  262,  473,    0,  658
  3763. ,  102,   39,   40,   41,    0,    0,   42,  151,    0,   43
  3764. ,    0,   44,    0,    0,   34,    0,    0,    0,    0,    0
  3765. ,  566,  474,    0,    0,    0,    0,    0,    0,  407,    0
  3766. ,  408,    0,    0,  168,   49,   50, 8565,    0,  409,  703
  3767. , 8568, 8571,    0,    0,    0,    0,   35,   36,   37,   55
  3768. , 8574, 8577, 8581,   59, 8584,  413,    0,   61,   62, 8587
  3769. ,   64,    0,   65, 8590,   67,   68, 8593,  713,    0,   70
  3770. ,  714,    0,  415,  262,    0,    0,  102, 8596, 8601, 8604
  3771. , 8609,   51,   42,    0,  151, 8612,    0,   44, 1366,    0
  3772. ,    0,  418,    0,   40, 8615, 8618,   57,   58,   59,   60
  3773. ,  668,    0,   61,   62,   63, 8621,   34, 8624, 8627, 8630
  3774. , 8634, 8637,   50, 8640, 8644,    0,    0,   52, 8647,    0
  3775. ,   34,    0,    0,    0,  113,    0,  349,    0,    0,  169
  3776. ,  364,    0, 1042,    0,   61,   62, 8651, 8654, 8657, 8660
  3777. , 8663, 8666,   68,   69,  169,  869, 8670,    0,    0,  454
  3778. ,    0, 1042, 8673,   36,   37,    0,  388,    0,    0,    0
  3779. ,  105,    0,    0,    0,  514,  515, 1042,    0,  102, 8676
  3780. , 8680, 8683, 8687, 1042, 8690, 8694, 1042, 8697, 8701, 8704
  3781. , 8708,    0,  102, 8711, 8714, 8717,  420, 8720, 8723, 8726
  3782. ,  169, 8730, 1042, 8734,    0, 8738,  458,    0, 8741,    0
  3783. ,    0,  170,   49,   50,   51,    0,    0,    0,  815,    0
  3784. ,   61,   62, 8745, 8748,   37,   65,   66, 8751, 8754, 8758
  3785. , 8762,    0,   70,    0,   52,    0,    0,    0,    0,   88
  3786. ,  149,  216,    0,    0,  689,    0,  365,    0,    0,   16
  3787. , 8765,  262,  102,   39, 8768, 8772,  584, 8775, 8778, 8782
  3788. , 8786, 8791, 8794, 8797,  432, 8800,  434, 8803, 8806,  437
  3789. ,  438,  439,  440, 8809, 8812,  391,  151,   98,    0,    0
  3790. ,  127,    0,   34,  443,    0,   72,    0,   73,    0, 8815
  3791. , 8818, 8822,    0, 8825,  550, 8828,  122,    0,    0,    0
  3792. , 8832,   36, 8835,   49, 8838, 8841,    0,  123,  445, 8844
  3793. ,  447,    0, 8847,   62, 8850, 8854, 8857, 8860, 8864, 8867
  3794. , 8870, 8874,   59,   60,   70,  454,   61,   62, 8877,   64
  3795. ,  102, 8881, 8884, 8887,   68,   69, 8890,    0, 8893,   43
  3796. ,    0,   44,    0,    0,  102, 8896,   40,   41,  933,    0
  3797. ,   42,    0,    0,   43,    0,   44,    0, 8899,    0,    0
  3798. ,   35,   36,   37,   49,   50,   51,    0,    0,    0,   52
  3799. ,    0,    0,    0,    0,    0,  367,  290,  209, 8902,  211
  3800. ,    0,    0,    0,    0,    0,  752,   61,   62,   63,   64
  3801. ,  102, 8905, 8909, 8912,   68,   69,   42,  487, 8916,   43
  3802. ,    0, 8919,  817, 8924,    0,    0,    0,    0,    0,    0
  3803. ,    0,    0,    0,    0, 8928,    0,    0,  789,    0,   34
  3804. ,   34,    0,    0,    0,  913,   49,   50,   51,  151,    0
  3805. ,    0,    0,    0,    0,    0,    0,   34,    0,    0, 1044
  3806. ,    0,   49, 8931, 8935,    0,  169,    0,   52,  855,  127
  3807. ,    0, 8938, 8941, 8944,   37,   49, 8947,   51,  368,    0
  3808. ,    0,   52, 8950,  262,   61, 8953, 8956, 8959, 8962, 8966
  3809. , 8969, 8972, 8976,   69,  151,    0,   70,   74,   61, 8979
  3810. ,   63, 8982, 8986, 8989, 8994, 8998,   68, 9001, 9004,  126
  3811. , 9007,   43,   44,   44,    0,  127, 1044,   34,  102,   39
  3812. ,   40, 9011, 9015, 9019, 9022, 9025, 9028, 9031, 1044, 9035
  3813. , 1044,    0,    0, 1044, 1044, 1044,   55, 9038, 9041, 9044
  3814. , 9047, 9050, 1044, 1044, 9054,   62,   63,   64,    0, 9057
  3815. , 9060, 9064,   68,   69,  560,    0,   70,    0,    0,    0
  3816. ,    0,    0,    0,    0,  589,    0,    0,  420,  375,  126
  3817. ,    0,    0,    0,  128,  241, 9067,  246,   34,  552,  102
  3818. ,   39,   40,   41,  170,    0, 9071, 9074,    0, 9077,  669
  3819. ,   44, 9080,   34,    0,    0,    0,    0,    0,    0,    0
  3820. ,    0,    0,  151,    0,    0,  225,  247,    0,  670,   35
  3821. ,   36,   37,   49, 9084, 9087, 9090,    0,    0,   52, 9093
  3822. , 9096,  225,    0,    0, 9099,   36,   37,    0,   55, 9103
  3823. , 9106, 9109,   59,   60,    0, 9112, 9115, 9118, 9121, 9124
  3824. , 9127, 9130, 9134, 9138, 9141, 9145,    0,   70, 9149,  590
  3825. ,   44,  715, 9152, 9156, 9159, 9162,   40, 9165,   66, 9168
  3826. , 9171,   69,    0, 9175,   70,   44,    0,  790,    0,    0
  3827. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,  169
  3828. ,    0,    0,  841,    0, 9178,  102,    0,   40, 9181,    0
  3829. ,   49, 9184,   51,    0,  735,    0,   52,    0,    0,    0
  3830. ,    0,    0,    0,    0,    0,    0,   46,    0,    0,    0
  3831. ,    0,    0,  262,   61, 9187,   63, 9190,   36, 9194,   66
  3832. ,   67,   68,   69,  151,    0, 9197,    0,   47,    0,  914
  3833. ,    0,    0,   35,  628,   37,    0,  170,    0,   48,  249
  3834. ,    0,    0,    0,    0,    0,  716,  102,   39,   40,   41
  3835. ,   49,   50, 9200, 9203,    0,   43,   52,   44,    0,    0
  3836. , 9206,   26,  102,   39,   40, 9209, 9213, 9216, 9219, 9222
  3837. ,   60,   52,    0,   61,   62,   63, 9225,   53, 9228,   66
  3838. , 9231, 9234, 9237,   58,   59, 9240,    0,    0, 9243, 9246
  3839. ,   63, 9250,   35, 9254, 9257,   67, 9260, 9263,   51,  409
  3840. ,   70, 1370,  410,    0,    0,    0, 1112, 1112, 9267,   36
  3841. , 9270,  411, 1366,    0,  452, 9274,  413,    0,    0,  459
  3842. , 1366,    0,  102,   39, 9277,   41, 1112,    0,   42,    0
  3843. ,  151,   43,    0, 9280,    0,    0,    0,    0, 9283,   39
  3844. , 9287,   41,    0,    0,   42,    0,  151,   43, 1112, 9290
  3845. ,    0,    0,  418,    0,   40,   41,    0,   49, 9294,   51
  3846. ,  310,    0,    0, 9297,    0,    0,  945,    0,  322,    0
  3847. ,    0,    0,    0,   49,   50,   51,  596,    0,  498, 9300
  3848. , 9304,   62, 9307,   64,   93, 9311,   66,   67,   68,   69
  3849. ,    0,   76,   70,    0,    0,  561,    0, 9314,    0, 9317
  3850. ,   41,    0,    0, 9320,   68,   69,  151,    0,    0,    0
  3851. ,    0,  262,    0,  607, 9323,   36,   37,    0,    0,    0
  3852. ,    0,    0,  151,    0,    0,  225,    0,    0,  671,    0
  3853. ,    0,    0,    0,   49,   50,   51, 9326,  679,    0,   52
  3854. ,    0,    0,    0,    0,  102, 9329,   40,   41,  791,   49
  3855. , 9332,   51,    0,   43,    0, 9335,   61,   62,   63,   64
  3856. ,    0,   65,   66, 9338, 9341, 9345,    0,    0,   70,    0
  3857. ,    0,    0,   61,   62,   63,   64,    0, 9348, 9351,   67
  3858. , 9355, 9358,   13,   14,   70,    0,    0,    0,    0,  902
  3859. ,    0,    0,    0,  420,    0,    0,    0,    0,  173,    0
  3860. ,  174,   16,    0,  690,   34,    0,  423, 9363, 9366, 9369
  3861. , 9373, 9377, 9380,  430,  431, 9383, 9386, 9390,  435, 9393
  3862. , 9396, 9399, 9402,  440,  441,  442,    0,    0,  151,    0
  3863. ,    0,    0,    0,    0, 9405,    0,   35,   36,   37,    0
  3864. ,  444,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3865. ,    0,    0,    0,    0,    0,   49,   50, 9408,  180, 9411
  3866. , 9414, 9417,  184,  185,  186, 9421, 9424, 9428, 9432, 9436
  3867. ,    0,    0, 9439,    0,    0, 9442,  193, 9446,   61,   62
  3868. , 9449,   64,    0,   65,   66,   67,   68,   69,    0,    0
  3869. ,   70,    0,    0,  856,    0, 9452, 9455, 9458,   40,   41
  3870. ,  764,    0,   42,    0,    0,   43,    0,   44,    0,    0
  3871. ,  903,    0,    0,    0,    0,    0,    0,    0,    0,    0
  3872. ,    0,    0,    0,  195,  196, 9461,    0,    0,   35,   36
  3873. ,   37,    0,    0,    0,    0,    0,    0,    0,  562,  460
  3874. ,    0,    0,   96,    0,    0,    0,    0,    0,    0,    0
  3875. ,  151,    0,    0,    0,    0,    0,  763, 9464, 9468, 9471
  3876. ,   40,   41,    0,    0,   42,    0,    0,   43,    0, 9474
  3877. ,    0,  892,    0,    0,    0,    0,    0,   49,   50,   51
  3878. , 9478,    0,    0,   52,    0,    0,    0,  102, 9481,   40
  3879. , 9484,   41,    0,   42,    0,    0,   43,    0,   44,    0
  3880. ,   61,   62,   63,   64,    0,   65,   66, 9487, 9490, 9493
  3881. ,  198,    0,   70,   52,    0,    0,    0, 9496,   26,    0
  3882. ,    0,  199,    0,    0,    0,    0,    0,    0, 9499,    0
  3883. ,   61, 9502, 9505,   64,  302,   65,   66,   67,   68, 9508
  3884. ,    0,    0, 9511,    0,    0,    0,    0,    0,   96,    0
  3885. ,    0,    0,   30,   31,    0,    0,    0,    0,    0,    0
  3886. ,  262,    0,  323,  200, 9514, 9517,  203,    0,    0,   49
  3887. , 9520, 9523,  392,    0,    0,   52,    0,    0,    0,  467
  3888. ,    0,    0,  468,    0,  269,    0,    0,    0,    0,    0
  3889. ,  514, 9526,   61, 9529,   63,   64,    0, 9533, 9536, 9539
  3890. , 9543, 9547, 9551,   14, 9554,    0,  857,    0,    0,  517
  3891. ,    0,    0,    0,   55,   56, 9557,   58, 9560, 9563,    0
  3892. ,    0, 9567, 9571,   63,   64,  485,   65,   66,   67,   68
  3893. ,   69,  175,  205,   70,    0,  177,  178,  124,    0,  718
  3894. ,    0, 9574,    0,    0,    0,  520,    0,    0,    0,    0
  3895. ,    0,    0,    0,    0,   34,    0,  217,    0,    0,    0
  3896. ,    0,    0,    0,    0,  754,    0,    0,    0,    0,   34
  3897. ,    0,    0,    0,    0,    0,    0,    0,  179, 9577,  181
  3898. ,  182,  183,  184,  185,  186,  187, 9581, 9584, 9588,  191
  3899. ,  475,    0,    0,    0,    0, 9591, 9594, 9597,    0,  522
  3900. ,  523, 9600, 9603, 9606,  527,  528,    0,    0,    0,  529
  3901. ,  530,  531,    0, 9609,    0,  845, 9612,   39, 9615, 9618
  3902. ,    0,    0,   42,    0,    0, 9621,    0,   44,    0,    0
  3903. ,    0, 9624,   39, 9627,   41,    0,    0,   42,    0,    0
  3904. , 9630,  206,   44,  195,  196,  197,    0,  207,  208, 9633
  3905. ,  210,  211,    0,  822,  766,    0,    0,    0,   95,    0
  3906. ,    0,    0,   96,   35,   36,   37,    0,    0,    0,  310
  3907. ,    0,  270,    0,    0,    0,    0,  835,    0,    0,    0
  3908. ,    0,    0,    0,  923,    0,    0,    0,    0,    0,  632
  3909. ,  872, 9636,  684, 9639,   39,   40,   41,    0,    0,   42
  3910. ,  151,    0,   43,    0, 9642,    0,    0,    0,    0,    0
  3911. ,    0,    0,  705,    0,    0,  706,  650,    0,  651,    0
  3912. ,    0,    0,    0,   77,    0,    0,    0, 9645,   50,   51
  3913. ,  212,    0,    0,   52,    0,    0,    0,   25,   26, 9648
  3914. ,    0,  199,   49,   50, 9651,   46,    0,    0,   52,    0
  3915. ,   61,   62, 9654,   64,    0,   65,   66,   67,   68,   69
  3916. ,    0,    0,   70,    0,    0,   61, 9657,   63,   64,    0
  3917. ,   65,   66, 9660, 9663,   69,    0,    0, 9666,  737,  200
  3918. ,    0,  217,  371,  201,    0,   51,  214,    0,   52,  230
  3919. ,    0,   54,  215,    0,  486,   57,    0,  487,   58,    0
  3920. ,   96,   64,    0,  102,  729,    0,  102,   34,    0,   35
  3921. ,  271,    0,  646,   36,    0,  781,   49,    0,   42,   50
  3922. ,    0,  846,   44,    0,  151,  276,    0,   62,  262,    0
  3923. ,   68,  824, 1342,    0,   70,  673,  151,    0,   50, 1342
  3924. ,    0,   51,  372,    0,   96,  373,    0,  730,  598,    0
  3925. ,  169,   58,   97,    0,   60,   98,    0,   64, 1342,    0
  3926. ,  172,   68,    0,  325, 1342,    0,  118,    2,    0,   40
  3927. ,   35,    0,   41,   36,    0,  277,  122,    0,  408,  768
  3928. ,    0,  634,  278,    0,  159, 1396,    0,  569,   34,    0
  3929. ,  836,  411,   49,    0, 1366,   50,    0,   51,  510,    0
  3930. ,  412,   98,    0,  413,  151,    0,  416,  394,    0,  417
  3931. ,   36,    0, 1366,   52,    0,  278,   40,  218,    0,  102
  3932. ,   64,    0,   40,   65,    0,   41,   66,    0,  375,   67
  3933. ,    0,  126,   68,    4,    0,   42,   69,    5,    0,  127
  3934. ,  511,   44,    8,    0,  935,  201,    0,  421,  126,    0
  3935. ,  169,  279,    0,  241,  127,    0,   35,  305,    0,  795
  3936. ,   49,    0,  489,   50,    0,   39,  490,    0,   44,  232
  3937. ,    0,  422,   61,    0,   96,   63,    0,  423,   64,    0
  3938. ,  425,   65,    0,  426,   66,    0,  427,   67,    0,  428
  3939. ,   68,    0,  429,  755,   69,    0,  432,   70,    0,  438
  3940. ,  345,    0,   61,  225,    0,  570,   34,    0,  410,   43
  3941. ,    0,  776,  374,    0,  906,  217,  352,    0,  491,   51
  3942. ,    0,   35,   72,    0,   37,   73,    0,  512,   61,    0
  3943. ,  300,   64,    0,  334,   40,    0,  917,   41,    0,   42
  3944. ,  233,    0,  230,   43,    0,  217,   34,    0,  681,   37
  3945. ,    0,   35,  102,  133,    0,   36,   39,   35,    0,   37
  3946. ,   40,   36,    0,   41,  513,   37,    0,  102,  572,   34
  3947. ,    0,   42,   50,    0,   44,   16,   52,    0,  684,  102
  3948. ,    0,  685,   39,  102, 1042,    0,   40,   39,    0,   41
  3949. ,   40, 1042,    0,   42, 1042,    0,  205,   42,    0,   44
  3950. ,  178,  353,    0,  637,  354,   44,    0,  638,   61,    0
  3951. ,   62, 1042,    0,  797,   63,    0,   64, 1042,    0,   65
  3952. ,   36,    0,   66,   37,    0,  573,   69,    0,  219, 1042
  3953. ,    0,  262,  514, 1042,    0,  515, 1042,    0,   39, 1042
  3954. ,    0,   40, 1042,    0,   41, 1042,    0,  566, 1330,    0
  3955. ,  329,   42, 1042,    0,  151, 1042,    0,   43, 1042,    0
  3956. ,  396, 1042,    0,  617,  397,   44, 1042,    0,  516,  398
  3957. ,    0,  517,  400,    0,  262,  225,    0,  124,  262,    0
  3958. ,   50,  375,    0,   51,  126,    0,   49,   55,    0,   50
  3959. ,   56,    0,   51,   57,  520,    0,   58,   76,    0,   49
  3960. ,  662,   67,    0,   50,   68,   49,    0,   51,  601,   69
  3961. ,   50,    0,   51,  281,    0,  885,  234, 1402,    0,   70
  3962. ,  401, 1402,    0,   62,  402,  244,    0,   34,   63,  403
  3963. ,    0,   64,  207,    0,   65,  209,    0,   66,  210,    0
  3964. ,   55,   67,  211,    0,   56,   68,   55,    0,  928,   57
  3965. ,   69,   56,    0,   58,   57,    0,   59,   58,    0,   60
  3966. ,   70,   59,  151, 1402,    0,   60,    2,    0,   61, 1402
  3967. ,    0,   62,   61,    0,  466,   63,   62,    0,   64,   63
  3968. ,    0,   66,   65,    0,   67,   66,    0,   68,   67,    0
  3969. ,   69,  475,   68, 1402,    0,  522, 1402,    0,   35,  523
  3970. ,    0,   36,  524,    0,   37,  525,    0,  528,   49,    0
  3971. ,  531,  112,   52,    0,  532,  220,    0,  102,   63,    0
  3972. ,   39,  302,   64,    0,   40, 1216,    0,   41,   65,    0
  3973. ,   42,   68,    0,  538,   69,    0,   36,  837,    0,  199
  3974. ,  115,    0,   40,  771,    0,  639,   34,    0,  640,   30
  3975. ,    0,  278,   35,    0,  907,   36,    0,  166,  102,    0
  3976. ,   98,  649,   42,    0,   62,  641,  245,    0,   63,  246
  3977. ,    0,   64,  642,    0,   65,   39,    0,   66,   40,    0
  3978. ,  896,  826,   67,   41,    0,   68,  405,    0,   70,  355
  3979. ,    0,  122,   44,    0,   65,  248,    0,  330,   42,    5
  3980. ,    0,   70,   10,    0,  277,  376,    0,  619,  262,    0
  3981. ,  850,   50,    0,  492,   51,    0,   85,   51,    0,   52
  3982. ,  235,    0,   55,   67,    0,   56,   68,    0,   57,   69
  3983. ,    0,  169,   58,    0,  602,   62,    0,  480,   65,    0
  3984. ,  357,   69,    0,  938,  170,    0,  851,   34,    0,  643
  3985. ,  283,    0,   34,  576,    0,  102,   34,    0,  939,   35
  3986. ,  217,    0,   36,   35,    0,   37,   36,    0,   39,  308
  3987. ,   38,    0,   40,   39,    0,   41,   40,    0,  924,   43
  3988. ,    0,  104,   44,    0,   35,  675,  453,    0,   36,   81
  3989. ,    0,  897,  375,  106,  252,    0,  102,  741,    0,   85
  3990. ,   51,  610,    0,  167,   46,    0,   39,  110,    0,   42
  3991. ,   56,    0,   43,   59,    0,   61,  262,  284,    0,   62
  3992. ,   47,    0,   34,   63,    0,   70,   48,    0,  940,   36
  3993. ,    0,   50,   49,    0,   51,   50,    0,   36,   53,    0
  3994. ,   37,   54,    0,   56,   55,    0,   57,   56,    0,  811
  3995. ,   58,   57,    0,   59,   58,    0,   60,   59,    0,  339
  3996. ,   60,    0,   62,   61,    0,   63,   62,    0,  102,   64
  3997. ,   63,    0,   39,   96,   64,    0,   40,   65,    0,  695
  3998. ,   41,   66,   65,    0,   67,   66,    0,   68,   67,    0
  3999. ,   42,   69,   68,    0,  649,   69,    0,   43,   70,    0
  4000. ,  651,   70,    0,  406,  102,    0,   49,   41,    0,   52
  4001. ,  714,    0,  375,   68,    0,  126,   69,    0,   96,   34
  4002. ,    0,   34,  407,    0,  409,  151,    0,  577,  136,    0
  4003. ,   50,  411,    0,   51, 1366,   71,    0,   52,  413,    0
  4004. ,  838, 1366,    0,  414,  253,    0,   56,   49,    0,   57
  4005. ,   50,    0,   58,   51,    0,   60,  169,    0,   61,  415
  4006. ,    0,  217,  408,   64,  623,    0,   65,  416,   39,    0
  4007. ,   66,   40,    0,   67,  417,   41,    0,   68,  348,    0
  4008. ,  708,   69,    0, 1366,   61,  304,    0,  102,   63,    0
  4009. ,   39,  418,   64,    0,   41,   40,   65,    0,   41,   66
  4010. ,    0,   42,   68,    0,  169,   14,    0,  676,  331,    0
  4011. ,  173,  359,    0,  677,   16,    0,  102,  611,    0,  566
  4012. ,  175,    0,  262,  277,    0,  772,  536,    0,  179,   50
  4013. ,    0,  180,   51,    0,  181,   13,    0,  182,   14,    0
  4014. ,  184,   52,    0,  493,  185,    0,  187,  332,    0,   50
  4015. ,   49,   55,    0,   51,   50,   56,    0,   51,   57,    0
  4016. ,  192,   59,   15,    0,   52,  193,   60,    0,   35,   63
  4017. ,    0,   36,   64,    0,   55,   66,    0,  864,   56,   67
  4018. ,    0,   57,   68,   17,    0,   58,   69,  161,    0,   59
  4019. ,  678,    0,   63,   83,    0,   70,  167,  257,    0,  102
  4020. ,  422,    0,  920,   41,  423,    0,   49,  425,    0,   42
  4021. ,   50,  426,    0,   51,  427,    0,   43,  429,    0,   44
  4022. ,  431,    0,  432,  195,    0,  316,  433,  196,    0,  434
  4023. ,  197,    0,  827,  696,  436,    0,  231,  442,    0,  443
  4024. ,   20,    0,  169,  487,    0,  679,  445,    0,  654,  137
  4025. ,    0,  865,  170,   23,    0,  709,  198,    0,  682,   25
  4026. ,    0,  217,  710,  683,   26,    0,  684,  102,    0,  685
  4027. ,   39,    0,   40,  199,    0,   49,   41,    0,   52,   43
  4028. ,    0,  448,   36,    0,   64,   34,    0,   67,   30,    0
  4029. ,   68,   31,    0,  624,  201,    0,  202,  102,    0,  203
  4030. ,   39,   35,    0,   40,   36,    0,   41,   37,    0,   42
  4031. ,  101,    0,  579,   25,    0,  102,   27,    0, 1042,   39
  4032. ,    0,  698,   41,    0,  379,   44,    0, 1042,   28,    0
  4033. ,   44,   29,    0, 1042,   30,    0,   49,   31,    0,  333
  4034. ,  221,    0, 1042,   62,    0,  743,   34,   63,    0, 1042
  4035. ,   66,    0, 1042,   67,    0, 1042,   68,    0, 1042,  496
  4036. ,  537,   69,    0, 1289,   70,    0, 1042,  361,    0, 1289
  4037. ,  104,    0, 1042,   82,    0, 1042,   49,    0, 1042,   50
  4038. ,    0, 1042,  105,    0,  866,   35,  238,    0,  126,  106
  4039. ,    0,  800,   61,    0,  773,   63,    0,  921,   64,    0
  4040. ,   68,   49,    0,  282,   69,   50,    0,   70,  169,    0
  4041. ,  109,   32,    0,   39,  110,    0,  628,  495,    0,   50
  4042. ,   55,    0,   51,   42,   56,    0,   43,   59,    0,  815
  4043. ,   52,   60,    0,   55,   66,    0,   56,   67,    0,   57
  4044. ,   68,    0,   58,  538,   69,    0,  828,   61,    0,  169
  4045. ,  487,    0,  317,  286,    0,   34,  699,    0,  787,  700
  4046. ,    0,   50,  138,    0,  702,   39,    0,   57,   42,    0
  4047. ,  612,   59,    0,   60,   43,    0,  499,   44,    0,  500
  4048. ,   61,    0,  877,  102,  774,   63,    0,   39,   64,    0
  4049. ,   41,   65,    0,   42,  578,   68,    0,  126,   69,    0
  4050. ,  579,   34,    0,  225,  314,    0,  663,   37,    0,  867
  4051. ,  262,    0,  151,   42,    0, 1367,   44,    0,  498,   52
  4052. ,    0,  878,  500,    0,   49,  723,    0,   50,   55,    0
  4053. ,   51,   56,    0,  630,   57,    0,   52,   60,    0,   61
  4054. ,  307,    0,  744,   63,    0,   96,   64,    0,  812,   69
  4055. ,    0,  801,   46,    0,   65,  308,    0,   70,  539,    0
  4056. ,  929,  605,    0,   96,   81,    0,  510,   50,    0,   52
  4057. ,  178,    0,   62,   83,    0,   35,   96,   63,    0,   36
  4058. ,   64,    0,   39,   96,    0,  804,   34,    0,  318,  159
  4059. ,    0,  899,  151,    0,   56,  334,    0,   57,  335,    0
  4060. ,  277,  381,    0,  776,   52,    0,  900,  472,    0,  247
  4061. ,  382,    0,   35,  613,  557,    0,   36,  102,    0,   37
  4062. ,   39,    0,  478,   40,    0,  747,  457,    0,  384,   34
  4063. ,    0,  807,  147,    0,  200,  262,    0,  203,   35,    0
  4064. ,  278,   36,   35,    0,   37,   36,    0,   39,   38,    0
  4065. ,   40,   39,    0,   41,   40,    0,   42,   50,    0,  151
  4066. ,   51,   42,    0,   44,   52,    0,  758,   44,    0,   49
  4067. ,  501,   66,    0,   50,   67,   45,    0,   51,   68,    0
  4068. ,   52,   70,    0,  842,   57,    0,   58,   46,    0,   59
  4069. ,   46,    0,   50,   49,    0,  749,   51,   50,    0,  343
  4070. ,   51,    0,   54,   53,    0,   56,   55,    0,   57,   56
  4071. ,    0,   58,   57,    0,   59,   58,    0,   60,   59,    0
  4072. ,  727,  124,   61,  363,    0,   62,   61,    0,   63,   62
  4073. ,    0,   64,   63,    0,   35,   64,    0,   65,   36,    0
  4074. ,   66,   37,   65,    0,   67,   66,    0,   68,   67,    0
  4075. ,   69,  101,   68,    0, 1011,  102,  264,    0,  548,  336
  4076. ,   42,    0,  550,   43,    0,  104,  289,    0,  558,  487
  4077. ,    0,   39,  338,    0,  879,   41,    0,   42,   56,    0
  4078. ,   43,   59,  151,    0,   83,   61,    0,   35,   34,   63
  4079. ,    0,   36,   64,    0,   49,  545,   67,    0,   50,   68
  4080. ,    0,   85,   51,   69,    0,   40,   35,    0,   41,   36
  4081. ,    0,   42,  265,    0,  471,   61,    0,  214,   69,    0
  4082. ,  472,   70,    0,   51, 1370,    0,   52, 1370,    0,  262
  4083. ,  410,    0,   56,  411,    0,   57, 1366,  101,    0,  151
  4084. ,   58,    0,   60,  412,    0,   63, 1366,    0,   66,  414
  4085. ,    0,   69,  475,    0,  416,   39,  385,   35,    0,  476
  4086. ,   40,    0,   49,  417,   41,   37,    0,   50,  477,    0
  4087. ,   52,   43,    0,   55,   41,    0,   56,  478,    0,   64
  4088. ,  843,    0,   65,  102,    0,   66,   39,    0,   67, 1042
  4089. ,   40,    0,   68,   41,    0,   69,   49,    0,  931,   51
  4090. ,   42,    0,   70,  148,    0,  854,  419,  112,    0, 1042
  4091. ,   63,    0,  912,   64,    0, 1042,   35,    0,   65,   36
  4092. ,    0,   66,   37,    0, 1042,  386,   67,    0,  387,   70
  4093. ,    0,   35,  559,    0,  155,   39,  114,    0,   40,  115
  4094. ,    0, 1042,   41,  116,    0, 1042,  106,    0, 1042,   42
  4095. ,  117,    0, 1042,  421,    0, 1042,   43,  118,    0, 1042
  4096. ,  119,    0, 1042,   44,  120,    0,   34, 1042,    0,   39
  4097. , 1042,    0,   40, 1042,    0,   41, 1042,    0, 1264,   49
  4098. ,    0,   42,   50,    0, 1042,   51,  156,    0,   43, 1042
  4099. ,  151,    0,   44, 1042,   52,    0,  512,  124,    0,  546
  4100. ,  338,   96,    0,   35,   63,    0,   36,   64,    0,  932
  4101. ,   67,    0,  502,   68,   49,    0,  547,   69,   50,    0
  4102. ,   89,   51,    0,  124,  150,    0,   40,  870,  274,    0
  4103. ,   41,  583,    0,  698,  389,    0,   42,  426,   67,    0
  4104. ,  427,  390,   68,    0,  428,  479,  366,   69,    0,   43
  4105. ,  429,    0,  430,  151,    0,   44,  431,    0,  262,  433
  4106. ,    0,  435,  503,    0,  436,   34,    0,  125,  441,    0
  4107. ,  126,  585,    0,  444,   49,    0,  809,  504,   50,    0
  4108. ,  548,   51,    0,  810,  549,    0,  551,   52,  121,    0
  4109. ,  532,   35,    0,  533,   37,    0,   50,  266,    0,   51
  4110. ,  224,    0,   52,  446,    0,   61,  225,    0,   35,  102
  4111. ,   63,    0,   36,   64,    0,   37,   40,    0,   41,  627
  4112. ,   65,    0,   55,   66,    0,   56,   67,    0,   57,  586
  4113. ,   68,    0,   58,   69,    0,   34,   63,  587,    0,   65
  4114. ,   39,    0,   66,   40,    0,   67,   41,    0,  105,   42
  4115. ,    0,  734,   70,    0,   39,  159,    0,  588,  277,    0
  4116. ,  210,  291,    0,   65,  901,   39,    0,   66,   40,    0
  4117. ,   67,   41,  480,    0,   70,  659,    0,  816,  697,   44
  4118. ,  505,    0,  818,  481,  262,    0,  169,  151,    0,  496
  4119. ,   50,  125,    0,   51,  126,    0,   35,   96,    0,   36
  4120. ,   35,    0,   37,   36,    0,   50,  350,    0, 1044,  339
  4121. ,    0,   62,  124,    0, 1044,   63,    0,   27,   64,    0
  4122. ,  831, 1044,   35,    0,   65,   36,    0,   66,   37,    0
  4123. ,  170, 1044,   67,    0,  213,   68,    0,   62,  320,    0
  4124. ,  102,   64, 1044,    0,   39,  102,    0,  636,   40,   65
  4125. ,   39,    0,   41,   66,   40,    0,   67,   41,    0,   42
  4126. ,   69,    0,   42,  125,    0,   43,   70,  169,    0,   49
  4127. , 1044,   41,    0,   50, 1044,  170,    0,   51, 1044,    0
  4128. , 1044,   42,    0, 1044,   89,    0, 1044,  169,    0,   52
  4129. , 1044,   43,    0, 1044,   44,    0,   56, 1265,    0,   57
  4130. ,  704,    0,   58, 1044,    0,   59,   98,    0,   60, 1044
  4131. ,   90,    0,   61,   16,    0,   65,   35,    0,  881,   66
  4132. ,   36,    0,   67,   37,    0,  262,  127,  245,    0,  649
  4133. ,   42,    0,  832,  151,    0,  651,   43,    0,  340,  292
  4134. ,  262,    0,   50,   49,    0,   51,   50,    0,   51,  369
  4135. ,    0,  944,   52,    0,  638,  277,    0,   35,  248,  370
  4136. ,    0,   56,   49,    0,   57,   50,    0,   58,   51,    0
  4137. ,   61,   52,    0,   62,   61,    0,   63,   62,    0,   64
  4138. ,   63,    0,  494,   64,    0,   65,   39,    0,   66,  495
  4139. ,   65,    0,   67,   41,   66,    0,   68,   67,    0,   69
  4140. ,   68,  267,    0,   42,  214,   69,    0,   43,   70,    0
  4141. ,  699,   61,  240,    0,  779,   62,    0,   38,   63,    0
  4142. ,   39,   64,    0,   41,   65,    0,   67,  226,    0,   42
  4143. ,   68,  227,    0,   43,  151,    0,  728,   34,    0,  660
  4144. ,   41,    0,  496,   50,    0,  482,   62,    0,   35,  293
  4145. ,   64,    0,   37,   65,    0,  410,   70,    0,   51,   42
  4146. ,    0,  169,   91,    0,   34,   92,    0,   49,   55,   41
  4147. ,    0,   50,   56,    0,   51,   57,    0,   58,   42,    0
  4148. ,   59,  483,    0,   64,   34,    0,   54,   65,    0,   55
  4149. ,   67,    0,   56,   68,    0,   57,   69,    0,   60,   70
  4150. ,    0,  316,   61,    0,  833,  407,   62,    0,  871,  408
  4151. ,   64,    0,   65,   36,    0,   66,   37,    0,   68,   49
  4152. ,    0, 1370,   69,   50,    0, 1112,   35,    0,  420, 1112
  4153. ,   37,    0,  891,  412,    0,  414,   40,    0,  415,   44
  4154. ,    0,  416,  166,  102,    0,  417,   40,    0, 1366,  553
  4155. ,   44,    0,   50,   75,    0,   52,  321,    0,  419,  499
  4156. ,   52,    0,  500,   61,    0,  753,   34,   63,    0,  591
  4157. ,   65,    0,  102,  819,    0,   40,  152,    0,   71,   67
  4158. ,    0,   35,  298,    0,  169,  421,    0,   39,   77,    0
  4159. ,   42,   50,    0,   44,   52,    0,   49,   67,    0,   50
  4160. ,   68,  268,    0,   51,   69,    0,   65,  171,    0,  882
  4161. ,  629,   66,    0,   68,  228,    0,  883,  630,   69,  172
  4162. ,    0,  934,  424,    0,   49,  425,    0,   50,  375,  426
  4163. ,    0,   51,  126,  427,    0,  428,  175,    0,  429,  176
  4164. ,    0,  432,  177,    0,  127,  433,  178,    0,  434,  506
  4165. ,    0,  639,  436,    0,  437,  484,    0,  438,  159,    0
  4166. ,  640,  439,    0,  443,   34,    0,   51,  179,    0,  445
  4167. ,  181,    0,  446,  182,    0,  447,   52,  183,    0,  717
  4168. ,  187,    0,   35,  102,  188,    0,   36,   39,  189,    0
  4169. ,   37,   40,  190,    0,   41,  191,    0,  780,   42,    0
  4170. ,  714,   43,  192,    0,   44,  194,    0,  763,   63,    0
  4171. ,  642,  844,    0,  102,   34,    0,  834,   39,    0,   34
  4172. ,  197,    0,  820,   35,  563,    0,   36,  102,    0,   37
  4173. ,   39,    0,  631,  554,   44,    0,  151,  311,    0,   39
  4174. ,  102,    0,   41,   40,    0,   49,   67,    0,   50,   68
  4175. ,    0,   51,   69,    0,  408,   25,    0,  410,  301,    0
  4176. ,   62,  262,    0,   63,  608,    0,  566,   69,    0,   70
  4177. ,  151,    0,   96,  201,    0,  202,   78,    0,  676,   50
  4178. ,    0,  151,   51,    0,  515,  564,    0,  159,   62,   94
  4179. ,    0,  736,   65,    0,   49,   66,    0,   50,   49,   67
  4180. ,    0,   51,   50,   68,    0,   51,   69,  172,    0,  765
  4181. ,   13,    0,   52,   70,    0,   57,  510,    0,   59,   98
  4182. ,    0,  858,   60,  204,    0,  124,   61,   16,    0,  519
  4183. ,   62,    0,  278,  159,    0,  821,  766,  180,    0,   35
  4184. ,  188,    0,   36,  275,  189,    0,   37,  190,    0,  614
  4185. ,  192,    0,  859,  193,    0,  277,  194,    0,  524,   35
  4186. ,    0,  525,   36,    0,  526,   37,    0,  792,  507,    0
  4187. ,  532,  102,    0,  533,   40,    0,  478,   41,    0,  644
  4188. ,   43,    0,  102,   34,    0,   40,  645,    0,  679,   43
  4189. ,    0,  681,  209,    0,  893,  683,    0,  685,   38,    0
  4190. ,  241,   44,    0,   49,  324,    0,  294,   27,    0,   51
  4191. ,  213,    0,  884,   63,    0,   62,   47,    0,   67,   30
  4192. ,    0,   68,   31,    0,   70,   48,    0)  ;
  4193.         --| Actions to perform for all combinations of parser
  4194.         --| states and input tokens.
  4195.         -- NYU Reference Name: ACTION_TABLE1
  4196.  
  4197.     ActionTableTwo :
  4198.         constant array (ActionTableTwoRange)
  4199.         of GC.ParserInteger :=
  4200.          (    0,    0,    0,    0,27509,27510,    0,    0,    0,    0
  4201. , 5511,    0,    0,    0,    0,    0,154044,    0,    0,231061
  4202. ,    0,    0,    0,71536,71537,    0,33032,    0,    0,    0
  4203. ,132054,    0,    0,    0,    0,71548,    0,    0,71551,71552
  4204. ,    0,    0,71555,71556,    0,    0,71559,71560,71561,    0
  4205. ,    0,71564,71565,71566,71567,71568,    0,    0,71571,    0
  4206. ,    0,    0,66074,    0,    0,231107,231108,    0,148595,    0
  4207. ,    0,    0,    0,    0,66086,    0,170607,253123,    0,    0
  4208. ,    0,    0,    0,    0,    0,    0,    0,198123,    0,    0
  4209. ,    0,242135,    0,    0,    0,55105,    0,55107,55108,    0
  4210. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,253155
  4211. ,253156,253157,    0,    0,    0,    0,    0,    0,    0,    0
  4212. ,    0,    0,181655,    0,    0,181658,    0,    0,    0,    0
  4213. ,    0,    0,    0,    0,165164,110155,    0,    0,    0,    0
  4214. ,253186,253187,253188,    0,198180,253191,    0,231189,253194,    0
  4215. ,253196,    0,    0,    0,    0,    0,49665,    0,    0,    0
  4216. ,    0,71674,    0,    0,170695,    0,    0,264215,    0,280720
  4217. ,264218,    0,    0,132197,231216,231217,231218,    0,    0,55189
  4218. ,    0,    0,    0,    0,    0,    0,121208,    0,    0,    0
  4219. ,    0,    0,77206,    0,    0,    0,    0,    0,88214,    0
  4220. ,220240,132225,132226,132227,132228,    0,    0,    0,55218,    0
  4221. ,132234,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4222. ,    0,    0,    0,    0,    0,49734,    0,    0,    0,    0
  4223. ,    0,    0,    0,    0,    0,82750,159765,    0,71751,    0
  4224. ,    0,    0,    0,    0,    0,    0,    0,99265,    0,    0
  4225. ,253296,253297,253298,132277,    0,    0,253302,    0,    0,    0
  4226. ,    0,    0,    0,11265,    0,27770,    0,    0,    0,    0
  4227. ,    0,    0,    0,253319,    0,253321,253322,    0,253324,253325
  4228. ,253326,    0,253328,    0,286336,    0,    0,    0,    0,    0
  4229. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4230. ,    0,    0,    0,    0,33310,49814,    0,    0,    0,    0
  4231. ,33316,231353,132336,    0,    0,    0,    0,    0,132342,    0
  4232. ,    0,    0,209360,    0,    0,    0,    0,132351,132352,132353
  4233. ,    0,132355,    0,    0,    0,132359,132360,132361,    0,231381
  4234. ,132364,132365,132366,    0,132368,    0,33352,132371,291901,    0
  4235. ,    0,    0,    0,    0,    0,33361,33362,33363,33364,33365
  4236. ,33366,    0,    0,    0,33370,33371,    0,    0,    0,    0
  4237. ,    0,    0,121394,71886,    0,132399,    0,    0,132402,    0
  4238. ,    0,    0,    0,    0,    0,198421,    0,291940,    0,    0
  4239. ,121412,    0,121414,    0,    0,    0,    0,    0,    0,22403
  4240. ,27905,    0,    0,    0,    0,    0,    0,115928,    0,    0
  4241. ,    0,    0,11414,    0,    0,55425,    0,    0,  418,    0
  4242. ,    0,    0,    0,    0,    0,    0,225967,    0,286480,198465
  4243. ,    0,    0,    0,22437,115955,    0,    0,253483,    0,    0
  4244. ,    0,    0,    0,    0,    0,    0,291999,    0,    0,225990
  4245. ,225991,    0,    0,    0,    0,    0,225997,    0,    0,    0
  4246. ,    0,22465,22466,22467,22468,    0,    0,22471,    0,    0
  4247. ,    0,33477,    0,171004,281025,165505,49985,    0,    0,    0
  4248. ,    0,    0,    0,33489,    0,    0,231528,264535,    0,    0
  4249. ,    0,    0,    0,    0,253540,    0,    0,    0,    0,    0
  4250. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4251. ,    0,    0,    0,198549,226055,    0,    0,    0,242562,    0
  4252. ,    0,    0,    0,    0,    0,    0,242570,    0,242572,    0
  4253. ,242574,242575,17035,    0,    0,    0,    0,242581,    0,    0
  4254. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,242593
  4255. ,    0,187585,72065,242597,    0,242599,    0,    0,    0,242603
  4256. ,    0,    0,242606,    0,    0,    0,    0,    0,39075,    0
  4257. ,39077,    0,22576,22577,22578,    0,    0,    0,    0,    0
  4258. ,    0,242625,    0,    0,242628,    0,    0,    0,    0,    0
  4259. ,    0,    0,    0,    0,    0,    0,22600,22601,    0,39106
  4260. ,    0,    0,    0,    0,    0,  605,  606,39114,242652,    0
  4261. ,    0,    0,    0,    0,    0,    0,242660,    0,    0,    0
  4262. ,    0,    0,    0,    0,165654,231667,    0,231669,231670,    0
  4263. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4264. ,    0,33647,209680,    0,    0,    0,    0,    0,    0,    0
  4265. ,    0,    0,    0,    0,    0,    0,259203,281208,149185,    0
  4266. ,    0,    0,    0,    0,33670,    0,    0,    0,    0,    0
  4267. ,    0,    0,    0,    0,    0,    0,    0,198713,    0,    0
  4268. ,    0,    0,39189,    0,    0,39192,    0,292240,    0,259236
  4269. ,259237,    0,242736,242737,242738,110715,    0,    0,    0,    0
  4270. ,    0,88717,    0,    0,    0,  705,149233,    0,    0,    0
  4271. ,    0,39218,    0,    0,    0,39222,116237,    0,259265,    0
  4272. ,259267,259268,    0,204260,259271,275775,    0,259274,    0,    0
  4273. ,    0,    0,    0,39240,    0,    0,242780,    0,    0,    0
  4274. ,    0,    0,242786,242787,    0,242789,242790,242791,242792,242793
  4275. ,    0,242795,242796,242797,242798,    0,    0,    0,    0,    0
  4276. ,    0,    0,253808,242807,    0,    0,    0,    0,    0,242813
  4277. ,    0,    0,    0,    0,    0,    0,    0,    0,204315,    0
  4278. ,    0,    0,    0,    0,    0,    0,    0,    0,242832,242833
  4279. ,242834,259338,    0,    0,281345,    0,50305,    0,    0,    0
  4280. ,    0,    0,259349,259350,    0,259352,    0,    0,    0,    0
  4281. ,165840,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4282. ,    0,    0,    0,    0,55834,    0,    0,    0,    0,259376
  4283. ,259377,259378,    0,55843,    0,259382,    0,    0,198874,    0
  4284. ,    0,132865,    0,    0,    0,    0,    0,    0,149375,    0
  4285. ,    0,    0,    0,259400,259401,259402,    0,259404,259405,259406
  4286. ,259407,259408,    0,160392,259411,99883,    0,    0,    0,    0
  4287. ,    0,    0,72385,    0,83389,    0,    0,    0,    0,    0
  4288. ,    0,    0,    0,171414,    0,    0,    0,    0,39395,39396
  4289. ,39397,    0,    0,    0,    0,    0,    0,143923,    0,    0
  4290. ,    0,    0,    0,    0,    0,    0,143932,231949,    0,    0
  4291. ,    0,    0,    0,    0,    0,    0,264964,    0,39425,39426
  4292. ,39427,39428,99940,    0,39431,    0,    0,    0,    0,39436
  4293. ,    0,    0,    0,    0,    0,    0,    0,    0,297992,    0
  4294. ,    0,    0,    0,    0,    0,    0,298000,    0,    0,    0
  4295. ,    0,    0,    0,    0,    0,265003,    0,    0,    0,209997
  4296. ,    0,    0,210000,    0,    0,    0,    0,17470,    0,265017
  4297. ,    0,    0,    0,265021,    0,221015,    0,    0,149505,    0
  4298. ,    0,    0,177014,    0,    0,    0,    0,    0,    0,    0
  4299. ,133014,39498,    0,    0,    0,199031,    0,    0,    0,    0
  4300. ,    0,    0,39509,    0,    0,    0,    0,    0,83523,    0
  4301. ,    0,    0,265060,    0,    0,    0,    0,    0,    0,    0
  4302. ,    0,188055,    0,    0,188058,    0,    0,149554,    0,39536
  4303. ,39537,    0,    0,    0,    0,39542,    0,    0,    0,116560
  4304. ,    0,83556,    0,259590,259591,149572,    0,149574,    0,    0
  4305. ,259597,    0,    0,39560,39561,    0, 1056,39564,39565,39566
  4306. ,39567,39568,    0,    0,39571,    0,    0,    0,    0,    0
  4307. ,83585,83586,    0,    0,    0,    0,    0,50586,    0,    0
  4308. ,    0,83596,    0,    0,    0,    0,    0,166117,    0,    0
  4309. ,    0,    0,    0,    0,    0,    0,50605,    0,    0,    0
  4310. ,    0,    0,    0,    0,17607,    0,    0,226648,    0,    0
  4311. ,221150,    0,    0,    0,160643,    0,    0,    0,    0,    0
  4312. ,    0,    0,    0,    0,    0,    0,    0,149654,    0,188163
  4313. ,72643,133155,133156,133157,226675,    0,17639,    0,    0,265187
  4314. ,    0,    0,    0,83658,    0,    0,160675,160676,    0,    0
  4315. ,    0,    0,78166,    0,83669,    0,    0,    0,    0,    0
  4316. ,    0,    0,    0,    0,    0,12167,    0,133191,100186,100187
  4317. ,133194,    0,133196,    0,    0,276225,    0,160706,160707,160708
  4318. ,    0,83696,    0,83698,100202,160714,    0,    0,12190,265237
  4319. ,265238,    0,    0,    0,    0,72708,83711,    0,    0,    0
  4320. ,188234,72714,    0,    0,    0,    0,    0,    0,39715,    0
  4321. ,    0,83726,83727,    0,    0,    0,83731,    0,270767,    0
  4322. ,    0,    0,12224,122245,    0,    0,122248,12229,12230,12231
  4323. ,12232,12233,    0,12235,    0,    0,12238,    0,39745,    0
  4324. ,    0,    0,12244,    0,    0,    0,    0,    0,    0,    0
  4325. ,    0,100269,    0,    0,    0,    0,    0,    0,    0,    0
  4326. ,160789,    0,122284,    0,    0,    0,122288,182800,    0,    0
  4327. ,    0,298325,133296,    0,    0,188309,72789,    0,133302,    0
  4328. ,94797,    0,254328,    0,    0,    0,    0,    0,    0,    0
  4329. ,    0,133315,133316,160822,    0,133319,133320,133321,133322,    0
  4330. ,133324,133325,    0,    0,    0,    0,    0,    0,188342,72822
  4331. ,160839,    0,    0,    0,100332,    0,    0,    0,    0,    0
  4332. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,72842
  4333. ,188364,    0,    0,    0,    0,72848,    0,188371,72851,    0
  4334. ,122362,    0,    0,    0,    0,    0,    0,122369,122370,    0
  4335. ,39857,39858,    0,122375,122376,    0,    0,254403,276408,    0
  4336. ,    0,83876,122384,122385,259911,    0,    0,    0,188402,56379
  4337. ,226911,    0,39879,39880,    0,    0,    0,    0,39885,39886
  4338. ,    0,    0,    0,171914,39891,171916,    0,    0,287440,254435
  4339. ,    0,254437,    0,    0,    0,    0,100414,    0,    0,    0
  4340. ,    0,    0,    0,100421,100422,100423,83921,    0,83923,    0
  4341. ,100428,    0,    0,    0,83929,83930,83931,    0,    0,254465
  4342. ,254466,    0,254468,    0,17927,254471,    0,    0,254474,    0
  4343. ,254476,    0,232474,    0,281985,    0,    0,    0,    0,100457
  4344. ,160969,    0,    0,    0,    0,    0,    0,171978,    0,    0
  4345. ,72963,    0,    0,    0,    0,    0,    0,193992,171989,171990
  4346. ,    0,171992,    0,    0,    0,    0,    0,    0,45476,45477
  4347. ,    0,    0,    0,12475,    0,    0,    0,    0,    0,188513
  4348. ,    0,    0,72995,    0,72997,172016,172017,172018,    0,50998
  4349. ,    0,172022,254538,    0,    0,243539,    0,    0,45506,45507
  4350. ,45508,282052,    0,    0,254550,    0,254552,    0,172039,    0
  4351. ,    0,    0,73025,    0,    0,    0,    0,172048,73031,    0
  4352. ,    0,73034,84037,    0,    0,    0,    0,    0,    0,    0
  4353. ,254576,254577,254578,    0,84049,    0,254582,    0,    0,    0
  4354. ,40047,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4355. ,    0,    0,    0,254599,254600,254601,254602,    0,    0,254605
  4356. ,254606,254607,254608,    0,    0,    0, 1566,    0,    0, 1569
  4357. ,    0,271120,    0,    0,    0,    0,    0,    0,    0,    0
  4358. ,    0,45589,    0,    0,    0,    0,    0,    0,    0,    0
  4359. ,    0,    0,    0,    0,    0,    0,73109,    0,    0,    0
  4360. ,    0,    0,    0,122625,    0,265653,    0,    0,45616,    0
  4361. ,    0,177643,    0,    0,45622,89631,100634,    0,    0,    0
  4362. ,    0,    0,    0,73136,73137,    0,100644,    0,    0,    0
  4363. ,    0,133655,45640,45641,45642,    0,45644,45645,    0,    0
  4364. ,    0,    0,73155,73156,    0,    0,73159,    0,73161,73162
  4365. ,    0,    0,73165,73166,73167,    0,    0,    0,73171,    0
  4366. ,    0,122683,    0,    0,    0,    0,    0,172198,    0,    0
  4367. ,    0, 1671,    0,40180,    0,40182,    0,    0,    0,    0
  4368. , 1680,    0,    0,    0,    0,260232,    0,    0,    0,    0
  4369. ,    0,133715,    0,260240,    0,56705,    0,    0,232740,40206
  4370. ,    0,    0,    0,    0,    0,    0,    0,23711,    0,    0
  4371. ,    0,    0,    0,100731,    0,    0,    0,    0,    0,    0
  4372. ,    0,    0,    0,205260,227265,    0,    0,23731,    0,    0
  4373. ,    0,    0,    0,    0,    0,    0,    0,    0,34744,    0
  4374. ,    0,    0,161271,161272,    0,    0,    0,23751,    0,    0
  4375. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4376. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4377. ,    0,    0,227313,    0,    0,    0,18279,    0,    0,    0
  4378. ,    0,    0,227323,    0,    0,    0,161315,161316,161317,    0
  4379. ,    0,161320,    0,    0,    0,    0,    0,    0,    0,    0
  4380. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4381. ,    0,    0,    0,    0,    0,    0,    0,161346,161347,161348
  4382. ,    0,    0,161351,    0,    0,161354,    0,161356,    0,    0
  4383. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4384. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4385. ,40357,    0,    0,    0,    0,    0,    0,    0,    0,67871
  4386. ,    0,216400,    0,    0,    0,    0,    0,    0,161397,    0
  4387. ,    0,    0,    0,    0,95391,265923,    0,155905,    0,    0
  4388. ,    0,40388,    0,155911,40391,    0,155914,    0,155916,    0
  4389. ,    0,    0,    0,95410,    0,    0,    0,    0,    0,    0
  4390. ,161429,    0,    0,    0,    0,    0,    0,    0,    0,265957
  4391. ,    0,    0,    0,210951,    0,    0,    0,    0,    0,210957
  4392. ,188954,    0,    0,    0,238467,238468,    0,161456,161457,    0
  4393. ,    0,    0,161461,161462,161463,89951,161465,265985,    0,265987
  4394. ,265988,    0,161471,    0,161473,161474,    0,161476,265996,    0
  4395. ,    0,    0,    0,161482,260501,161484,161485,161486,161487,161488
  4396. ,    0,155989,    0,    0,    0,    0,    0,150494,84483,    0
  4397. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4398. ,    0,    0,    0,    0,172515,    0,172517,    0,156016,    0
  4399. ,    0,40498,    0,    0,156022,40502,    0,    0,    0,    0
  4400. ,84515,    0,    0,156031,    0,    0,    0,    0,    0,    0
  4401. ,266058,156039,    0,    0,    0,    0,    0,    0,    0,    0
  4402. ,    0,    0,266070,    0,    0,172556,    0,    0,288080,    0
  4403. ,    0,84546,84547,    0,238577,238578,84551,    0,    0,84554
  4404. ,    0,84556,    0,62554,    0,    0,    0,    0,266096,266097
  4405. ,266098,227592,    0,    0,    0,24059,282607,    0,    0,24063
  4406. ,35066,24065,    0,    0,    0,    0,172597,    0,    0,    0
  4407. ,    0,266119,266120,266121,266122,    0,266124,266125,266126,    0
  4408. ,    0,    0,277132,266131,    0,    0,282637,172618,    0,    0
  4409. ,    0,    0,    0,    0,    0,    0,    0,    0,172629,    0
  4410. ,    0,    0,    0,84618,    0,    0,101124,    0,    0,24113
  4411. ,    0,    0,101130,    0,    0,    0,101134,101135,145144,    0
  4412. ,    0,    0,73635,73636,73637,172656,    0,    0,    0,    0
  4413. ,101148,    0,    0,    0,    0,    0,216675,216676,216677,    0
  4414. ,172671,    0,    0,    0,172675,    0,    0,84662,    0,172680
  4415. ,172681,    0,73665,    0,    0,    0,    0,    0,73671,194694
  4416. ,172691,73674,183695,73676,    0,84680,    0,    0,216707,    0
  4417. ,    0,84686,    0,84688,    0,216714,84691,216716,    0,    0
  4418. ,    0,    0,    0,    0,95701,    0,    0,    0,95705,95706
  4419. ,    0,    0,    0,    0,101212,    0,    0,    0,40705,    0
  4420. ,40707,40708,101220,271752,    0,    0,    0,    0,    0,    0
  4421. , 7711,    0,    0,    0,183747,183748,    0,    0,    0,95736
  4422. ,    0,    0,95739,95740,    0,73738,    0,    0,95745,    0
  4423. ,    0,    0,    0,    0,211272,    0,73749,150764,    0,    0
  4424. ,    0,    0,    0,    0,    0,    0,    0,183780,73761,    0
  4425. ,216789,101269,    0,123275,    0,222295,260803,    0,    0, 7760
  4426. ,    0,    0,    0,73776,    0,    0,    0,    0,95785,    0
  4427. ,    0,95788,    0,95790,95791,95792,95793,216816,    0,    0
  4428. ,    0,73794,    0,    0,95801, 2285,73799,73800,    0,    0
  4429. ,260837,73804,    0,    0,    0,    0,    0,216836,73811,90315
  4430. ,216839,216840,    0,216842,    0,216844,216845,216846,216847,216848
  4431. ,    0,68323,    0,    0,    0,    0,    0,    0,    0,260866
  4432. ,260867,    0,101340,    0,    0,    0,101344,    0,101346,    0
  4433. ,    0,    0,    0,101351,    0,101353,101354,101355,101356,101357
  4434. ,    0,    0,    0,216882,    0,    0, 2346, 2347,    0,    0
  4435. ,    0, 2351,    0,    0,    0,101373,    0,    0,    0,    0
  4436. ,    0,    0,51871,    0,106883,    0,    0,    0,    0,    0
  4437. ,    0,112391,    0,    0,    0,101393,101394,112397,183911,    0
  4438. ,112400,24385,    0,183916,    0,    0,    0,    0,    0,    0
  4439. ,    0,260938,233434,    0,    0,    0,106915,106916,106917,68411
  4440. ,    0,    0,260949,    0,    0,    0,    0,    0,    0,    0
  4441. ,73923,    0,    0, 2413,    0,    0,    0,    0,    0,    0
  4442. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4443. ,260977,260978,106951,    0,    0,    0,    0,106956,    0,    0
  4444. ,    0,13443,73955,    0,73957,101463,    0,249992,    0,189483
  4445. ,249995,    0,260999,261000,261001,    0,    0,261004,261005,    0
  4446. ,    0,261008,    0,    0,261011,    0,    0,189501,    0,    0
  4447. ,95987,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4448. ,    0,73994,    0,73996,    0,    0,    0,156515,156516,156517
  4449. ,    0,217030,217031,    0, 2494,    0,    0,    0,217037,107018
  4450. ,    0,    0, 2502,    0,    0,13507,    0,    0,    0,13511
  4451. ,107029,    0,13514,    0,    0,    0,    0,156545,156546,156547
  4452. ,156548,    0,107041,156551,    0,    0,156554,    0,    0,    0
  4453. ,    0,239074,    0,239076,    0,    0,    0,    0,107057,107058
  4454. ,    0,    0,    0,107062,239087,    0,239089,    0,    0,    0
  4455. ,    0,    0,    0,    0,    0,13557,74069,    0,    0,    0
  4456. ,107079,    0,    0,107082,    0,107084,    0,    0,    0,    0
  4457. ,239113,239114,    0,239116,    0,239118,    0,266625,239121,    0
  4458. ,239123,    0,    0,    0,    0,74098,239129,    0,239131,74102
  4459. ,156618,129114,    0,    0,    0,118116,118117,    0,178630,    0
  4460. ,    0,156629,    0,    0,    0,178637,    0,74120,    0,    0
  4461. ,    0,74124,74125,74126,    0,    0,13618,    0,    0,13621
  4462. ,13622,13623,    0,    0,118145,    0,    0,118148,156656,    0
  4463. ,    0,13633,13634,    0,    0,118156,    0,13639,13640,13641
  4464. ,13642,    0,13644,    0,    0,    0,    0,156675,156676,13651
  4465. ,112670,    0,156680,156681,156682,    0,156684,156685,156686,156687
  4466. ,156688,112681,    0,156691,    0,    0,    0,24671,    0,    0
  4467. ,    0,    0,    0,    0,    0,30180,118197,    0,    0,    0
  4468. ,    0,    0,    0,68695,107203,    0,    0,    0,    0,    0
  4469. ,    0,    0,    0,    0,    0,    0,    0,118218,    0,    0
  4470. ,    0,    0,    0,    0,173235,    0,    0,272256,118229,    0
  4471. ,    0,244755,    0,    0,    0,    0,107235,107236,107237,    0
  4472. ,    0,    0,    0,    0,189758,    0,    0,    0,    0,283280
  4473. ,250275,250276,250277,    0,255780,118256,    0,118258,    0,    0
  4474. ,    0,118262,    0,184276,    0,    0,107265,    0,107267,107268
  4475. ,118271,118272,    0,118274,    0,    0,156784,    0,    0,118280
  4476. ,    0,    0,250307,    0,118285,118286,    0,    0,    0,250314
  4477. ,118291,250316,    0,134797,    0,    0,    0,244821,    0,    0
  4478. ,    0,    0,    0,    0,134808,    0,    0,    0,    0,250334
  4479. ,    0,162320,    0,    0,    0,    0,    0,184330,107317,    0
  4480. ,    0,184334,    0,    0,    0,    0,    0,    0,41315,41316
  4481. ,    0,    0,184345,    0,    0,    0,    0,    0,261365,    0
  4482. ,184353,    0,101840,299877,    0,    0,123848,    0,    0,    0
  4483. ,107349,    0,    0,250378,    0,    0,    0,129360,41345,41346
  4484. ,41347,41348,    0,    0,    0,    0,    0,41354,    0,    0
  4485. ,    0, 2851,    0,68865,    0,    0,    0,107376,107377,107378
  4486. ,    0,118382,    0,    0,118385,    0,    0,    0,96385,    0
  4487. ,    0,    0,    0,    0,    0,107394,107395,    0,    0,    0
  4488. ,    0,107400,    0,    0,    0,107404,107405,107406,107407,    0
  4489. ,    0,    0,107411,    0,250439,250440,250441,250442,    0,    0
  4490. ,250445,250446,250447,250448,    0,    0,    0,    0,    0,    0
  4491. ,    0,41418,    0,    0,    0,    0,    0,    0,    0,178951
  4492. ,    0,    0,41429,    0,    0,    0,    0,    0,    0,    0
  4493. ,    0,    0,123954,    0,123956,    0,    0,    0,    0,299993
  4494. ,299994,    0,228483,233985,    0,    0,    0,    0,    0,41456
  4495. ,    0,41458,123974,    0,    0,    0,217495,    0,    0,217498
  4496. ,    0,    0,41469,    0,41471,41472,41473,41474,41475,41476
  4497. ,    0,    0,41479,    0,    0,    0,228517,41484,41485,41486
  4498. ,41487,41488, 8483,    0,41491,    0,    0,    0,    0,201025
  4499. ,    0,234033,    0,    0,    0,    0,91012,    0,91014,    0
  4500. ,    0,    0,    0,    0,228545,    0,228547,228548,    0,    0
  4501. ,228551,    0,    0,228554,    0,228556,    0,    0,    0,    0
  4502. ,    0,    0,217561,    0,    0,    0,    0,25031,    0,    0
  4503. ,    0,    0,124054,    0,234076,    0,    0,    0,    0,    0
  4504. ,223080,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4505. ,    0,    0,    0,    0,    0,    0,228597,    0,    0,    0
  4506. ,    0,    0,    0,    0,30569,223105,    0,47075,47076,47077
  4507. ,    0,    0,113092,    0,113094,    0,    0,228618,91094,    0
  4508. ,    0,    0,    0,    0,52593,    0,19589,41594,    0,    0
  4509. ,    0,19594,    0,19596,    0,    0,    0,47105,47106,47107
  4510. ,47108,    0,    0,47111,    0,    0,    0,    0,261655,    0
  4511. ,    0,261658,    0,    0,    0,228656,228657,228658,    0,179151
  4512. ,    0,228662,272671,173654,    0,    0,    0,    0,    0,    0
  4513. ,228671,    0,    0,228674,228675,228676,    0,    0,228679,228680
  4514. ,228681,228682,    0,228684,228685,228686,228687,228688,    0,    0
  4515. ,228691,    0,    0,    0,    0,    0,    0,129680,    0,    0
  4516. ,    0,    0,    0,    0,    0,    0,    0,    0,41675,    0
  4517. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4518. ,    0,47189,    0,    0,36190,    0,    0,    0,124210,    0
  4519. ,300244,300245,    0,    0,    0,    0,    0,212235,    0,179231
  4520. ,184733,    0,212240,    0,    0,    0,    0,    0,47216,47217
  4521. ,47218,    0,    0,    0,    0,    0,    0,    0,124240,    0
  4522. ,294773,    0,    0,    0,    0,    0,52735,19730,    0,    0
  4523. ,    0,135255,    0,135257,47242,    0,47244,47245,47246,47247
  4524. ,47248,228782,    0,228784,228785,228786,    0,151774,    0,63760
  4525. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4526. ,    0,    0,    0,    0,    0,201301,    0,    0,    0,201305
  4527. ,234312,    0,    0,234315,    0,    0,217815,    0,    0,217818
  4528. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,146315
  4529. ,    0,    0,    0, 8794,223334,    0,    0,    0,    0,    0
  4530. ,    0,    0, 8803, 8804,    0,    0,    0,    0,    0,    0
  4531. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4532. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4533. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,256385
  4534. ,250885,25345,217881,250888,    0,    0,    0,    0,    0,    0
  4535. ,    0,250896,250897,    0,    0,    0,    0,    0,    0,    0
  4536. ,283911,    0,    0,52872,    0,    0,    0,250912,52877,    0
  4537. ,    0,19874,    0,    0,    0,    0,    0,    0,    0,    0
  4538. ,    0,    0,250927,    0,    0,    0,19889,    0,    0,    0
  4539. , 8891,    0,    0,239936,    0,    0,    0,    0,146424,    0
  4540. ,    0,    0,    0,    0,    0,    0,250951,    0,    0,    0
  4541. ,19913,    0,201448,    0,    0,19918,41923,    0,    0,    0
  4542. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4543. ,    0,162960,    0,    0,    0,    0,    0,    0,300492,    0
  4544. ,    0,    0,    0,184976,184977,212483,    0,    0,41955,41956
  4545. ,41957,250996,    0,    0,    0,    0,    0,    0,    0,    0
  4546. ,    0,    0,    0,251008,    0,251010,    0,    0,    0,    0
  4547. ,14472,41978,    0,    0,    0,    0,273025,    0,    0,    0
  4548. ,    0,41988,    0,    0,41991,    0,    0,41994,    0,41996
  4549. ,25494,    0,185025,    0,    0,    0,    0,    0,185031,    0
  4550. ,    0,    0,    0,    0,    0,    0,    0,    0,212546,212547
  4551. ,212548,    0,    0,212551,97031,    0,212554,    0,212556,    0
  4552. ,    0,    0,119043,    0,    0,273074,    0,    0,    0,    0
  4553. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4554. ,    0,    0,    0,273092,    0,273094,124568,    0,    0,    0
  4555. ,    0,    0,201588,201589,    0,    0,    0, 3557,    0,212597
  4556. ,    0,    0,42069,    0,    0,    0,    0,    0,179600,91585
  4557. ,    0,    0,    0,124595,    0,207112,    0,    0,    0,    0
  4558. ,212618,    0,    0,207120,119105,    0,    0,    0, 3588,42096
  4559. ,    0,    0,    0,119114, 3594,    0,    0,    0,234640,218138
  4560. ,    0,    0,    0,    0,42111,    0,31111,185140,196143,185142
  4561. ,    0,    0,42119,42120,42121,42122,    0,42124,    0,    0
  4562. ,    0,42128,    0,    0,    0,273174,    0,    0,289680,174160
  4563. ,    0,25635,    0,212671,212672,    0,    0,    0,212676,    0
  4564. ,    0,212679,212680,212681,212682,    0,212684,212685,212686,212687
  4565. ,212688,    0,113672,212691,    0,    0,196191,119178, 3658,    0
  4566. ,113680,    0,218201,    0,    0,    0,    0,    0,119189, 3669
  4567. ,    0,    0,240215,256719,    0,240218,53185,    0,    0,    0
  4568. ,    0,284232,    0,    0,    0,    0,    0,163216,163217,284240
  4569. ,75203,    0,    0,    0,    0,119216,    0,    0,    0,    0
  4570. ,    0,119222, 3702,    0,    0,    0,    0,119228,    0, 3709
  4571. ,119231,    0,    0,    0,    0,    0, 3716,    0,    0,    0
  4572. ,    0,    0,    0,    0,    0,    0,    0,    0, 3728,    0
  4573. ,119251, 3731,    0,    0,    0,    0,42243,    0,    0,    0
  4574. ,    0,    0,163271,273292,    0,    0,    0,    0,    0,    0
  4575. ,25754,    0,    0,75266,75267,75268,    0,    0,75271,25763
  4576. ,25764,75274,    0,75276,    0,    0,    0,102785,42275,42276
  4577. ,42277,    0,    0,    0,273323,    0,    0,    0,    0,    0
  4578. ,212818,    0,130305,    0,130307,130308,    0,    0,    0,    0
  4579. ,    0,    0,273341,    0,    0,    0,273345,    0,42305,42306
  4580. ,42307,42308,    0,    0,    0,    0,163335,    0,163337,42316
  4581. ,    0,179843,    0,163342,    0,163344,    0,    0,    0,    0
  4582. ,    0,    0,    0,    0,    0,    0,    0,    0,69840,    0
  4583. ,    0,273380,    0,119354, 3834,    0,75349,    0,    0,    0
  4584. ,97357,    0,212880,179875,179876,179877,    0,25851,75361,    0
  4585. ,    0,    0,    0,    0,    0,223895,262403,    0,223898,    0
  4586. ,    0,    0,    0,75376,75377,75378,    0,    0,    0,75382
  4587. ,    0,42378,75385,179905,    0,179907,    0,267925,75391,    0
  4588. ,75393,75394,    0,75396,179916,    0,    0,75400,    0,    0
  4589. ,262437,75404,75405,    0,    0,    0,157924,    0,75411,    0
  4590. ,207437,    0,    0,    0,    0,113925,    0,    0,113928,42416
  4591. ,42417,42418,    0,    0,    0,42422,113936,113937,262465,262466
  4592. ,    0,    0,86437,    0,    0,179957,    0,262474,    0,262476
  4593. ,    0,    0,    0,42440,42441,42442,    0,42444,42445,42446
  4594. ,42447,    0,    0,    0,    0,    0,179978,113967,    0,174480
  4595. ,86465,86466,86467,86468,    0,    0,86471,179989,    0,86474
  4596. ,    0,86476,    0,    0,108483,    0,    0,    0,    0,    0
  4597. ,262517,113991,    0,    0,    0,    0,    0,    0,136002,    0
  4598. ,136004,    0,    0,158011,180016,180017,    0,    0,136012,191023
  4599. ,    0,    0,    0,    0,    0,    0,108515,108516,108517,180031
  4600. ,    0,    0,    0,180035,    0,136029,    0,180039,180040,    0
  4601. ,180042,    0,180044,    0,180046,180047,    0,196552,    0,180051
  4602. ,196555,    0,136046,86538,    0,    0,108545,    0,    0,    0
  4603. ,    0,262578,108551,    0,86549,    0,    0,108556,136062,    0
  4604. ,    0,136065,    0,136067,    0,    0,262593,262594,262595,262596
  4605. ,180082,    0,262599,262600,262601,    0,42563,    0,    0,    0
  4606. ,    0,    0,86577,    0,    0,    0,    0,86582,    0,    0
  4607. ,185603,    0,    0,    0,15076,    0,86591,    0,    0,246123
  4608. ,92096,    0,158110,    0,86599,86600,    0,    0,    0,    0
  4609. ,    0,    0,86607,86608,273643,262642,    0,    0,    0,108618
  4610. ,    0,158129,    0,185636,185637,    0,97623,    0,    0,    0
  4611. ,108629,    0,    0,    0,125136,125137,158144,    0,42625,    0
  4612. ,    0,    0,    0,158151,    0,    0,158154,    0,    0,    0
  4613. ,    0,    0,185665,    0,    0,    0,246180,    0,    0,    0
  4614. ,240683,    0,158170,    0,    0,    0,108665,    0,    0,    0
  4615. ,    0,273700,136176,136177,136178,    0,    0,    0,240701,    0
  4616. ,108679,108680,    0,    0,295717,108684,108685,    0,    0,    0
  4617. ,    0,    0,108691,    0,48182,    0,    0,    0,    0, 9680
  4618. ,20683,53690,    0,    0,185717,    0,92202,    0,    0,92205
  4619. ,    0,42698,295745,295746,    0,    0,136220,    0,    0,    0
  4620. ,    0,    0,    0,    0,136228,    0,136230,    0,    0,136233
  4621. ,136234,136235,136236,    0,    0,97732,185749,97734,    0,    0
  4622. ,207757,    0,229763,136247,    0, 4225,    0, 4227,    0,    0
  4623. ,    0,    0,    0,    0,125256,    0,15238,    0,    0,    0
  4624. ,    0,86756,    0,185776,    0,    0,    0,15249,136272,    0
  4625. ,136274,    0,    0,42760,    0,    0,    0,    0,    0,    0
  4626. ,    0,    0,185795,185796,42771,295818,185799,185800,    0,185802
  4627. ,86785,    0,    0,    0,185807,185808,    0,    0,    0,86794
  4628. ,    0,86796,    0,    0,229825,    0,229827,229828,295841,    0
  4629. ,229831,    0,    0,229834,    0,229836,    0,    0,    0,    0
  4630. ,196835,196836,196837,295856,295857,295858,    0,    0,    0,295862
  4631. ,    0,    0,    0,    0,    0,92331,53825,92333,    0,92335
  4632. ,    0,    0,    0,    0,    0,213363,295879,295880,295881,295882
  4633. ,196865,    0,    0,    0,295887,295888,196871,284888,    0,196874
  4634. ,    0,    0,240885,    0,    0,    0,    0,    0,    0,    0
  4635. ,    0,    0,    0,    0,    0,    0,    0,229898,    0,246403
  4636. ,130883,    0,    0,    0,284915,174896,174897,174898,229909,    0
  4637. ,    0,    0,    0,    0,    0,    0,42883,    0,    0,158407
  4638. ,    0,86896,    0,    0,    0,103403,    0,86902,257434,48397
  4639. ,    0,    0,    0,    0,130917,229936,    0,229938,92414,    0
  4640. ,    0,229942,    0,196938,86919,    0,    0,    0,    0,    0
  4641. ,    0,    0,    0,86928,196949,    0,86931, 4417,229959,    0
  4642. ,229961,    0,    0,    0,    0,    0,229967,    0,    0,15431
  4643. ,    0,130954,246476,130956,    0,15437,158464,37443,42945,42946
  4644. ,42947,    0,    0,    0,    0,    0,    0,    0,158476,    0
  4645. ,158478,    0,    0,158481,158482,158483,196991,    0,    0,    0
  4646. ,    0,    0,158490,158491,    0,197000,197001,197002,    0,    0
  4647. ,    0,    0,197007,197008,130997,    0,197011,    0,    0,    0
  4648. ,    0,    0,    0,    0,142009,    0,    0,186020,125510,125511
  4649. ,    0,    0,    0,15495,246538,    0,120017,147523,125520,37505
  4650. ,37506,37507,37508,98020,    0,    0,    0,    0,    0,180541
  4651. ,37516,    0,175043,    0,    0,    0,    0,    0,    0,    0
  4652. ,    0,    0,43029,    0,    0,180557,120047,    0,180560,147555
  4653. ,147556,147557,246576,    0,    0,    0,    0,    0,246582,    0
  4654. ,    0,92557,    0,    0,    0,175076,175077,    0,131071,    0
  4655. ,    0,    0,131075,131076,    0,    0,    0,    0,    0,    0
  4656. ,    0,    0,    0,    0,    0,    0,    0,246611,    0,142094
  4657. ,147596,197106,    0,    0,    0,    0,175107,    0,43085,    0
  4658. ,    0,43088,    0,    0,43091,175116,    0,230128,    0,    0
  4659. ,    0,    0,    0,    0,    0,    0,    0,    0,    0,26603
  4660. ,    0,    0,290654,    0,    0,114625,    0,114627,    0,    0
  4661. ,37616,    0,37618,    0,208151,    0,37622,    0,    0,    0
  4662. ,    0,    0,    0,    0,    0,    0,175157,    0,    0,    0
  4663. ,    0,    0,147658,37639,    0,37641,    0,109156,    0,37645
  4664. ,37646,37647,37648,147669,    0,    0,    0,175178,    0,285200
  4665. ,    0,    0,21155,164182,21157,    0,26660,    0,175189,120180
  4666. ,    0,    0,    0,    0,    0,197200,109185,109186,109187,109188
  4667. ,147696,147697,    0,    0,    0,109194,147702,109196,    0,    0
  4668. ,    0,10182,21185,21186,21187,    0,    0,    0,    0,    0
  4669. ,147716,175222,    0,147719,147720,147721,    0,175228,    0,147725
  4670. ,    0,    0,    0,175234,175235,    0,    0,    0,    0,    0
  4671. ,175241,    0,131235,    0,    0,175246,    0,    0,114738,186252
  4672. ,175251,186254,186255,    0,    0,    0,186259,186260,    0,43236
  4673. ,    0,186264,186265,    0,103752,    0,186269,    0,    0,109258
  4674. ,186273,    0,131265,131266,    0,131268,186279,    0,131271,    0
  4675. ,109269,131274,    0,    0,    0,    0,    0,    0,    0,43266
  4676. ,    0,43268,    0,    0,43271,    0,21269,43274,186301,    0
  4677. ,    0,    0,186305,    0,186307,186308,    0,109296,    0,109298
  4678. ,65291,    0,    0,    0,    0,    0,301840,    0,70800,    0
  4679. ,    0,    0,    0,21296,21297,21298,147822,    0,147824,    0
  4680. ,    0,109320,    0,109322,10305,    0,109325,109326,109327,109328
  4681. ,    0, 4811,109331,    0,    0,131338,    0,    0,    0,    0
  4682. ,268868,    0,    0,    0,21327,21328,131349,    0,    0,    0
  4683. ,    0,43338,    0,153360,    0,120356,120357,    0,    0,    0
  4684. ,    0,    0,43349,    0,    0,180877,    0,    0,180880,    0
  4685. ,    0,    0,    0,131376,131377,131378,    0,279907,    0,131382
  4686. ,    0,    0,    0,    0,120385,    0,120387,120388,230409,43376
  4687. ,    0,43378,    0,120394,    0,    0,131399,131400,131401,131402
  4688. ,    0,131404,131405,    0,    0,    0,    0,    0,131411,    0
  4689. ,    0,    0,43399,43400,43401,43402,    0,    0,    0,43406
  4690. ,    0,    0,26906,26907,43411,    0,    0,    0,    0,279959
  4691. ,    0,    0,    0,263460,    0,    0,    0,    0,26922,    0
  4692. ,26924,26925,    0,186456,109443,    0,186459,    0,    0,    0
  4693. ,    0,    0,    0,186466,186467,    0,    0,    0,186471,    0
  4694. ,    0,    0,    0,186476,186477,186478,    0,    0,120469,    0
  4695. ,    0,    0,    0,    0,    0,    0,109475,109476,109477,    0
  4696. ,186493,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4697. ,    0,    0,    0,    0,    0,120496,120497,    0,26982,    0
  4698. ,    0,    0,26986,26987,26988,    0,    0,    0,    0,    0
  4699. ,    0,    0,    0,    0,    0,    0,27000,    0,120519,120520
  4700. ,    0,120522,    0,120524,120525,120526,120527,120528,    0,    0
  4701. ,120531,    0,    0,258059,    0,    0,    0,    0,164547,164548
  4702. ,219559,    0,164551,    0,    0,164554,    0,164556,    0,    0
  4703. ,280080,    0,    0,    0,    0,    0,    0,    0,    0,    0
  4704. ,    0,    0,    0,27047,27048,    0,    0,    0,43555,43556
  4705. ,43557,    0,    0,    0,    0,    0,    0,    0,131581,109578
  4706. ,    0,    0,131585,    0,    0,    0,    0,    0,    0,    0
  4707. ,109589,    0,    0,    0,    0,    0,241619,    0,    0,    0
  4708. ,43587,43588,    0,    0,43591,    0,    0,43594,    0,    0
  4709. ,    0,274640,    0,    0,    0,    0,    0,109616,109617,109618
  4710. ,    0,    0,    0,109622,    0,    0,    0,214145,    0,214147
  4711. ,    0,98628,    0,214151,    0,    0,214154,    0,214156,    0
  4712. ,109639,109640,109641,109642,    0,109644,109645,    0,    0,    0
  4713. ,27134,    0,109651,164662,    0,    0,    0,    0,27142,    0
  4714. ,    0,27145,    0,    0,    0,    0,    0,    0,    0,    0
  4715. ,164679,    0,    0,164682,65665,164684,164685,164686,164687,    0
  4716. ,    0,    0,    0,    0,    0,    0,    0,    0,208705,    0
  4717. ,    0,    0,27176,27177,    0,    0,    0,    0,    0,    0
  4718. ,214218,    0,71194,27187,    0,    0,27190,    0,    0,43696
  4719. ,    0,    0,98709,    0,    0,43702,    0,    0,    0,258245
  4720. ,    0,    0,258248,    0,43711,    0,    0,    0,    0,    0
  4721. ,258256,    0,43719,    0,43721,43722,    0,    0,    0,    0
  4722. ,    0,    0,    0,27227,    0,    0,258272,    0,    0,258275
  4723. ,    0,    0,    0,214271,214272,    0,214274,    0,    0,    0
  4724. ,    0,    0,    0,214281,214282,115265,214284,214285,214286,214287
  4725. ,214288,27255,27256,214291,    0,27259,27260,170287,    0,197794
  4726. ,    0,    0,    0,    0,    0,258311,    0,    0,    0,    0
  4727. ,    0,    0,    0,    0,164803,    0,54785,    0,    0,    0
  4728. ,    0,    0,    0,    0,214322,    0,    0,    0,    0,192323
  4729. ,    0,    0,    0,    0,    0,    0,    0,27301,    0,27303
  4730. ,27304,27305,27306,27307,27308,27309,    0,    0,    0,27313
  4731. ,258356,    0,    0,    0,    0,    0,    0,    0,    0,258365
  4732. ,258366,    0,    0,    0,258370,258371,    0,    0,    0,258375
  4733. ,258376,258377,    0,    0,    0,252880,    0,164866,    0,    0
  4734. ,    0,    0,164871,    0,    0,    0,    0,164876,    0,    0
  4735. ,    0,    0,192386,    0,192388,    0,    0,192391,    0,    0
  4736. ,    0,27365,192396,27367,27368,27369,    0,27371,27372,    0
  4737. ,27374,27375,    0,241916,241917,    0,    0,    0,10879,    0
  4738. ,    0,    0,131905,71395,71396,71397,    0,    0,    0,126411
  4739. ,    0,43898,    0,    0,    0,    0,247440,    0,    0,    0
  4740. ,    0,    0,    0,291455,    0,    0,    0,    0,    0,164938
  4741. ,263957,    0,263959,    0,71426,71427,71428,    0,    0,71431
  4742. ,164949,    0,71434,    0,    0,    0,    0,    0,    0,    0
  4743. ,    0,    0,192466,    0,    0,192469,192470,    0,192472,    0
  4744. ,    0,    0,    0,126465,    0,    0,    0,    0,164977,164978
  4745. ,27454,    0,    0,164982,    0,    0,    0,27461,27462,    0
  4746. ,    0,27465,192496,192497,    0,71477,    0,    0,192502,    0
  4747. ,164999,165000,    0,165002,    0,165004,165005,165006,165007,165008
  4748. ,    0,    0,165011,    0,    0,192519,    0,192521,192522,    0
  4749. ,192524,192525,    0,    0,192528,    0,    0,    0,209040,27507
  4750. ,    0,121025,93520,27508,    0,71538,27530,    0,71542,33035
  4751. ,    0,71549,27541,    0,115561,71553,    0,148568,71554,    0
  4752. ,88065,71562,    0,231105,203600,    0,253185,132163,    0,132195
  4753. ,44179,    0,170703,132196,    0,225747,55216,    0,132231,55217
  4754. ,    0,253258,132236,    0,253269,49732,    0,253320,132298,    0
  4755. ,253327,242325,33287,    0,253331,181818,132309,    0,132337,33319
  4756. ,    0,132338,93831,    0,121345,93840,    0,203861,148851,    0
  4757. ,291883,132354,11332,    0,132356,11334,    0,132362,33344,    0
  4758. ,231385,132367,    0,71862,33355,    0,33369,  363,    0,198467
  4759. ,22435,    0,198468,22436,    0,121494,33478,    0,242564,220560
  4760. ,    0,165554,50033,    0,275585,242579,    0,132560,39043,    0
  4761. ,248085,242584,198576,    0,242585,198577,    0,198578,165572,    0
  4762. ,242588,165574,    0,242589,22549,    0,242611,99585,    0,242613
  4763. ,39076,    0,242622,22582,    0,275633,242627,28088,    0,39105
  4764. ,22602,    0,39107,22604,    0,39108,22605,    0,154630,22606
  4765. ,    0,154631,22607,  603,    0,39111,22608,  604,    0,154637
  4766. ,121631,39116,  609,    0,297680,231668,    0,242709,33671,    0
  4767. ,204203,50175,    0,39178,33677,    0,259235,61199,    0,231751
  4768. ,39216,    0,116231,39217,    0,259266,116240,    0,259276,33735
  4769. ,    0,242776,39239,    0,171265,39241,    0,242779,39242,    0
  4770. ,242781,39244,    0,242782,39245,    0,242783,39246,    0,242784
  4771. ,39247,    0,242785,215280,39248,    0,242788,39251,    0,242794
  4772. ,83265,    0,259399,248397,    0,132880,39363,    0,264975,39434
  4773. ,    0,281494,94460,    0,281574,232065,89039,    0,116552,39538
  4774. ,    0,83555,28545,    0,83557,28547,    0,122074,39559,    0
  4775. ,56065,39562,    0,287124,83587,    0,287125,83588,    0,83591
  4776. ,34082,    0,199115,83594,    0,254145,133123,    0,265196,160677
  4777. ,    0,188195,133185,17664,    0,188196,133186,72675,    0,188197
  4778. ,133187,72676,    0,133188,122186,72677,    0,160705,133200,39683
  4779. ,    0,160711,83697,    0,160716,100205,83702,    0,265239,188225
  4780. ,    0,265240,188226,72705,12194,    0,188227,72706,    0,188228
  4781. ,72707,12196,    0,188231,12199,    0,100216,72711,    0,188236
  4782. ,100220,89218,    0,166233,89219,72716,    0,166234,83719,    0
  4783. ,83720,12207,    0,232248,83721,    0,83722,12209,    0,83724
  4784. ,39716,    0,83725,39717,    0,133237,83728,    0,28737,12234
  4785. ,    0,133258,122256,12236,    0,122257,12237,    0,39746,12241
  4786. ,    0,39747,12242,    0,39748,12243,    0,188277,12245,    0
  4787. ,72757,39751,12246,    0,133269,12247,    0,39754,12249,    0
  4788. ,100266,12250,    0,160778,100267,39756,12251,    0,122272,100268
  4789. ,    0,122275,100271,    0,188298,182797,    0,122287,72778,    0
  4790. ,133297,94790,    0,133298,94791,    0,160816,133311,    0,160817
  4791. ,133312,    0,160818,133313,122311,    0,133314,116811,    0,188336
  4792. ,177334,133326,    0,188337,133327,72816,    0,188338,149831,133328
  4793. ,72817,    0,72818,50814,    0,270855,34312, 1306,    0,133331
  4794. ,100325, 1307,    0,160840,100329,39818,    0,171843,160841,100330
  4795. ,    0,160842,100331,    0,160844,100333,    0,160845,100334,    0
  4796. ,188351,160846,100335,    0,188352,160847,72831,    0,292872,188353
  4797. ,160848,72832,    0,188354,72833,    0,188355,72834,    0,188356
  4798. ,160851,72835,39829, 1322,    0,72836, 1323,    0,188359, 1325
  4799. ,    0,188360,72839,    0,292880,188361,72840,    0,188362,72841
  4800. ,    0,188365,72844,    0,188366,72845,    0,188367,72846,    0
  4801. ,188368,122356,72847, 1334,    0,122365, 1343,    0,171875,122366
  4802. ,    0,171876,122367,    0,171877,122368,    0,122371,39856,    0
  4803. ,122377,83870,39862,    0,122382,28865,    0,171905,39881,    0
  4804. ,171906,56385,39882,    0,171907, 1376,    0,171908,39884,    0
  4805. ,171911,39887,    0,149908,39888,    0,254436,248935,    0,100425
  4806. ,83922,    0,254467,221461,    0,166465,45443,    0,166468,100456
  4807. ,    0,254513,45475,    0,282034,72996,    0,100515,45505,    0
  4808. ,282054,254549,45511,    0,172040,166539,40016,    0,172041,40017
  4809. ,    0,172042,166541,    0,172044,73026,    0,172045,73027,    0
  4810. ,276565,243559,172046,73028,    0,172047,100534,    0,172051,89536
  4811. ,    0,84038,73036,    0,254604,40065,    0,73077,40071, 1564
  4812. ,    0,254611, 1565,    0,282134,95100,    0,161114,73098,    0
  4813. ,254655,45617,    0,117131,45618,    0,100643,73138,    0,73142
  4814. ,34635,    0,73151,45646,    0,73152,45647,    0,73153,45648
  4815. ,    0,232683,73154,    0,150174,73160,    0,122673,73164,    0
  4816. ,89671,73168,    0,298722,177700,    0,254800,161283,    0,166800
  4817. ,51279,    0,155843,133839,    0,161345,40323,    0,298901,155875
  4818. ,100865,    0,155876,40355,    0,155877,40356,    0,155906,67890
  4819. ,40385,    0,155907,40386,    0,155908,40387,    0,298941,40394
  4820. ,    0,161418,40396,    0,265955,183440,106426,    0,265956,67920
  4821. ,    0,276962,210950,161441,40419,    0,238465,210960,    0,188963
  4822. ,161458,155957,    0,188964,40437,    0,265986,161467,    0,265991
  4823. ,161472,    0,265994,161475,    0,161479,155978,51459,    0,161480
  4824. ,40458,    0,172483,161481,    0,161491,40469,    0,299039,172516
  4825. ,    0,156017,40496,    0,156018,40497,    0,84516,40508,    0
  4826. ,84517,40509,    0,156032,40511,    0,156033,40512,    0,238549
  4827. ,156034,40513,    0,156035,40514,    0,156036,40515,    0,145035
  4828. ,40516,    0,156040,40519,    0,156041,40520,    0,172545,156042
  4829. ,40521,    0,172546,57025,40522,    0,172547,156044,    0,189051
  4830. ,172548,156045,40524,    0,156046,40525,    0,156047,40526,    0
  4831. ,172551,156048,40527,    0,266069,40528,    0,172554,156051,    0
  4832. ,266072,40531,    0,101048,84545,    0,238576,84548,    0,266102
  4833. ,227595,    0,282630,266127,    0,282631,266128,    0,194625,73603
  4834. ,    0,216643,101122,    0,101132,84629,    0,134145,18624,    0
  4835. ,172657,101144,    0,172658,101145,40634,    0,172662,101149,    0
  4836. ,249680,101153,    0,101157,40646,    0,172672,84656,    0,172673
  4837. ,84657,    0,172674,84658,    0,172676,101163,    0,172679,101166
  4838. ,    0,189185,183684,172682,161680,    0,172684,101171,73666,    0
  4839. ,172685,73667,    0,172686,101173,73668,    0,172687,84671,    0
  4840. ,194692,172688,    0,101182,84679,57174,    0,216705,84681,    0
  4841. ,216706,101185,84682,    0,216708,101187,84684,    0,101188,84685
  4842. ,    0,216711,84687,    0,183723,95707,    0,183737,73717,    0
  4843. ,95722,90221,    0,183741,95725,    0,183745,156240,    0,216757
  4844. ,95735,    0,216778,194774,    0,222298,123280,    0,95781,73777
  4845. ,    0,95782,73778,    0,95783, 2266,    0,95784, 2267,    0
  4846. ,95786,73782,    0,117791,95787,    0,95789,73785,    0,216817
  4847. ,101296,73791,    0,216818,101297,73792,    0,101298,73793,    0
  4848. ,95799,73795, 2282,    0,216822,95800,73796,    0,260835,73801
  4849. ,    0,260836,73802,    0,216831,73805,    0,260840,216832,73806
  4850. ,    0,216833,73807, 2294,    0,216834,73808,24299,    0,216835
  4851. ,183829,    0,216841,68314,    0,216851,68324,40819,    0,260865
  4852. ,101336,    0,288373,260868,101339,    0,183856,101341,    0,260871
  4853. ,183857,101342,    0,183858,101343,    0,260874,101345,    0,260876
  4854. ,101347,    0,101348,95847,    0,244375,101349,95848,    0,101350
  4855. ,95849,    0,244378,189368,101352,    0,145366,101358,    0,101367
  4856. , 2349,    0,255403,172888,    0,183907,101392,    0,172915,18887
  4857. ,    0,260961,255460, 2414,    0,194952,95934,    0,183957,95941
  4858. ,    0,222465,194960,183958,95942,    0,183959,106945,    0,183960
  4859. ,106946,    0,106947,95945,    0,260976,106948,    0,260982,106954
  4860. ,    0,101461,73956,    0,261002,156483,    0,261006,95976,    0
  4861. ,261007,95977,    0,162000,95988,    0,95989,73985,    0,95990
  4862. ,73986,13475,    0,73987,13476,    0,73988,13477,    0,73991
  4863. ,13480,    0,217040, 2501,    0,13505, 2503,    0,239047,13506
  4864. ,    0,189540,13508,    0,96031,13516,    0,239070, 2527,    0
  4865. ,156556, 2528,    0,239079, 2536,    0,107056, 2537,    0,74058
  4866. ,30050,    0,239104,107080,    0,211600,118083,107081,    0,239109
  4867. ,107085,    0,239110,107086,    0,239111,107087,    0,239112,156597
  4868. ,123591,107088,    0,239115,107091,    0,239117,90590,    0,239119
  4869. ,13578,    0,239122, 8080,    0,239126,74096,    0,239127,74097
  4870. ,    0,239130,13589,    0,261141,118115,35600,    0,178631,13601
  4871. ,    0,233648,74119,    0,222648,74121,    0,288661,74122,    0
  4872. ,74127,13616,    0,239158,74128,13617,    0,74131,30123,    0
  4873. ,13625, 2623,    0,118146,13627,    0,200662,118147,    0,156657
  4874. ,13631,    0,156658,118151,13632,    0,118154,13635,    0,261181
  4875. ,156662,13636,    0,156671,13645,    0,156672,13646,    0,156673
  4876. ,13647,    0,156674,123668,13648,    0,244695,156679,    0,255723
  4877. ,173208,    0,68698,52195,    0,250243,189732,    0,228240,189733
  4878. ,    0,118257,19239,    0,189781,107266,    0,118273,107271,    0
  4879. ,156782,118275,    0,118276,107274,    0,156785,107276,    0,156786
  4880. ,118279,    0,266808,250305,222800,118281,    0,250306,118282,    0
  4881. ,250308,118284,    0,250311,134790,118287,    0,134791,118288,    0
  4882. ,134800,41283,    0,162317,129311,    0,178842,41317,    0,261366
  4883. ,107338,    0,250389,41351,    0,184382,41356,    0,118384,107382
  4884. ,    0,266913,118386,    0,250416,200907,    0,250417,107391,    0
  4885. ,250418,107392,    0,200910,107393,    0,250422,107396,    0,107399
  4886. ,63391,    0,211920,107401,    0,123905,107402,    0,239432,107408
  4887. ,    0,233932,41397,    0,250444,63410,    0,250451,123928,    0
  4888. ,294480,151454,    0,90945,63440,    0,123972,41457,    0,41462
  4889. ,30460,    0,41480, 8474,    0,228515,173505,41481,    0,228516
  4890. ,41482,    0,228546,113025,    0,234077,47043,    0,69048,52545
  4891. ,    0,278138,228629,    0,228672,74644,    0,228673,74645,    0
  4892. ,113174,96671,    0,223254,47222,    0,278429,250924,    0,185007
  4893. ,96991,    0,212515,157505,130000,    0,212516,41985,    0,212517
  4894. ,41986,    0,251025,41987,    0,212545,108026,    0,97040, 3523
  4895. ,    0,234591,20052,    0,201587,42058,    0,201590,119075,    0
  4896. ,212593,119076, 3555,    0,119077, 3556,    0,119106, 3585,    0
  4897. ,119107, 3586,    0,119108, 3587,    0,119111,42097,    0,212629
  4898. ,42098, 3591,    0,119116,42102,    0,218135, 3596,    0,212656
  4899. ,119139,42125,    0,212657,42126, 3619,    0,212658,42127,    0
  4900. ,212662,42131,    0,251180,212673,    0,212674,119157,    0,212675
  4901. , 3637,    0,119217, 3696,    0,212735,119218, 3697,    0,80712
  4902. , 3698,    0,119229, 3708,    0,119232, 3711,    0,119233, 3712
  4903. ,    0,119234, 3713,    0,119235, 3714,    0,119236, 3715,    0
  4904. ,201754,163247,119239,91734,    0,119240, 3719,    0,119241, 3720
  4905. ,    0,119242, 3721,    0,75235, 3722,    0,119244,75236,    0
  4906. ,119245,75237, 3724,    0,119246, 3725,    0,119247, 3726,    0
  4907. ,119248,75240, 3727,    0,273301,75265,42259,    0,163333,75317
  4908. ,42311,    0,163336,42314,    0,75338,53334,    0,130389,124888
  4909. ,    0,179906,75387,    0,267924,179908,    0,179911,75392,    0
  4910. ,179914,75395,42389,    0,157914,75399,    0,262435,86403,75401
  4911. ,    0,262436,75402,    0,130416,124915,75406,    0,130417,75407
  4912. ,    0,157923,130418,75408,    0,262467,86435,    0,262468,86436
  4913. ,    0,262471,42431,    0,113952,42439,    0,53450,42448,    0
  4914. ,113964,42451,    0,180018,136010,    0,180022,136014,    0,262538
  4915. ,136015,    0,180032,136024,    0,180033,136025,108520,    0,262549
  4916. ,180034,    0,180036,136028,    0,180041,136033,    0,180045,136037
  4917. ,    0,180048,114036,    0,136051,108546,97544,48035,    0,114048
  4918. ,108547,    0,262576,136053,108548,48037,    0,262577,114050,    0
  4919. ,262582,108554,    0,262591,136068,    0,262592,114065,    0,262602
  4920. ,251600,    0,262604,48065,    0,262605,48066,    0,262606,158087
  4921. ,48067,    0,262607,48068,    0,262608,86576,    0,295616,86578
  4922. ,48071,    0,262611,20567,    0,257114,136092,15070,    0,158114
  4923. ,86601,    0,284638,86602,    0,158116,42595,    0,86604,42596
  4924. ,    0,86605,42597,    0,158119,97608,86606,    0,97613,86611
  4925. ,    0,185635,130625,    0,70131,42626,15121,    0,42627,15122
  4926. ,    0,158149,42628,15123,    0,158150,108641,    0,158152,42631
  4927. ,15126,    0,158153,136149,    0,158155,42634,15129,    0,158156
  4928. ,15130,    0,158157,42636,15131,    0,295683,158158,    0,185666
  4929. ,158161,    0,185667,158162,    0,185668,158163,    0,158165,108656
  4930. ,    0,185671,108657,    0,158167,108658,70151,    0,185674,158169
  4931. ,48149,    0,185676,158171,108662,    0,163674,125167,    0,125170
  4932. ,108667,97665,    0,295715,108681,    0,295716,108682,    0,295720
  4933. ,108686,    0,119689,108687,48176,    0,125191,108688,48177,    0
  4934. ,92186,48178,    0,207727,20693,    0,295747,262741,48202,    0
  4935. ,295748,136219,    0,240740,97714,    0,295751,136222,48206,    0
  4936. ,136223,97716,48207,    0,136224,114220,92216,48208,    0,295754
  4937. ,136225,    0,136226,42709,    0,295756,136227,    0,185738,136229
  4938. ,    0,136231,119728,    0,136232,86723,    0,207750,136237,    0
  4939. ,207751,136238,    0,136253,42736,    0,235272,119751,42737,    0
  4940. ,125253,42738,    0,235275,125255,    0,125257,42742,15237,    0
  4941. ,125262,86755,    0,125264,86757,    0,185777,42751,    0,185778
  4942. ,31750,    0,185782,136273,    0,42759,31757,    0,229795,174785
  4943. ,42761,    0,229796,42762,    0,229797,174787,    0,174788,163786
  4944. ,42764,    0,185791,42765,    0,185792,42766,    0,185793,141785
  4945. ,42767,    0,185794,42768,    0,196803,185801,141793,    0,185804
  4946. ,86786,    0,185805,86787,    0,185806,86788,    0,295829,86791
  4947. ,    0,207815,185811,    0,229826,114305,    0,141822,97814,    0
  4948. ,92334,53827,    0,295884,279381,196866,    0,295885,196867,    0
  4949. ,295886,196868,114353,    0,295891,174869,    0,240884,224381,196876
  4950. ,119862,    0,240886,114363,86858,    0,163883,86869,    0,196917
  4951. ,86897,48390,    0,86898,48391,    0,246435,191425,    0,246436
  4952. ,130915,    0,246437,130916,    0,229937,86911,    0,158430,75915
  4953. ,    0,86920,15407,    0,158434,86921,    0,92423,86922,    0
  4954. ,246452,158436,42915,    0,86924,42916,    0,86925,42917,    0
  4955. ,163940,158439,86926,    0,92428,86927,    0,229960,70431,    0
  4956. ,246465,229962,158449,    0,246466,130945,    0,301477,246467,229964
  4957. ,130946,    0,246468,229965,130947,    0,229966,130948,    0,246471
  4958. ,229968,    0,130951,15430,    0,246474,229971,185963,    0,196976
  4959. ,158469,42948,    0,196977,158470,103460,    0,196978,158471,    0
  4960. ,158472,42951,    0,158473, 9946,    0,158474,97963,    0,196982
  4961. ,158475,42954,    0,158477,42956,    0,196992,158485,    0,196993
  4962. ,191492,    0,196994,158487,    0,196995,191494,    0,196996,158489
  4963. , 9962,    0,196999, 9965,    0,197004,37475,    0,268518,197005
  4964. ,37476,    0,197006,37477,    0,131018,125517,120016,    0,246549
  4965. ,37511,    0,246550,131029,    0,246552,37514,    0,76024,54020
  4966. ,43018,    0,246577,131056,    0,246578,131057,    0,131058,92551
  4967. ,    0,301593,131062,    0,301594,191574,    0,175075,120065,92560
  4968. ,    0,131072,43056,    0,131073,43057,    0,131074,43058,    0
  4969. ,246599,43062,    0,246600,131079,    0,246601,131080,    0,246602
  4970. ,131081,    0,147585,131082,    0,246604,147586,    0,246605,147587
  4971. ,131084,    0,246606,147588,131085,    0,246607,131086,    0,246608
  4972. ,131087,43071,    0,147591,142090,131088,    0,147594,131091,    0
  4973. ,224612,43079,37578,    0,224613,43080,    0,175105,43081,    0
  4974. ,175106,43082,    0,175108,43084,    0,43086,32084,    0,175111
  4975. ,43087,32085,    0,175114,37589,    0,202640,109123,    0,175139
  4976. ,114628,    0,147637,37617,    0,114654,37640,    0,109155,54145
  4977. ,37642,    0,109157,37644,    0,279695,37651,    0,147698,109191
  4978. ,    0,279723,10174,    0,131203,10181,    0,175216,147711,21188
  4979. ,    0,175217,147712,    0,175218,147713,    0,147714,21191,    0
  4980. ,147715,114709,    0,147722,43203,    0,175229,147724,    0,175231
  4981. ,147726,    0,175232,147727,    0,175233,147728,    0,175236,147731
  4982. ,    0,263255,175239,    0,246753,186242,175240,    0,263258,186244
  4983. ,175242,    0,175244,131236,    0,175245,131237,    0,175247,114736
  4984. ,    0,186250,175248,114737,    0,186261,43235,    0,279780,186263
  4985. ,43237,    0,274284,186268,    0,186277,131267,    0,186286,131276
  4986. ,    0,186291,98275,43265,    0,186293,43267,    0,186302,125791
  4987. ,43276,    0,109297, 4778,    0,109302,70795,    0,186332,147825
  4988. ,21302,    0,147826,109319,    0,213840,120323,109321,    0,142330
  4989. ,109324,    0,268865,241360,    0,268867,21322,    0,175354,21326
  4990. ,    0,120355,65345,    0,263403,186389,    0,120386, 4865,    0
  4991. ,120391,43377,    0,120396,43382,    0,186416,131406,    0,186417
  4992. ,131407,43391,    0,186418,131408,    0,43404,26901,    0,268946
  4993. ,164427,43405,    0,43407,32405,    0,268949,164430,43408,26905
  4994. ,    0,296480,186460,    0,268976,186461,    0,268977,230470,186462
  4995. ,    0,268978,230471,186463,    0,186464,26935,    0,186465,26936
  4996. ,    0,186468,26939,    0,230477,186469,26940,    0,186470,120458
  4997. ,    0,257985,186472,    0,186473,114960,    0,186474,26945,    0
  4998. ,257988,186475,    0,186487,164483,    0,120498,26981,    0,186512
  4999. ,26983,    0,186513,26984,    0,186514,120502,26985,    0,197520
  5000. ,26989,    0,164515,109505,26990,    0,164516,109506,26991,    0
  5001. ,164517,109507,26992,    0,109508,26993,    0,225032,109511,    0
  5002. ,225035,109514,26999,    0,109516,27001,    0,219539,120521,    0
  5003. ,258061,252560,    0,164545,43523,    0,247061,164546,    0,214083
  5004. ,27049,    0,241620,214115,131600,    0,214116,43585,    0,214117
  5005. ,43586,    0,164618,126111,43596,    0,164629,65611,    0,214146
  5006. ,98625,    0,214148,98627,    0,164656,109646,    0,164657,109647
  5007. ,    0,164658,109648,    0,263684,27141,    0,263695,65659,    0
  5008. ,164680,43658,    0,164681,153679,    0,214197,164688,    0,164691
  5009. ,43669,    0,120705,27188,    0,27189, 5185,    0,263737,43697
  5010. ,    0,214229,43698,    0,258257,131734,    0,291265,43720,10714
  5011. ,    0,208754,43724,    0,214256,43725,    0,214257,98736,43726
  5012. ,    0,214258,98737,43727,    0,98738,43728,27225,    0,219761
  5013. ,27226,    0,214262,43731,    0,214273,208772,    0,214275,208774
  5014. ,    0,258284,214276,27242,    0,258287,214279,27245,    0,258288
  5015. ,214280,    0,291313,27265,    0,241841,219837,27302,    0,164835
  5016. ,27310,    0,164836,49315,27311,    0,164837,27312,    0,159343
  5017. ,27319,    0,258362,27320,    0,208854,27321,    0,258367,192355
  5018. ,    0,258368,192356,    0,258369,192357,    0,230874,120854,    0
  5019. ,258382,164865,    0,258384,164867,    0,258385,164868,    0,170375
  5020. ,164874,    0,192385,71363,    0,192387,170383,    0,263907,192394
  5021. ,    0,263916,27373,    0,274960,263958,    0,263960,71425,    0
  5022. ,192458,71436,    0,164976,71459,    0,54968,27463,    0,192498
  5023. ,27468,    0,269520,165001,    0,192520,71498,    0,192526,27496
  5024. ,    0,192527,27497,    0,192531,71509,    0)  ;
  5025.         --| Hash values to check against to verify that
  5026.         --| correct action has been found for this
  5027.         --| parser state and input token.
  5028.         -- NYU Reference Name: ACTION_TABLE2
  5029.  
  5030.     DefaultMap :
  5031.         constant array (DefaultMapRange) of GC.ParserInteger :=
  5032.          ( 1402,    0,    0,    0,    0, 1400,    0, 1228, 1217, 1401
  5033. ,    0, 1219,    0, 1410,    0,    0,    0, 1221, 1222, 1223
  5034. , 1224, 1225, 1226,    0,    0, 1279, 1279, 1220, 1227,    0
  5035. ,    0,    0, 1279, 1099,    0, 1100, 1082,    0, 1081, 1044
  5036. , 1043,    0, 1097, 1098,    0, 1322, 1342, 1083, 1045, 1046
  5037. , 1047, 1086, 1065, 1328, 1068, 1069, 1070, 1071, 1072, 1073
  5038. , 1076, 1077, 1346, 1351, 1349,    0, 1087, 1084, 1085,    0
  5039. , 1325, 1164, 1165,    0, 1244,    0,    0, 1160,    0, 1279
  5040. , 1159, 1174, 1310,    0, 1025,    0, 1368, 1241,    0,    0
  5041. , 1242, 1243, 1406, 1404, 1403, 1292, 1108,  981, 1291,    0
  5042. ,    0, 1042,    0,    0, 1083, 1308,    0, 1319, 1317, 1064
  5043. ,    0, 1344,    0, 1090, 1088, 1092,    0, 1089, 1093, 1091
  5044. , 1074,    0,    0,    0,    0,    0,    0, 1324,    0, 1067
  5045. ,    0,    0,    0,    0,    0,    0,    0,    0, 1096, 1094
  5046. , 1095,    0, 1103, 1104, 1101, 1102,    0, 1105, 1078,    0
  5047. , 1083, 1079, 1347,    0,    0,    0,    0,    0, 1289,    0
  5048. , 1411,    0, 1177,    0,    0,    0,    0, 1377,    0, 1280
  5049. , 1368,    0,    0, 1279,    0,    0,    0,    0,  949, 1027
  5050. ,  950,  951,  952,  953,  954,  955,  956,  957,  958,  959
  5051. ,    0,  966,  967,  968, 1279, 1028, 1029,    0,    0, 1267
  5052. , 1268, 1269, 1270,    0,    0, 1279, 1037, 1038, 1039, 1040
  5053. , 1041,    0, 1279, 1283, 1368, 1147, 1369,    0,    0,    0
  5054. ,    0, 1279,    0,    0,    0,    0,    0,    0, 1080,    0
  5055. ,    0, 1021,    0, 1059,    0, 1060, 1319, 1218, 1345, 1323
  5056. , 1008, 1075, 1343,  987, 1057, 1056, 1058, 1055, 1054, 1106
  5057. , 1107,    0, 1050, 1051, 1053, 1052, 1049, 1328, 1326,    0
  5058. ,    0, 1342, 1332,    0, 1334, 1336, 1333, 1335, 1337,    0
  5059. ,    0, 1348, 1350, 1352,    0, 1162, 1291,    0, 1375,    0
  5060. , 1412,  965, 1169,    0, 1180,    0, 1375,    0,    0, 1378
  5061. , 1379,    0,    0, 1175, 1042,    0, 1047,    0,    0,    0
  5062. ,    0, 1191,    0, 1380,    0, 1311,    0,    0, 1190,    0
  5063. ,    0, 1312, 1026, 1279, 1368,    0,    0,    0, 1179, 1177
  5064. ,    0, 1229, 1405,    0, 1111, 1110, 1293, 1331, 1327, 1321
  5065. , 1314, 1317, 1020,    0,    0, 1315, 1317, 1320,    0, 1063
  5066. ,    0,    0, 1048, 1066, 1330, 1329, 1338, 1340, 1339, 1341
  5067. ,    0, 1169,    0, 1167,    0,    0,    0,    0,    0,    0
  5068. , 1170, 1287,    0,    0,    0,    0, 1233,    0,    0, 1261
  5069. , 1172,    0,  948,    0,    0,    0,    0, 1368,    0, 1192
  5070. , 1279,    0,    0, 1023,    0,    0,    0,    0, 1287, 1287
  5071. ,  979,    0,    0,    0,    0, 1031, 1032, 1033, 1034, 1036
  5072. , 1030, 1035, 1279,    0,    0,    0,    0,    0,    0,    0
  5073. ,    0,    0,    0,    0,    0,    0, 1283, 1042,    0, 1284
  5074. ,    0, 1283, 1113, 1114,    0, 1117, 1118, 1119, 1120, 1121
  5075. , 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131
  5076. , 1132, 1355,    0,    0, 1201, 1202, 1203, 1148, 1285, 1178
  5077. , 1407, 1109, 1319, 1019, 1309, 1316, 1319, 1318, 1009,  988
  5078. ,    0, 1259, 1168, 1287,    0,    0,    0,    0,    0,    0
  5079. ,    0, 1254,    0,    0, 1001, 1255, 1256, 1000,    0,    0
  5080. , 1304, 1414, 1413, 1248, 1290, 1171,    0,    0,    0, 1257
  5081. , 1161,    0, 1279,    0,    0, 1266, 1415, 1263,    0, 1417
  5082. ,    0,    0, 1279,    0,    0,    0,    0, 1176,    0,  979
  5083. , 1279, 1382, 1384,    0,    0,    0,    0,    0, 1279,    0
  5084. ,    0,  971,  972,  973,  974,  975,  976,  977,  993,  994
  5085. ,  995, 1296, 1296, 1304,    0, 1185,    0,    0,    0, 1287
  5086. , 1287,    0, 1234,    0,    0,    0,    0,  980,  982,  983
  5087. ,  984, 1189, 1180, 1196, 1313, 1230, 1195, 1398, 1390,    0
  5088. ,    0,    0, 1152,    0,    0, 1137, 1283,    0, 1134, 1239
  5089. ,    0, 1156,    0,    0, 1394,    0,    0,    0, 1173,    0
  5090. , 1353,    0, 1115, 1116, 1356,    0, 1283,    0,    0, 1279
  5091. , 1368,    0,    0, 1062, 1061, 1415, 1166,    0, 1376, 1022
  5092. ,    0, 1252, 1251, 1253, 1250,    0, 1246,    0,    0, 1288
  5093. , 1245, 1415,    0,    0,    0,    0,    0,    0, 1419,    0
  5094. , 1279,    0, 1272, 1271, 1188,  978, 1384,    0,    0, 1279
  5095. ,  999,  997,    0,  986, 1183,    0,    0, 1302,  991,  992
  5096. , 1294,  990,  969, 1297,  996,  998,    0, 1381, 1083, 1300
  5097. , 1007,    0,    0,    0,    0,    0,  960,  962,    0,    0
  5098. ,    0,    0,    0,    0,    0, 1285, 1200,    0,    0, 1154
  5099. , 1158, 1357, 1362, 1240, 1157,    0,    0,    0, 1283, 1283
  5100. , 1283, 1206, 1207, 1208, 1209, 1359, 1133,    0,    0, 1283
  5101. ,    0,    0, 1144, 1283, 1368,    0,    0, 1286, 1283, 1373
  5102. , 1372, 1149,    0, 1163, 1298, 1083, 1249, 1287,    0,    0
  5103. ,    0, 1196,    0,    0, 1418,  947, 1277,    0,    0,    0
  5104. , 1279,    0,    0, 1386, 1368, 1279, 1383, 1181, 1279,    0
  5105. ,    0,    0,    0, 1006,    0, 1003,  964,  961,  963, 1187
  5106. , 1186,  985, 1231, 1232,    0, 1215,    0,    0, 1375, 1283
  5107. , 1198,    0, 1153,    0, 1359, 1283,    0,    0, 1397, 1211
  5108. ,    0, 1210, 1283, 1283,    0, 1360, 1278, 1135, 1354,    0
  5109. ,    0,    0,    0, 1151,    0, 1238, 1408, 1235, 1374,    0
  5110. ,    0,    0, 1015,    0, 1305,    0, 1262, 1416,    0,    0
  5111. ,    0, 1420,    0, 1368,    0,    0, 1193, 1385, 1013, 1010
  5112. ,    0,    0, 1279, 1279,  989,    0,    0, 1024, 1005,    0
  5113. , 1399, 1392,    0,    0,    0,    0, 1283, 1364, 1155,    0
  5114. ,    0, 1283, 1212,    0, 1283, 1283, 1361,    0, 1395,    0
  5115. ,    0, 1145, 1368,    0, 1150, 1237,    0, 1260,    0,    0
  5116. , 1004,    0, 1258, 1276, 1273,    0,    0, 1194,    0, 1375
  5117. , 1197,    0,    0,    0, 1012, 1295,    0,    0,    0, 1301
  5118. ,    0, 1391, 1368,    0, 1308,    0, 1365, 1139,    0,    0
  5119. , 1358, 1205,    0,    0,    0, 1146,    0, 1368,    0, 1236
  5120. ,    0, 1299,    0, 1247,    0, 1274, 1388,    0, 1281, 1287
  5121. ,    0, 1184,  970, 1375,    0, 1141,    0,    0, 1363,    0
  5122. ,    0,    0, 1204, 1142,    0, 1409, 1002,    0, 1275,    0
  5123. , 1387,    0,    0, 1182,    0, 1199, 1140, 1138, 1136,    0
  5124. ,    0, 1143, 1375,    0, 1282, 1306, 1014, 1393, 1213,    0
  5125. ,    0,    0, 1308,    0, 1214, 1389, 1279,    0,    0, 1307
  5126. , 1018, 1279,    0, 1017, 1016)  ;
  5127.         --| Map of states (constant array index) to default reductions.
  5128.         -- NYU Reference Name: DEFAULT
  5129.   
  5130.     type FollowSymbolIndexArray is array ( PositiveParserInteger range <>)
  5131.         of GC.ParserInteger ;
  5132.  
  5133.     FollowSymbolMapIndex : constant FollowSymbolIndexArray :=
  5134.          (    1,    1,    2,    2,    3,    3,    4,   43,   44,   57
  5135. ,   58,   71,   72,   85,   86,   99,  100,  113,  114,  130
  5136. ,  131,  147,  148,  161,  162,  178,  179,  192,  193,  209
  5137. ,  210,  223,  224,  224,  225,  226,  227,  228,  229,  230
  5138. ,  231,  237,  238,  239,  240,  253,  254,  267,  268,  281
  5139. ,  282,  282,  283,  284,  285,  286,  287,  287,  288,  288
  5140. ,  289,  289,  290,  290,  291,  291,  292,  292,  293,  293
  5141. ,  294,  327,  328,  329,  330,  363,  364,  370,  371,  372
  5142. ,  373,  374,  375,  396,  397,  398,  399,  400,  401,  402
  5143. ,  403,  405,  406,  407,  408,  410,  411,  411,  412,  413
  5144. ,  414,  415,  416,  416,  417,  450,  451,  453,  454,  455
  5145. ,  456,  465,  466,  467,  468,  488,  489,  490,  491,  495
  5146. ,  496,  498,  499,  500,  501,  502,  503,  504,  505,  506
  5147. ,  507,  508,  509,  521,  522,  523,  524,  532,  533,  540
  5148. ,  541,  554,  555,  568,  569,  584,  585,  593,  594,  605
  5149. ,  606,  614,  615,  626,  627,  638,  639,  650,  651,  684
  5150. ,  685,  718,  719,  753,  754,  787,  788,  822,  823,  823
  5151. ,  824,  853,  854,  855,  856,  856,  857,  858,  859,  860
  5152. ,  861,  861,  862,  863,  864,  865,  866,  867,  868,  877
  5153. ,  878,  885,  886,  893,  894,  901,  902,  909,  910,  917
  5154. ,  918,  927,  928,  938,  939,  963,  964,  992,  993, 1017
  5155. , 1018, 1047, 1048, 1076, 1077, 1105, 1106, 1112, 1113, 1142
  5156. , 1143, 1172, 1173, 1202, 1203, 1213, 1214, 1222, 1223, 1231
  5157. , 1232, 1240, 1241, 1247, 1248, 1284, 1285, 1312, 1313, 1339
  5158. , 1340, 1365, 1366, 1371, 1372, 1398, 1399, 1425, 1426, 1445
  5159. , 1446, 1472, 1473, 1499, 1500, 1526, 1527, 1553, 1554, 1580
  5160. , 1581, 1607, 1608, 1634, 1635, 1661, 1662, 1688, 1689, 1715
  5161. , 1716, 1742, 1743, 1769, 1770, 1796, 1797, 1823, 1824, 1850
  5162. , 1851, 1877, 1878, 1897, 1898, 1918, 1919, 1921, 1922, 1922
  5163. , 1923, 1926, 1927, 1928, 1929, 1930, 1931, 1951, 1952, 1953
  5164. , 1954, 1956, 1957, 1957, 1958, 1958, 1959, 1961, 1962, 1964
  5165. , 1965, 1965, 1966, 1967, 1968, 1970, 1971, 1972, 1973, 1974
  5166. , 1975, 1977, 1978, 1978, 1979, 1979, 1980, 1980, 1981, 1981
  5167. , 1982, 1994, 1995, 2007, 2008, 2009, 2010, 2010, 2011, 2013
  5168. , 2014, 2015, 2016, 2027, 2028, 2028, 2029, 2032, 2033, 2034
  5169. , 2035, 2061, 2062, 2088, 2089, 2115, 2116, 2118, 2119, 2121
  5170. , 2122, 2124, 2125, 2127, 2128, 2130, 2131, 2133, 2134, 2136
  5171. , 2137, 2138, 2139, 2146, 2147, 2148, 2149, 2156, 2157, 2161
  5172. , 2162, 2169, 2170, 2177, 2178, 2183, 2184, 2185, 2186, 2193
  5173. , 2194, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2221
  5174. , 2222, 2224, 2225, 2230, 2231, 2236, 2237, 2237, 2238, 2238
  5175. , 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2245, 2246, 2247
  5176. , 2248, 2261, 2262, 2275, 2276, 2289, 2290, 2303, 2304, 2307
  5177. , 2308, 2312, 2313, 2317, 2318, 2319, 2320, 2321, 2322, 2342
  5178. , 2343, 2343, 2344, 2345, 2346, 2352)  ;
  5179.   
  5180.     FollowSymbolMap : constant FollowSymbolArray :=
  5181.          (   96,   96,   72,    2,    4,   10,   12,   14,   15,   19
  5182. ,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29
  5183. ,   33,   37,   39,   42,   43,   44,   45,   46,   51,   53
  5184. ,   54,   55,   56,   57,   59,   60,   61,   62,   63,   65
  5185. ,   67,   68,   92,   10,   21,   25,   26,   27,   42,   43
  5186. ,   44,   45,   55,   56,   59,   60,   65,   10,   21,   25
  5187. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5188. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  5189. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  5190. ,   42,   43,   44,   45,   55,   56,   59,   60,   65,   10
  5191. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5192. ,   59,   60,   65,   10,   21,   25,   26,   27,   42,   43
  5193. ,   44,   45,   54,   55,   56,   59,   60,   63,   65,   96
  5194. ,   10,   21,   25,   26,   27,   42,   43,   44,   45,   54
  5195. ,   55,   56,   59,   60,   63,   65,   96,   10,   21,   25
  5196. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5197. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  5198. ,   54,   55,   56,   59,   60,   63,   65,   96,   10,   21
  5199. ,   25,   26,   27,   42,   43,   44,   45,   55,   56,   59
  5200. ,   60,   65,   10,   21,   25,   26,   27,   42,   43,   44
  5201. ,   45,   54,   55,   56,   59,   60,   63,   65,   96,   10
  5202. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5203. ,   59,   60,   65,   79,   80,   88,   72,   80,   80,   88
  5204. ,   31,   33,   58,   72,   75,   80,   85,   75,   79,   10
  5205. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5206. ,   59,   60,   65,   10,   21,   25,   26,   27,   42,   43
  5207. ,   44,   45,   55,   56,   59,   60,   65,   10,   21,   25
  5208. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5209. ,   65,   80,   72,   80,   72,   80,   80,   80,   80,   80
  5210. ,   80,   80,   80,    7,   16,   17,   30,   31,   33,   34
  5211. ,   36,   39,   47,   49,   50,   58,   64,   69,   71,   72
  5212. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  5213. ,   85,   86,   87,   88,   89,   90,   91,   80,   88,    7
  5214. ,   16,   17,   30,   31,   33,   34,   36,   39,   47,   49
  5215. ,   50,   58,   64,   69,   71,   72,   73,   74,   75,   76
  5216. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  5217. ,   89,   90,   91,   33,   72,   75,   80,   84,   85,   88
  5218. ,   80,   88,   80,   88,    7,   30,   31,   33,   36,   39
  5219. ,   47,   58,   64,   72,   75,   80,   81,   82,   83,   84
  5220. ,   85,   86,   88,   89,   90,   91,   72,   75,   72,   75
  5221. ,   72,   75,   47,   80,   88,   80,   88,   47,   80,   88
  5222. ,   80,   72,   75,   72,   75,   38,    7,    9,   30,   31
  5223. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   70
  5224. ,   71,   72,   73,   74,   75,   76,   77,   78,   80,   81
  5225. ,   82,   83,   84,   85,   86,   87,   88,   89,   90,   91
  5226. ,   33,   72,   75,   72,   75,    7,   31,   33,   39,   58
  5227. ,   64,   72,   75,   80,   85,   21,   61,   10,   12,   21
  5228. ,   22,   25,   26,   27,   42,   43,   44,   45,   54,   55
  5229. ,   56,   59,   60,   61,   63,   65,   67,   68,   12,   65
  5230. ,   12,   21,   43,   61,   65,   21,   43,   61,   43,   61
  5231. ,   21,   61,   21,   61,   84,   85,   84,   85,   10,   21
  5232. ,   25,   26,   27,   42,   44,   45,   55,   56,   59,   60
  5233. ,   65,   10,   21,   10,   21,   26,   27,   42,   43,   45
  5234. ,   56,   60,   10,   21,   26,   27,   42,   45,   56,   60
  5235. ,   10,   21,   25,   26,   27,   42,   43,   44,   45,   55
  5236. ,   56,   59,   60,   65,   10,   21,   25,   26,   27,   42
  5237. ,   43,   44,   45,   55,   56,   59,   60,   65,   10,   21
  5238. ,   25,   26,   27,   42,   43,   44,   45,   54,   55,   56
  5239. ,   59,   60,   63,   65,   10,   21,   26,   27,   42,   43
  5240. ,   45,   56,   60,   10,   21,   26,   27,   42,   43,   45
  5241. ,   54,   56,   60,   63,   96,   10,   21,   26,   27,   42
  5242. ,   43,   45,   56,   60,   10,   21,   26,   27,   42,   43
  5243. ,   45,   54,   56,   60,   63,   96,   10,   21,   26,   27
  5244. ,   42,   43,   45,   54,   56,   60,   63,   96,   10,   21
  5245. ,   26,   27,   42,   43,   45,   54,   56,   60,   63,   96
  5246. ,    7,    9,   30,   31,   33,   34,   36,   39,   47,   49
  5247. ,   58,   64,   69,   70,   71,   72,   73,   74,   75,   76
  5248. ,   77,   78,   80,   81,   82,   83,   84,   85,   86,   87
  5249. ,   88,   89,   90,   91,    7,    9,   30,   31,   33,   34
  5250. ,   36,   39,   47,   49,   58,   64,   69,   70,   71,   72
  5251. ,   73,   74,   75,   76,   77,   78,   80,   81,   82,   83
  5252. ,   84,   85,   86,   87,   88,   89,   90,   91,    7,    9
  5253. ,   30,   31,   33,   34,   36,   39,   47,   49,   58,   60
  5254. ,   64,   69,   70,   71,   72,   73,   74,   75,   76,   77
  5255. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  5256. ,   89,   90,   91,    7,    9,   30,   31,   33,   34,   36
  5257. ,   39,   47,   49,   58,   64,   69,   70,   71,   72,   73
  5258. ,   74,   75,   76,   77,   78,   80,   81,   82,   83,   84
  5259. ,   85,   86,   87,   88,   89,   90,   91,    7,    9,   30
  5260. ,   31,   33,   34,   36,   39,   47,   49,   58,   60,   64
  5261. ,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78
  5262. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5263. ,   90,   91,   72,    7,   30,   31,   33,   34,   36,   39
  5264. ,   47,   49,   58,   64,   69,   72,   73,   74,   75,   76
  5265. ,   78,   80,   81,   82,   83,   84,   85,   86,   87,   88
  5266. ,   89,   90,   91,   72,   75,   72,   72,   75,   72,   75
  5267. ,   72,   72,   75,   72,   75,   72,   75,    7,   31,   33
  5268. ,   39,   58,   64,   72,   75,   80,   85,    7,   31,   33
  5269. ,   58,   72,   75,   80,   85,   31,   33,   39,   58,   72
  5270. ,   75,   80,   85,   31,   33,   58,   64,   72,   75,   80
  5271. ,   85,    7,   31,   33,   58,   72,   75,   80,   85,   31
  5272. ,   33,   39,   58,   72,   75,   80,   85,    7,   31,   33
  5273. ,   39,   58,   64,   72,   75,   80,   85,    3,   35,   36
  5274. ,   37,   65,   66,   67,   68,   71,   74,   76,    7,   30
  5275. ,   31,   33,   36,   39,   47,   58,   64,   69,   72,   74
  5276. ,   75,   76,   80,   81,   82,   83,   84,   85,   86,   88
  5277. ,   89,   90,   91,    7,   30,   31,   33,   34,   36,   39
  5278. ,   47,   49,   58,   64,   69,   72,   73,   74,   75,   76
  5279. ,   78,   80,   81,   82,   83,   84,   85,   86,   88,   89
  5280. ,   90,   91,    7,   30,   31,   33,   36,   39,   47,   58
  5281. ,   64,   69,   72,   74,   75,   76,   80,   81,   82,   83
  5282. ,   84,   85,   86,   88,   89,   90,   91,    7,   30,   31
  5283. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   72
  5284. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  5285. ,   85,   86,   87,   88,   89,   90,   91,    7,   30,   31
  5286. ,   33,   34,   36,   39,   47,   49,   58,   64,   69,   72
  5287. ,   73,   74,   75,   76,   78,   80,   81,   82,   83,   84
  5288. ,   85,   86,   88,   89,   90,   91,    7,   30,   31,   33
  5289. ,   34,   36,   39,   47,   49,   58,   64,   69,   72,   73
  5290. ,   74,   75,   76,   78,   80,   81,   82,   83,   84,   85
  5291. ,   86,   88,   89,   90,   91,   35,   37,   65,   66,   67
  5292. ,   68,   71,    7,   30,   31,   33,   34,   36,   39,   47
  5293. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  5294. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5295. ,   90,   91,    7,   30,   31,   33,   34,   36,   39,   47
  5296. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  5297. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5298. ,   90,   91,    7,   30,   31,   33,   34,   36,   39,   47
  5299. ,   49,   58,   64,   69,   72,   73,   74,   75,   76,   78
  5300. ,   80,   81,   82,   83,   84,   85,   86,   87,   88,   89
  5301. ,   90,   91,    3,   35,   36,   37,   65,   66,   67,   68
  5302. ,   71,   74,   76,    3,   35,   36,   37,   65,   66,   67
  5303. ,   68,   71,    3,   35,   36,   37,   65,   66,   67,   68
  5304. ,   71,    3,   35,   36,   37,   65,   66,   67,   68,   71
  5305. ,   35,   37,   65,   66,   67,   68,   71,    7,   16,   17
  5306. ,   30,   31,   33,   34,   36,   39,   47,   49,   50,   58
  5307. ,   61,   64,   69,   70,   71,   72,   73,   74,   75,   76
  5308. ,   77,   78,   80,   81,   82,   83,   84,   85,   86,   87
  5309. ,   88,   89,   90,   91,    2,    4,   10,   12,   14,   15
  5310. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  5311. ,   39,   43,   46,   51,   53,   57,   61,   62,   65,   67
  5312. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  5313. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  5314. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  5315. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  5316. ,   25,   28,   29,   33,   37,   39,   46,   51,   53,   61
  5317. ,   62,   65,   67,   68,   92,   19,   20,   21,   23,   39
  5318. ,   61,    2,    4,   10,   12,   14,   15,   19,   20,   21
  5319. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  5320. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  5321. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  5322. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  5323. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  5324. ,   15,   24,   25,   28,   29,   33,   37,   46,   51,   53
  5325. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  5326. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  5327. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  5328. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  5329. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  5330. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  5331. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  5332. ,   25,   28,   29,   33,   37,   39,   43,   46,   51,   53
  5333. ,   61,   62,   65,   67,   68,   92,    2,    4,   10,   12
  5334. ,   14,   15,   19,   20,   21,   23,   24,   25,   28,   29
  5335. ,   33,   37,   39,   43,   46,   51,   53,   61,   62,   65
  5336. ,   67,   68,   92,    2,    4,   10,   12,   14,   15,   19
  5337. ,   20,   21,   23,   24,   25,   28,   29,   33,   37,   39
  5338. ,   43,   46,   51,   53,   61,   62,   65,   67,   68,   92
  5339. ,    2,    4,   10,   12,   14,   15,   19,   20,   21,   23
  5340. ,   24,   25,   28,   29,   33,   37,   39,   43,   46,   51
  5341. ,   53,   61,   62,   65,   67,   68,   92,    2,    4,   10
  5342. ,   12,   14,   15,   19,   20,   21,   23,   24,   25,   28
  5343. ,   29,   33,   37,   39,   43,   46,   51,   53,   61,   62
  5344. ,   65,   67,   68,   92,    2,    4,   10,   12,   14,   15
  5345. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  5346. ,   39,   43,   46,   51,   53,   61,   62,   65,   67,   68
  5347. ,   92,    2,    4,   10,   12,   14,   15,   19,   20,   21
  5348. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  5349. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  5350. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  5351. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  5352. ,   62,   65,   67,   68,   92,    2,    4,   10,   12,   14
  5353. ,   15,   19,   20,   21,   23,   24,   25,   28,   29,   33
  5354. ,   37,   39,   43,   46,   51,   53,   61,   62,   65,   67
  5355. ,   68,   92,    2,    4,   10,   12,   14,   15,   19,   20
  5356. ,   21,   23,   24,   25,   28,   29,   33,   37,   39,   43
  5357. ,   46,   51,   53,   61,   62,   65,   67,   68,   92,    2
  5358. ,    4,   10,   12,   14,   15,   19,   20,   21,   23,   24
  5359. ,   25,   28,   29,   33,   37,   39,   43,   46,   51,   53
  5360. ,   61,   62,   65,   67,   68,   92,    2,    4,   10,   12
  5361. ,   14,   15,   19,   20,   21,   23,   24,   25,   28,   29
  5362. ,   33,   37,   39,   43,   46,   51,   53,   61,   62,   65
  5363. ,   67,   68,   92,    2,    4,   10,   12,   14,   15,   19
  5364. ,   20,   21,   23,   24,   25,   28,   29,   33,   37,   39
  5365. ,   43,   46,   51,   53,   61,   62,   65,   67,   68,   92
  5366. ,    2,    4,   10,   12,   14,   15,   19,   20,   21,   23
  5367. ,   24,   25,   28,   29,   33,   37,   39,   43,   46,   51
  5368. ,   53,   61,   62,   65,   67,   68,   92,    2,    4,   10
  5369. ,   12,   14,   15,   24,   25,   28,   29,   33,   37,   46
  5370. ,   51,   53,   62,   65,   67,   68,   92,    2,    4,   10
  5371. ,   12,   14,   15,   24,   25,   28,   29,   33,   37,   43
  5372. ,   46,   51,   53,   62,   65,   67,   68,   92,   19,   20
  5373. ,   21,   21,   33,   58,   80,   85,   43,   61,   21,   61
  5374. ,    2,    4,   10,   12,   14,   15,   24,   25,   28,   29
  5375. ,   33,   37,   43,   46,   51,   53,   62,   65,   67,   68
  5376. ,   92,   21,   61,   25,   33,   62,   80,   33,   65,   67
  5377. ,   80,   65,   67,   80,   21,   10,   14,   31,   50,   80
  5378. ,   72,   80,   72,   80,   31,   51,   71,   65,   65,   80
  5379. ,   80,   21,   25,   26,   27,   42,   43,   44,   45,   55
  5380. ,   56,   59,   60,   65,   10,   21,   25,   26,   27,   42
  5381. ,   43,   45,   55,   56,   59,   60,   65,   75,   80,   80
  5382. ,   21,   22,   25,   21,   25,   10,   25,   26,   27,   42
  5383. ,   43,   45,   55,   56,   59,   60,   65,   80,   21,   22
  5384. ,   25,   43,   18,   80,    2,    4,   10,   12,   14,   15
  5385. ,   19,   20,   21,   23,   24,   25,   28,   29,   33,   37
  5386. ,   39,   43,   46,   51,   53,   61,   62,   65,   67,   68
  5387. ,   92,    2,    4,   10,   12,   14,   15,   19,   20,   21
  5388. ,   23,   24,   25,   28,   29,   33,   37,   39,   43,   46
  5389. ,   51,   53,   61,   62,   65,   67,   68,   92,    2,    4
  5390. ,   10,   12,   14,   15,   19,   20,   21,   23,   24,   25
  5391. ,   28,   29,   33,   37,   39,   43,   46,   51,   53,   61
  5392. ,   62,   65,   67,   68,   92,   19,   21,   39,   19,   21
  5393. ,   39,   19,   21,   39,   19,   21,   39,   19,   21,   39
  5394. ,   19,   21,   39,   19,   21,   39,   75,   80,   26,   27
  5395. ,   42,   43,   45,   54,   63,   96,   71,   80,   26,   27
  5396. ,   42,   43,   45,   54,   63,   96,   26,   27,   42,   45
  5397. ,   54,   26,   27,   42,   43,   45,   54,   63,   96,   26
  5398. ,   27,   42,   43,   45,   54,   63,   96,   26,   27,   42
  5399. ,   45,   54,   63,   75,   80,   26,   27,   42,   43,   45
  5400. ,   54,   60,   63,    2,    4,   10,   12,   14,   15,   24
  5401. ,   25,   28,   29,   33,   37,   43,   46,   51,   53,   62
  5402. ,   65,   67,   68,   92,   21,   61,   84,   85,   84,   85
  5403. ,   80,   26,   42,   45,   26,   42,   45,   59,   63,   65
  5404. ,   26,   42,   45,   59,   63,   65,   80,   80,   72,   75
  5405. ,   72,   75,   72,   75,   85,   72,   75,   10,   21,   25
  5406. ,   26,   27,   42,   43,   44,   45,   55,   56,   59,   60
  5407. ,   65,   10,   21,   25,   26,   27,   42,   43,   44,   45
  5408. ,   55,   56,   59,   60,   65,   10,   21,   25,   26,   27
  5409. ,   42,   43,   44,   45,   55,   56,   59,   60,   65,   10
  5410. ,   21,   25,   26,   27,   42,   43,   44,   45,   55,   56
  5411. ,   59,   60,   65,   21,   65,   67,   68,   21,   43,   65
  5412. ,   67,   68,   21,   43,   65,   67,   68,   72,   75,   84
  5413. ,   85,    2,    4,   10,   12,   14,   15,   24,   25,   28
  5414. ,   29,   33,   37,   43,   46,   51,   53,   62,   65,   67
  5415. ,   68,   92,   21,   21,   61,   26,   27,   42,   45,   54
  5416. ,   60,   63)  ;
  5417.         --| Map of states to sets of follow symbols
  5418.         -- NYU Reference Name: FOLLOW
  5419.  
  5420.     ------------------------------------------------------------------
  5421.     -- Action_Token_Map
  5422.     ------------------------------------------------------------------
  5423.  
  5424.     
  5425.     type Action_Token_Array_Index is array(
  5426.         PositiveParserInteger range <>) of GC.ParserInteger ;
  5427.         --| For indexing the All Action Token Array.
  5428.         --| Maps a given state into the lower and upper bounds of a slice
  5429.         --| of the All Action Index Array.
  5430.     
  5431.     Action_Token_MapIndex : constant Action_Token_Array_Index :=
  5432.          (    1,    1,    2,    2,    3,    2,    3,    9,   10,   11
  5433. ,   12,   11,   12,   16,   17,   17,   18,   17,   18,   17
  5434. ,   18,   28,   29,   28,   29,   30,   31,   30,   31,   32
  5435. ,   33,   33,   34,   34,   35,   34,   35,   34,   35,   34
  5436. ,   35,   34,   35,   34,   35,   34,   35,   36,   37,   37
  5437. ,   38,   37,   38,   37,   38,   37,   38,   37,   38,   38
  5438. ,   39,   41,   42,   42,   43,   42,   43,   42,   43,   43
  5439. ,   44,   43,   44,   43,   44,   71,   72,   71,   72,   71
  5440. ,   72,   71,   72,   83,   84,   83,   84,   83,   84,   84
  5441. ,   85,   84,   85,   93,   94,   97,   98,   97,   98,   97
  5442. ,   98,   97,   98,   97,   98,   98,   99,   98,   99,  101
  5443. ,  102,  102,  103,  103,  104,  104,  105,  105,  106,  106
  5444. ,  107,  109,  110,  113,  114,  113,  114,  114,  115,  114
  5445. ,  115,  121,  122,  121,  122,  121,  122,  121,  122,  130
  5446. ,  131,  130,  131,  130,  131,  130,  131,  133,  134,  136
  5447. ,  137,  137,  138,  138,  139,  139,  140,  140,  141,  141
  5448. ,  142,  141,  142,  141,  142,  142,  143,  154,  155,  164
  5449. ,  165,  166,  167,  167,  168,  167,  168,  169,  170,  170
  5450. ,  171,  170,  171,  170,  171,  170,  171,  171,  172,  172
  5451. ,  173,  172,  173,  173,  174,  173,  174,  175,  176,  177
  5452. ,  178,  178,  179,  178,  179,  180,  181,  196,  197,  200
  5453. ,  201,  200,  201,  201,  202,  202,  203,  202,  203,  202
  5454. ,  203,  203,  204,  203,  204,  204,  205,  204,  205,  204
  5455. ,  205,  204,  205,  215,  216,  215,  216,  215,  216,  215
  5456. ,  216,  215,  216,  226,  227,  237,  238,  248,  249,  253
  5457. ,  254,  264,  265,  268,  269,  268,  269,  279,  280,  280
  5458. ,  281,  292,  293,  304,  305,  315,  316,  326,  327,  337
  5459. ,  338,  348,  349,  349,  350,  350,  351,  350,  351,  350
  5460. ,  351,  350,  351,  359,  360,  359,  360,  359,  360,  359
  5461. ,  360,  359,  360,  368,  369,  368,  369,  368,  369,  375
  5462. ,  376,  378,  379,  378,  379,  378,  379,  379,  380,  380
  5463. ,  381,  381,  382,  382,  383,  384,  385,  384,  385,  385
  5464. ,  386,  385,  386,  386,  387,  387,  388,  388,  389,  390
  5465. ,  391,  391,  392,  392,  393,  394,  395,  395,  396,  395
  5466. ,  396,  396,  397,  399,  400,  400,  401,  400,  401,  401
  5467. ,  402,  403,  404,  404,  405,  405,  406,  405,  406,  405
  5468. ,  406,  405,  406,  405,  406,  405,  406,  405,  406,  405
  5469. ,  406,  405,  406,  405,  406,  405,  406,  405,  406,  405
  5470. ,  406,  406,  407,  406,  407,  406,  407,  406,  407,  406
  5471. ,  407,  406,  407,  406,  407,  409,  410,  410,  411,  410
  5472. ,  411,  410,  411,  410,  411,  410,  411,  412,  413,  415
  5473. ,  416,  415,  416,  415,  416,  415,  416,  415,  416,  415
  5474. ,  416,  415,  416,  418,  419,  418,  419,  418,  419,  419
  5475. ,  420,  419,  420,  419,  420,  420,  421,  422,  423,  423
  5476. ,  424,  425,  426,  425,  426,  436,  437,  437,  438,  438
  5477. ,  439,  439,  440,  450,  451,  461,  462,  461,  462,  472
  5478. ,  473,  483,  484,  483,  484,  485,  486,  485,  486,  497
  5479. ,  498,  497,  498,  498,  499,  498,  499,  498,  499,  498
  5480. ,  499,  499,  500,  499,  500,  499,  500,  500,  501,  500
  5481. ,  501,  500,  501,  500,  501,  500,  501,  500,  501,  500
  5482. ,  501,  500,  501,  501,  502,  501,  502,  501,  502,  501
  5483. ,  502,  501,  502,  501,  502,  501,  502,  501,  502,  502
  5484. ,  503,  513,  514,  521,  522,  521,  522,  532,  533,  532
  5485. ,  533,  532,  533,  532,  533,  532,  533,  532,  533,  543
  5486. ,  544,  554,  555,  554,  555,  554,  555,  554,  555,  555
  5487. ,  556,  555,  556,  556,  557,  557,  558,  557,  558,  559
  5488. ,  560,  560,  561,  561,  562,  562,  563,  563,  564,  563
  5489. ,  564,  564,  565,  564,  565,  568,  569,  571,  572,  571
  5490. ,  572,  571,  572,  572,  573,  574,  575,  574,  575,  575
  5491. ,  576,  578,  579,  579,  580,  581,  582,  592,  593,  593
  5492. ,  594,  594,  595,  595,  596,  598,  599,  599,  600,  603
  5493. ,  604,  604,  605,  605,  606,  608,  609,  608,  609,  609
  5494. ,  610,  610,  611,  611,  612,  617,  618,  619,  620,  620
  5495. ,  621,  641,  642,  643,  644,  644,  645,  644,  645,  644
  5496. ,  645,  645,  646,  645,  646,  646,  647,  647,  648,  647
  5497. ,  648,  647,  648,  647,  648,  647,  648,  647,  648,  647
  5498. ,  648,  647,  648,  647,  648,  647,  648,  658,  659,  669
  5499. ,  670,  669,  670,  669,  670,  669,  670,  681,  682,  681
  5500. ,  682,  692,  693,  703,  704,  703,  704,  704,  705,  704
  5501. ,  705,  704,  705,  704,  705,  704,  705,  704,  705,  704
  5502. ,  705,  707,  708,  709,  710,  710,  711,  710,  711,  712
  5503. ,  713,  720,  721,  721,  722,  725,  726,  726,  727,  727
  5504. ,  728,  728,  729,  729,  730,  732,  733,  734,  735,  735
  5505. ,  736,  736,  737,  736,  737,  737,  738,  748,  749,  748
  5506. ,  749,  748,  749,  759,  760,  759,  760,  762,  763,  766
  5507. ,  767,  777,  778,  778,  779,  779,  780,  780,  781,  781
  5508. ,  782,  781,  782,  791,  792,  792,  793,  792,  793,  794
  5509. ,  795,  795,  796,  798,  799,  800,  801,  801,  802,  802
  5510. ,  803,  807,  808,  811,  812,  812,  813,  813,  814,  815
  5511. ,  816,  815,  816,  815,  816,  815,  816,  815,  816,  815
  5512. ,  816,  815,  816,  815,  816,  815,  816,  817,  818,  818
  5513. ,  819,  819,  820,  822,  823,  823,  824,  834,  835,  845
  5514. ,  846,  848,  849,  849,  850,  860,  861,  861,  862,  863
  5515. ,  864,  875,  876,  875,  876,  876,  877,  877,  878,  877
  5516. ,  878,  882,  883,  882,  883,  882,  883,  882,  883,  902
  5517. ,  903,  902,  903,  902,  903,  902,  903,  902,  903,  902
  5518. ,  903,  902,  903,  902,  903,  902,  903,  902,  903,  902
  5519. ,  903,  902,  903,  902,  903,  902,  903,  902,  903,  902
  5520. ,  903,  902,  903,  902,  903,  905,  906,  907,  908,  907
  5521. ,  908,  907,  908,  907,  908,  907,  908,  907,  908,  907
  5522. ,  908,  907,  908,  907,  908,  908,  909,  909,  910,  909
  5523. ,  910,  909,  910,  910,  911,  910,  911,  910,  911,  910
  5524. ,  911,  921,  922,  921,  922,  921,  922,  922,  923,  923
  5525. ,  924,  924,  925,  925,  926,  926,  927,  927,  928,  928
  5526. ,  929,  929,  930,  929,  930,  930,  931,  931,  932,  931
  5527. ,  932,  931,  932,  931,  932,  931,  932,  932,  933,  933
  5528. ,  934,  933,  934,  933,  934,  936,  937,  936,  937,  936
  5529. ,  937,  936,  937,  947,  948,  948,  949,  959,  960,  959
  5530. ,  960,  959,  960,  960,  961,  960,  961,  985,  986, 1010
  5531. , 1011, 1010, 1011, 1010, 1011, 1010, 1011, 1011, 1012, 1011
  5532. , 1012, 1012, 1013, 1023, 1024, 1024, 1025, 1036, 1037, 1037
  5533. , 1038, 1038, 1039, 1040, 1041, 1040, 1041, 1041, 1042, 1045
  5534. , 1046, 1045, 1046, 1046, 1047, 1047, 1048, 1058, 1059, 1069
  5535. , 1070, 1070, 1071, 1071, 1072, 1072, 1073, 1073, 1074, 1075
  5536. , 1076, 1076, 1077, 1076, 1077, 1076, 1077, 1076, 1077, 1076
  5537. , 1077, 1076, 1077, 1076, 1077, 1076, 1077, 1076, 1077, 1076
  5538. , 1077, 1076, 1077, 1077, 1078, 1078, 1079, 1078, 1079, 1079
  5539. , 1080, 1079, 1080, 1090, 1091, 1091, 1092, 1102, 1103, 1103
  5540. , 1104, 1104, 1105, 1105, 1106, 1105, 1106, 1106, 1107, 1107
  5541. , 1108, 1110, 1111, 1121, 1122, 1121, 1122, 1121, 1122, 1121
  5542. , 1122, 1121, 1122, 1121, 1122, 1122, 1123, 1123, 1124, 1124
  5543. , 1125, 1124, 1125, 1124, 1125, 1127, 1128, 1128, 1129, 1129
  5544. , 1130, 1130, 1131, 1141, 1142, 1141, 1142, 1144, 1145, 1146
  5545. , 1147, 1146, 1147, 1146, 1147, 1147, 1148, 1147, 1148, 1147
  5546. , 1148, 1149, 1150, 1149, 1150, 1150, 1151, 1158, 1159, 1158
  5547. , 1159, 1163, 1164, 1164, 1165, 1169, 1170, 1169, 1170, 1180
  5548. , 1181, 1181, 1182, 1207, 1208, 1207, 1208, 1207, 1208, 1207
  5549. , 1208, 1208, 1209, 1208, 1209, 1219, 1220, 1220, 1221, 1220
  5550. , 1221, 1221, 1222, 1223, 1224, 1224, 1225, 1224, 1225, 1224
  5551. , 1225, 1224, 1225, 1224, 1225, 1225, 1226, 1225, 1226, 1225
  5552. , 1226, 1236, 1237, 1236, 1237, 1236, 1237, 1236, 1237, 1236
  5553. , 1237, 1237, 1238, 1237, 1238, 1238, 1239, 1240, 1241, 1240
  5554. , 1241, 1240, 1241, 1240, 1241, 1241, 1242, 1243, 1244, 1254
  5555. , 1255, 1255, 1256, 1256, 1257, 1257, 1258, 1258, 1259, 1262
  5556. , 1263, 1262, 1263, 1263, 1264, 1263, 1264, 1263, 1264, 1263
  5557. , 1264, 1263, 1264, 1264, 1265, 1265, 1266, 1267, 1268, 1267
  5558. , 1268, 1267, 1268, 1267, 1268, 1268, 1269, 1268, 1269, 1268
  5559. , 1269, 1269, 1270, 1270, 1271, 1271, 1272, 1271, 1272, 1271
  5560. , 1272, 1271, 1272, 1271, 1272, 1271, 1272, 1271, 1272, 1271
  5561. , 1272, 1271, 1272, 1273, 1274, 1274, 1275, 1278, 1279, 1278
  5562. , 1279, 1278, 1279, 1279, 1280, 1280, 1281, 1281, 1282, 1282
  5563. , 1283, 1284, 1285, 1284, 1285, 1284, 1285, 1288, 1289, 1289
  5564. , 1290, 1290, 1291, 1291, 1292, 1293, 1294, 1304, 1305, 1306
  5565. , 1307, 1306, 1307, 1306, 1307, 1307, 1308, 1318, 1319, 1318
  5566. , 1319, 1318, 1319, 1318, 1319, 1318, 1319, 1318, 1319, 1318
  5567. , 1319, 1319, 1320, 1330, 1331, 1334, 1335, 1334, 1335, 1334
  5568. , 1335, 1334, 1335, 1334, 1335, 1334, 1335, 1334, 1335, 1334
  5569. , 1335, 1336, 1337, 1336, 1337, 1337, 1338, 1338, 1339, 1338
  5570. , 1339, 1339, 1340, 1340, 1341, 1340, 1341, 1340, 1341, 1341
  5571. , 1342, 1342, 1343, 1344, 1345, 1344, 1345, 1344, 1345, 1344
  5572. , 1345, 1345, 1346, 1345, 1346, 1347, 1348, 1347, 1348, 1347
  5573. , 1348, 1351, 1352, 1351, 1352, 1352, 1353, 1353, 1354, 1354
  5574. , 1355, 1356, 1357, 1356, 1357, 1357, 1358, 1368, 1369, 1368
  5575. , 1369, 1368, 1369, 1368, 1369, 1379, 1380, 1380, 1381, 1384
  5576. , 1385, 1384, 1385, 1388, 1389, 1390, 1391, 1391, 1392, 1392
  5577. , 1393, 1392, 1393, 1393, 1394, 1393, 1394, 1393, 1394, 1394
  5578. , 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1400, 1401, 1402
  5579. , 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1402
  5580. , 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1402, 1403, 1405
  5581. , 1406, 1405, 1406, 1432, 1433, 1433, 1434, 1433, 1434, 1433
  5582. , 1434, 1433, 1434, 1435, 1436, 1435, 1436, 1436, 1437, 1438
  5583. , 1439, 1438, 1439, 1439, 1440, 1463, 1464, 1463, 1464, 1463
  5584. , 1464, 1465, 1466, 1465, 1466, 1465, 1466, 1465, 1466, 1466
  5585. , 1467, 1466, 1467, 1466, 1467, 1466, 1467, 1467, 1468, 1479
  5586. , 1480, 1480, 1481, 1481, 1482, 1482, 1483, 1482, 1483, 1483
  5587. , 1484, 1484, 1485, 1484, 1485, 1484, 1485, 1484, 1485, 1485
  5588. , 1486, 1487, 1488, 1499, 1500, 1499, 1500, 1507, 1508, 1507
  5589. , 1508, 1508, 1509, 1508, 1509, 1508, 1509, 1509, 1510, 1510
  5590. , 1511, 1521, 1522, 1522, 1523, 1523, 1524, 1524, 1525, 1535
  5591. , 1536, 1536, 1537, 1536, 1537, 1537, 1538, 1538, 1539, 1538
  5592. , 1539, 1539, 1540, 1540, 1541, 1540, 1541, 1540, 1541, 1540
  5593. , 1541, 1542, 1543, 1552, 1553, 1552, 1553, 1552, 1553, 1563
  5594. , 1564, 1566, 1567, 1567, 1568, 1569, 1570, 1570, 1571, 1582
  5595. , 1583, 1584, 1585, 1584, 1585, 1584, 1585, 1584, 1585, 1595
  5596. , 1596, 1596, 1597, 1596, 1597, 1597, 1598, 1600, 1601, 1600
  5597. , 1601, 1600, 1601, 1600, 1601, 1605, 1606, 1605, 1606, 1606
  5598. , 1607, 1617, 1618, 1617, 1618, 1618, 1619, 1619, 1620, 1619
  5599. , 1620, 1619, 1620, 1621, 1622, 1621, 1622, 1622, 1623, 1625
  5600. , 1626, 1625, 1626, 1626, 1627, 1626, 1627, 1626, 1627, 1626
  5601. , 1627, 1627, 1628, 1628, 1629, 1628, 1629, 1629, 1630, 1629
  5602. , 1630, 1629, 1630, 1630, 1631, 1631, 1632, 1636, 1637, 1637
  5603. , 1638, 1637, 1638, 1638, 1639, 1639, 1640, 1640, 1641, 1640
  5604. , 1641, 1641, 1642, 1641, 1642, 1642, 1643, 1643, 1644, 1643
  5605. , 1644, 1644, 1645, 1644, 1645, 1644, 1645, 1645, 1646, 1646
  5606. , 1647, 1646, 1647, 1646, 1647, 1647, 1648, 1649, 1650, 1650
  5607. , 1651, 1650, 1651, 1651, 1652, 1652, 1653, 1653, 1654, 1653
  5608. , 1654, 1654, 1655, 1654, 1655, 1658, 1659, 1658, 1659, 1659
  5609. , 1660, 1659, 1660, 1660, 1661, 1662, 1663, 1662, 1663, 1663
  5610. , 1664, 1664, 1665, 1664, 1665, 1664, 1665, 1664, 1665, 1665
  5611. , 1666, 1665, 1666, 1667, 1668, 1668, 1669, 1668, 1669, 1669
  5612. , 1670, 1670, 1671, 1671, 1672, 1671, 1672, 1671, 1672, 1672
  5613. , 1673, 1672, 1673, 1672, 1673, 1673, 1674, 1673, 1674, 1674
  5614. , 1675, 1674, 1675, 1676, 1677, 1677, 1678, 1677, 1678, 1679
  5615. , 1680, 1679, 1680, 1679, 1680, 1679, 1680, 1679, 1680, 1680
  5616. , 1681, 1681, 1682, 1681, 1682, 1681, 1682, 1693, 1694, 1693
  5617. , 1694, 1693, 1694, 1693, 1694, 1693, 1694, 1693, 1694, 1694
  5618. , 1695, 1696, 1697, 1697, 1698, 1697, 1698, 1699, 1700, 1699
  5619. , 1700, 1699, 1700, 1700, 1701, 1702, 1703, 1703, 1704, 1703
  5620. , 1704, 1703, 1704, 1704, 1705, 1705, 1706, 1705, 1706, 1705
  5621.  ) ;
  5622.     
  5623.     Action_Token_Map : constant Action_Token_Array :=
  5624.          (   43,   65,   26,   27,   42,   43,   45,   54,   63,   71
  5625. ,   80,   45,   26,   27,   42,   54,   63,   37,   68,   74
  5626. ,    3,   35,   36,   65,   66,   67,   71,   76,   65,   67
  5627. ,   11,   65,   65,   71,   31,   80,   80,   80,   26,   42
  5628. ,   45,   65,   65,    7,   30,   64,   69,   70,   71,   72
  5629. ,   73,   75,   78,   84,   34,   36,   39,   47,   49,   74
  5630. ,   76,   77,   81,   82,   83,   85,   86,   87,   89,   90
  5631. ,   91,    3,   67,   71,   74,   35,   36,   37,   40,   65
  5632. ,   66,   68,   76,   72,   36,   30,   81,   82,   83,   86
  5633. ,   89,   90,   91,   71,   77,   47,   70,   75,    7,   39
  5634. ,   64,    7,   39,   64,    7,   39,   69,   74,   76,   34
  5635. ,   49,   73,   78,   87,   35,   37,   65,   66,   67,   68
  5636. ,   71,    3,   37,   65,   66,   67,   68,   71,   35,   36
  5637. ,   31,   51,   71,   59,   63,   65,   65,   31,   71,   65
  5638. ,   35,   43,   26,   27,   42,   44,   45,   21,   25,   55
  5639. ,   56,   59,   60,   65,   27,   55,   56,   59,   60,   25
  5640. ,   26,   42,   45,   65,   10,   21,   65,   65,   67,   65
  5641. ,   43,   60,   71,   70,   77,   84,   85,   85,   72,   75
  5642. ,   30,   36,   72,   81,   82,   83,   84,   85,   86,   90
  5643. ,   91,    7,   39,   64,   75,   89,   47,   70,   71,   77
  5644. ,   72,   75,   80,   30,    3,   65,   66,   67,   68,   76
  5645. ,   35,   36,   37,   71,   74,   35,   37,   66,   74,    3
  5646. ,   36,   65,   67,   68,   71,   76,   35,   36,   37,   65
  5647. ,   66,   67,   68,   71,   76,    3,   74,   35,   65,    3
  5648. ,   36,   37,   66,   67,   68,   71,   74,   76,   47,   16
  5649. ,   17,   65,   71,   37,   68,   71,    3,   35,   36,   65
  5650. ,   66,   67,   74,   76,   65,   67,   68,    6,   35,   36
  5651. ,   65,   66,   67,   68,   74,    3,   37,   71,   76,   75
  5652. ,    3,   35,   36,   37,   58,   68,   71,   74,   76,   65
  5653. ,   66,   67,    3,   35,   36,   37,   65,   66,   67,   68
  5654. ,   76,   19,   71,   74,    3,   65,   35,   36,   37,   66
  5655. ,   67,   68,   71,   74,   76,    3,   65,   66,   67,   35
  5656. ,   36,   37,   68,   71,   74,   76,   36,   66,   68,   71
  5657. ,   74,    3,   35,   37,   65,   67,   76,   35,   36,   37
  5658. ,   67,   68,   71,   74,    3,   65,   66,   76,   58,   19
  5659. ,   36,   37,   66,   67,   68,    3,   35,   65,   71,   35
  5660. ,   36,   37,   65,   66,   67,   68,   71,    3,   35,   37
  5661. ,   65,   66,   67,   68,   71,   77,   70,   71,   35,   65
  5662. ,   65,   65,   26,   45,   79,   31,   35,   65,   72,   77
  5663. ,   65,   10,   65,   67,   65,   65,   65,   67,   68,   65
  5664. ,   65,   59,   65,   65,   65,   79,   31,   50,   80,   80
  5665. ,   11,   65,   65,   11,   59,   31,   50,   80,   65,   80
  5666. ,   51,   71,   31,   80,   75,   35,   36,   37,   66,   67
  5667. ,   68,   71,   74,    3,   65,   76,   71,   65,   65,    3
  5668. ,   68,   74,   35,   36,   37,   65,   66,   67,   71,   76
  5669. ,    3,   35,   37,   65,   71,   74,   36,   66,   67,   68
  5670. ,   76,   35,   36,   37,   65,   71,   74,   76,    3,   66
  5671. ,   67,   68,    3,   35,   37,   74,   76,   36,   65,   66
  5672. ,   67,   68,   71,   84,   85,    3,   66,   67,   68,   71
  5673. ,   74,   76,   35,   36,   37,   40,   65,   75,   86,   86
  5674. ,   72,   65,    3,   36,   65,   66,   76,   35,   37,   67
  5675. ,   68,   71,   74,   36,   81,   83,   89,   90,   91,   30
  5676. ,   82,    3,   35,   66,   67,   71,   74,   76,   36,   37
  5677. ,   65,   68,   37,   65,   66,   67,   68,   71,   74,   76
  5678. ,    3,   35,   36,   36,   65,   74,   76,    3,   35,   37
  5679. ,   66,   67,   68,   71,   65,   77,   79,   31,   71,   31
  5680. ,   75,   30,   65,   65,   42,   45,   26,   56,   77,   71
  5681. ,   80,   80,   71,   80,   60,   77,   70,   71,   60,   31
  5682. ,   50,   21,   25,   26,   56,   59,   60,   65,   27,   42
  5683. ,   45,   55,   31,   65,   31,   71,   31,   80,   77,   23
  5684. ,    8,   13,   65,   43,   35,   68,   65,   67,   65,   65
  5685. ,   43,   26,   27,   42,   45,   56,   60,   35,   54,   65
  5686. ,    4,   10,   14,   15,   28,   92,    2,   12,   24,   25
  5687. ,   29,   33,   37,   43,   46,   51,   53,   62,   65,   67
  5688. ,   68,   23,   21,   80,   65,   43,   72,    3,   35,   36
  5689. ,   37,   71,   76,   65,   66,   67,   68,   74,    3,   35
  5690. ,   36,   37,   65,   67,   68,   66,   71,   74,   76,    3
  5691. ,   35,   36,   37,   65,   71,   76,   40,   66,   67,   68
  5692. ,   74,   36,   65,   66,   67,   68,   74,   76,    3,   35
  5693. ,   37,   71,    3,   35,   36,   37,   65,   66,   67,   68
  5694. ,   71,   74,   76,   75,   71,   77,   80,   30,   41,   65
  5695. ,   72,   80,    5,    8,   16,   17,   47,   71,   32,   44
  5696. ,   65,   65,   67,   68,   94,   80,   65,   41,   88,   77
  5697. ,   71,   80,   80,   72,   11,   11,   31,   36,   37,   65
  5698. ,   68,   76,    3,   35,   66,   67,   71,   74,    3,   65
  5699. ,   74,   35,   36,   37,   66,   67,   68,   71,   76,    9
  5700. ,   48,   71,   17,   47,   16,   65,   36,   37,   65,   67
  5701. ,   68,   74,    3,   35,   66,   71,   76,   65,   65,   65
  5702. ,   31,    5,    8,   44,   48,   16,   17,   32,   35,   47
  5703. ,   71,   65,   75,   80,   71,    8,   65,   88,   50,   80
  5704. ,   88,   88,   16,   17,   47,   50,   71,   70,   71,   80
  5705. ,   77,   31,   31,   11,   65,   80,   31,   80,   80,   65
  5706. ,   67,   68,   65,    3,   37,   74,   76,   35,   36,   65
  5707. ,   66,   67,   68,   71,   35,   65,   66,   68,   71,   74
  5708. ,    3,   36,   37,   67,   76,   61,   65,   80,   65,   37
  5709. ,   65,   66,   67,   68,   74,    3,   35,   36,   71,   76
  5710. ,   80,   65,   80,   35,   36,   37,   71,   74,   76,    3
  5711. ,   65,   66,   67,   68,   80,   79,   65,   77,   88,   70
  5712. ,   71,   80,    2,    4,   12,   29,   46,   62,   65,   67
  5713. ,   10,   14,   15,   24,   25,   28,   33,   37,   51,   53
  5714. ,   68,   92,   25,   33,   62,   14,   10,   75,   86,   75
  5715. ,    3,   35,   36,   37,   76,   65,   66,   67,   68,   71
  5716. ,   74,   88,   51,   65,   65,   71,   94,   94,   44,   94
  5717. ,   94,   80,   79,   70,   71,   77,   65,   71,   74,   76
  5718. ,    3,   35,   36,   37,   66,   67,   68,   80,   35,   36
  5719. ,   37,   65,   66,   67,   68,   71,   74,    3,   76,   65
  5720. ,   30,   49,   64,   71,   74,   90,    7,   34,   36,   39
  5721. ,   69,   70,   72,   73,   75,   76,   77,   78,   81,   82
  5722. ,   83,   85,   87,   89,   91,    7,   64,   76,   78,   81
  5723. ,   82,   83,   90,   91,   30,   34,   36,   39,   49,   69
  5724. ,   70,   71,   72,   73,   74,   75,   77,   85,   87,   89
  5725. ,   85,   72,    3,   35,   36,   66,   67,   68,   74,   37
  5726. ,   65,   71,   76,    9,   35,   36,   37,   40,   66,   67
  5727. ,   68,   71,   74,   76,    3,   65,   80,   80,   80,   77
  5728. ,   80,   16,   17,   71,   47,   43,   22,   67,   68,   71
  5729. ,   74,   76,    3,   35,   36,   37,   65,   66,    3,   66
  5730. ,   71,   76,   35,   36,   37,   65,   67,   68,   74,   44
  5731. ,   65,   80,   37,   65,   68,   80,   47,   47,   65,   74
  5732. ,   76,    3,   35,   36,   37,   65,   66,   67,   68,   71
  5733. ,   38,   35,   37,   76,    3,   36,   65,   66,   67,   68
  5734. ,   71,   74,   88,   88,   65,   80,   80,   65,   67,   68
  5735. ,    3,   36,   37,   67,   76,   35,   65,   66,   68,   71
  5736. ,   74,   54,   54,   43,   70,   77,   71,   71,   31,   80
  5737. ,    3,   35,   36,   37,   65,   67,   76,   66,   68,   71
  5738. ,   74,   61,   77,   80,   77,   80,   58,   80,   77,   80
  5739. ,   15,   67,   68,    4,   43,   57,   61,   65,   10,   14
  5740. ,   25,   33,   62,   93,   16,   17,   65,   71,   47,    3
  5741. ,   36,   37,   65,   35,   66,   67,   68,   71,   74,   76
  5742. ,   43,   12,   14,   15,   19,   20,   24,   25,   29,   33
  5743. ,   39,   61,   65,   67,   68,    2,    4,   10,   21,   23
  5744. ,   28,   37,   46,   51,   53,   62,   92,   65,    3,   74
  5745. ,   35,   36,   37,   65,   66,   67,   68,   71,   76,   33
  5746. ,   65,   43,   61,   21,   65,    3,   66,   68,   71,   76
  5747. ,   35,   36,   37,   65,   67,   74,   72,   65,   72,   80
  5748. ,   31,   72,   75,   35,   36,   37,   65,   71,   74,    3
  5749. ,   66,   67,   68,   76,   80,   80,   34,   43,   21,   65
  5750. ,   67,   68,   75,   22,   65,   21,   25,   80,   80,   21
  5751. ,   43,   72,   80,   77,   77,   47,   70,   71,   65,   80
  5752. ,   80,   80,   77,   80,   71,   77,   70,   80,   72,   80
  5753. ,   80,   75,   80,    3,   66,   67,   68,   71,   74,   76
  5754. ,   35,   36,   37,   65,   18,   80,   80,   65,   67,   71
  5755. ,   74,   76,    3,   35,   36,   37,   66,   68,   80,   35
  5756. ,   36,   37,   67,   74,   76,    3,   65,   66,   68,   71
  5757. ,   70,   71,   77,   80,   39,   19,   80,   80,   30,   21
  5758. ,   65,   80,   40,   65,   61,   72,   75,   47,   70,   71
  5759. ,   77,   88,   31,   65,   72,   75,   80,    3,   37,   65
  5760. ,   67,   68,   71,   74,   76,   35,   36,   66,    3,   65
  5761. ,   67,   68,   71,   74,   76,   35,   36,   37,   66,   48
  5762. ,    9,   70,   71,   77,   21,   67,   68,   65,   21,   25
  5763. ,   71,   65,   43,   48,   65,   12,   72,   75,   80,   31
  5764. ,   72,   75,   67,   68,   65,   34,   36,   47,   49,   73
  5765. ,   74,   76,   78,   81,   83,   89,   91,    7,   30,   39
  5766. ,   64,   69,   70,   71,   72,   75,   77,   79,   82,   86
  5767. ,   87,   90,   72,   43,   61,   80,   19,   20,   85,    2
  5768. ,   10,   12,   14,   15,   21,   33,   37,   39,   43,   46
  5769. ,   65,   68,   92,    4,   19,   24,   25,   28,   29,   51
  5770. ,   53,   62,   67,   19,   39,   21,   43,    3,   76,   35
  5771. ,   36,   37,   52,   65,   66,   67,   68,   71,   74,   33
  5772. ,   21,   80,   85,   77,   80,   72,   75,   35,   36,   37
  5773. ,   67,   74,   76,   94,    3,   65,   66,   68,   71,    5
  5774. ,    8,   16,   17,   32,   47,   71,   44,   80,   80,   80
  5775. ,    3,   35,   36,   37,   66,   67,   68,   71,   74,   76
  5776. ,   65,   43,   48,   65,    3,   35,   37,   65,   66,   68
  5777. ,   71,   74,   76,   36,   67,   80,   43,   43,   65,   79
  5778. ,   65,   68,    5,    8,   16,   32,   35,   71,   17,   44
  5779. ,   47,   48,    3,   36,   37,   65,   67,   68,   71,   74
  5780. ,   35,   66,   76,   70,   71,   77,   71,   72,   80,   21
  5781. ,    3,   37,   66,   67,   35,   36,   40,   65,   68,   71
  5782. ,   74,   76,   21,   61,    3,   37,   65,   66,   74,   76
  5783. ,   35,   36,   67,   68,   71,   21,   43,    4,   15,   57
  5784. ,    4,   43,   57,   61,   15,   53,    3,   37,   65,   67
  5785. ,   68,   76,   35,   36,   66,   71,   74,   65,   33,   85
  5786. ,   84,   38,   68,   65,   67,   80,   47,   80,   72,   31
  5787. ,   65,   12,   43,   61,   65,   21,   43,   44,   80,   80
  5788. ,   65,   65,   85,   12,   58,   29,   21,   15,   43,   80
  5789. ,   80,   65,   65,   65,   47,   77,   70,   71,   80,   71
  5790. ,   72,   80,   88,   80,   80,   84,   85,   80,   80,   53
  5791. ,   21,   80,   94,   65,   61,   43,   80,   72,   80,   80
  5792. ,   53,   37,   65,   66,    3,   35,   36,   40,   67,   68
  5793. ,   71,   74,   76,   80,   72,   80,   85,   21,   61,   37
  5794. ,   84,   85,   12,   37,   80)  ;
  5795.         --| Action_Token_Map is an array that
  5796.         --| maps from each state (using action index map) to a set of
  5797.         --| action tokens. An action token is a terminal symbol
  5798.         --| (except EOF_Token) for which in the given state an
  5799.         --| explicit (non-default) shift or reduce action
  5800.         --| is defined.
  5801.         --| Used to cut reduce the
  5802.         --| number of primary recovery candidates.
  5803.     
  5804.     ------------------------------------------------------------------
  5805.     -- Shift_State_Map
  5806.     ------------------------------------------------------------------
  5807.     
  5808.     type Shift_State_Index_Array is array(
  5809.         PositiveParserInteger range <>) of GC.ParserInteger;
  5810.        --| For indexing the All Action Token Array.
  5811.        --| Maps a given state into the lower and upper bounds of a slice
  5812.        --| of the All Action Index Array.
  5813.  
  5814.     Shift_State_MapIndex : constant Shift_State_Index_Array :=
  5815.          (    1,    1,    2,    2,    3,    3,    4,    4,    5,    5
  5816. ,    6,    6,    7,    9,   10,   11,   12,   14,   15,   15
  5817. ,   16,   19,   20,   23,   24,   24,   25,   25,   26,   26
  5818. ,   27,   29,   30,   32,   33,   33,   34,   37,   38,   38
  5819. ,   39,   57,   58,   58,   59,   60,   61,   61,   62,   63
  5820. ,   64,   65,   66,   66,   67,   67,   68,   69,   70,   73
  5821. ,   74,   94,   95,   97,   98,  101,  102,  103,  104,  108
  5822. ,  109,  110,  111,  113,  114,  115,  116,  120,  121,  124
  5823. ,  125,  126,  127,  132,  133,  134,  135,  141,  142,  142
  5824. ,  143,  143,  144,  148,  149,  153,  154,  154,  155,  158
  5825. ,  159,  161,  162,  162,  163,  166,  167,  170,  171,  171
  5826. ,  172,  174,  175,  175,  176,  179,  180,  182,  183,  185
  5827. ,  186,  191,  192,  192,  193,  194,  195,  196,  197,  236
  5828. ,  237,  237,  238,  242,  243,  245,  246,  246,  247,  250
  5829. ,  251,  273,  274,  298,  299,  299,  300,  301,  302,  314
  5830. ,  315,  316,  317,  318,  319,  319,  320,  325,  326,  411
  5831. ,  412,  412,  413,  413,  414,  414,  415,  417,  418,  428
  5832. ,  429,  432,  433,  433,  434,  436,  437,  437,  438,  438
  5833. ,  439,  439,  440,  440,  441,  441,  442,  447,  448,  447
  5834. ,  448,  447,  448,  447,  448,  448,  449,  453,  454,  457
  5835. ,  458,  458,  459,  459,  460,  460,  461,  461,  462,  462
  5836. ,  463,  465,  466,  468,  469,  470,  471,  473,  474,  474
  5837. ,  475,  477,  478,  478,  479,  483,  484,  491,  492,  499
  5838. ,  500,  502,  503,  518,  519,  519,  520,  520,  521,  521
  5839. ,  522,  522,  523,  524,  525,  527,  528,  529,  530,  530
  5840. ,  531,  531,  532,  532,  533,  534,  535,  535,  536,  537
  5841. ,  538,  538,  539,  546,  547,  547,  548,  548,  549,  555
  5842. ,  556,  557,  558,  559,  560,  577,  578,  579,  580,  580
  5843. ,  581,  581,  582,  582,  583,  584,  585,  585,  586,  586
  5844. ,  587,  588,  589,  589,  590,  590,  591,  605,  606,  610
  5845. ,  611,  611,  612,  613,  614,  616,  617,  631,  632,  632
  5846. ,  633,  633,  634,  634,  635,  635,  636,  637,  638,  638
  5847. ,  639,  642,  643,  645,  646,  648,  649,  650,  651,  652
  5848. ,  653,  653,  654,  654,  655,  656,  657,  659,  660,  660
  5849. ,  661,  662,  663,  663,  664,  665,  666,  667,  668,  668
  5850. ,  669,  669,  670,  670,  671,  672,  673,  673,  674,  674
  5851. ,  675,  675,  676,  680,  681,  681,  682,  685,  686,  689
  5852. ,  690,  692,  693,  694,  695,  695,  696,  698,  699,  700
  5853. ,  701,  711,  712,  712,  713,  713,  714,  714,  715,  715
  5854. ,  716,  716,  717,  717,  718,  718,  719,  719,  720,  720
  5855. ,  721,  723,  724,  726,  727,  727,  728,  729,  730,  730
  5856. ,  731,  733,  734,  734,  735,  735,  736,  736,  737,  737
  5857. ,  738,  738,  739,  739,  740,  740,  741,  754,  755,  762
  5858. ,  763,  764,  765,  765,  766,  776,  777,  778,  779,  780
  5859. ,  781,  781,  782,  782,  783,  783,  784,  784,  785,  785
  5860. ,  786,  786,  787,  788,  789,  789,  790,  790,  791,  791
  5861. ,  792,  793,  794,  794,  795,  795,  796,  796,  797,  797
  5862. ,  798,  799,  800,  800,  801,  802,  803,  803,  804,  804
  5863. ,  805,  806,  807,  812,  813,  814,  815,  815,  816,  816
  5864. ,  817,  818,  819,  819,  820,  831,  832,  832,  833,  834
  5865. ,  835,  838,  839,  839,  840,  840,  841,  847,  848,  854
  5866. ,  855,  860,  861,  862,  863,  863,  864,  865,  866,  866
  5867. ,  867,  868,  869,  869,  870,  870,  871,  871,  872,  872
  5868. ,  873,  874,  875,  876,  877,  877,  878,  878,  879,  879
  5869. ,  880,  880,  881,  881,  882,  882,  883,  883,  884,  885
  5870. ,  886,  886,  887,  888,  889,  889,  890,  891,  892,  892
  5871. ,  893,  895,  896,  896,  897,  897,  898,  898,  899,  900
  5872. ,  901,  901,  902,  902,  903,  903,  904,  904,  905,  905
  5873. ,  906,  906,  907,  907,  908,  909,  910,  911,  912,  912
  5874. ,  913,  913,  914,  914,  915,  915,  916,  916,  917,  918
  5875. ,  919,  919,  920,  923,  924,  926,  927,  927,  928,  928
  5876. ,  929,  930,  931,  931,  932,  932,  933,  933,  934,  934
  5877. ,  935,  936,  937,  937,  938,  938,  939,  940,  941,  941
  5878. ,  942,  942,  943,  943,  944,  944,  945,  945)  ;
  5879.     
  5880.     Shift_State_Map : constant Shift_State_Array :=
  5881.          (    1,  407,   34,  408,  467,  253,  131,  134,  137,  386
  5882. ,  468,  502,  618,  791,  214,   76,  310,  311,  492,  409
  5883. ,  801,  898,  943,  387,  590,  410,  245,  469,  514,  246
  5884. ,  470,  515,  750,  264,  271,  763,  825,  820,  171,  215
  5885. ,  378,  448,  702,  719,  725,  730,  771,  793,  794,  830
  5886. ,  834,  863,  866,  870,  901,  921,  939,  628,  388,  449
  5887. ,  411,  172,  586,   13,   89,   14,  412,  413,  900,  112
  5888. ,  239,  361,  770,   80,  154,  163,  285,  307,  314,  320
  5889. ,  356,  358,  379,  381,  382,  493,  511,  553,  554,  666
  5890. ,  712,  784,  807,  889,  471,  516,  857,  587,  694,  833
  5891. ,  878,  143,  718,   35,  166,  275,  286,  517,   36,  113
  5892. ,   37,  414,  636,  652,  881,  132,  135,  138,  764,  826
  5893. ,  101,  775,  864,  932,  463,  486,   15,   90,  173,  204
  5894. ,  365,  395,    2,  169,  174,  472,  518,  604,  633,  858
  5895. ,  891,   16,  415,  124,  247,  473,  782,  908,  503,  519
  5896. ,  790,  800,  847,  144,  308,  377,  542,  546,  155,  416
  5897. ,  598,  831,  417,  875,  920,  930,   17,  405,  661,  662
  5898. ,  175,  176,  205,  366,  676,  261,  270,  673,  899,  157
  5899. ,  177,  301,  178,  374,  376,  562,  669,  677,  697,  815
  5900. ,  924,  588,   32,  158,  133,  136,    9,   38,   72,   77
  5901. ,   78,   93,   96,  102,  159,  162,  217,  220,  248,  254
  5902. ,  280,  290,  293,  295,  298,  300,  302,  303,  327,  328
  5903. ,  345,  380,  393,  394,  418,  451,  485,  494,  559,  577
  5904. ,  613,  639,  691,  724,  747,  852,   39,   40,   73,  255
  5905. ,  291,  495,   41,  256,  640,  139,  125,  224,  375,  578
  5906. ,   11,   42,   79,  126,  156,  164,  223,  357,  369,  372
  5907. ,  383,  461,  474,  489,  504,  520,  537,  547,  601,  664
  5908. ,  795,  861,  910,  111,  229,  234,  288,  343,  452,  465
  5909. ,  491,  616,  707,  709,  713,  733,  742,  780,  786,  805
  5910. ,  809,  812,  839,  862,  887,  911,  928,  936,  145,   43
  5911. ,  140,  129,  230,  235,  260,  321,  339,  360,  535,  714
  5912. ,  745,  806,  810,  840,   44,  141,  127,  225,  146,  283
  5913. ,  305,  352,  576,  608,  853,   12,   81,   82,   88,  238
  5914. ,  309,  319,  322,  370,  371,  373,  384,  450,  462,  466
  5915. ,  484,  490,  536,  543,  552,  556,  557,  563,  569,  570
  5916. ,  572,  579,  607,  611,  623,  624,  625,  626,  635,  643
  5917. ,  657,  658,  667,  670,  671,  674,  675,  710,  716,  717
  5918. ,  728,  729,  737,  738,  739,  740,  741,  743,  744,  746
  5919. ,  751,  753,  756,  767,  768,  774,  787,  808,  819,  835
  5920. ,  838,  843,  844,  845,  851,  884,  886,  892,  893,  903
  5921. ,  904,  909,  914,  916,  918,  919,  922,  927,  929,  935
  5922. ,  945,  114,  115,  116,  226,  334,  879,  227,  228,  335
  5923. ,  615,  824,  836,  880,  896,  917,  937,  942,  117,  231
  5924. ,  341,  342,  148,  487,  539,  580,  118,  119,  120,  419
  5925. ,  687,  482,  602,  603,  605,  606,  841,    3,   45,  252
  5926. ,  324,  501,  660,  170,  420,  698,  925,  179,  180,  181
  5927. ,  182,  183,   18,  184,  396,   19,  185,  397,  186,  398
  5928. ,   20,  187,  399,  188,   21,  189,  400,  190,  160,  191
  5929. ,  278,  480,  802,  389,  509,  540,  600,  634,  736,  890
  5930. ,  907,  488,  544,  545,  597,  654,  655,  783,  913,  390
  5931. ,  475,  541,   46,  103,  329,  330,  331,  336,  456,  496
  5932. ,  560,  566,  573,  610,  622,  653,  689,  748,  282,  192
  5933. ,  193,  194,  521,  859,  481,  534,  785,  609,  647,  522
  5934. ,  523,  524,  476,  525,  526,  477,  527,  528,   97,  276
  5935. ,  362,  391,  464,  510,  704,  708,  548,   98,  128,  232
  5936. ,  529,  549,  644,  734,  885,  530,  550,  531,  551,   47
  5937. ,  104,  240,  241,  243,  244,  262,  333,  454,  459,  460
  5938. ,  506,  561,  617,  631,  632,  789,  846,  641,  856,  732
  5939. ,  642,  532,  645,  646,  533,  478,  705,  882,  781,  538
  5940. ,   48,  105,  151,  296,  392,  421,  483,  558,  649,  659
  5941. ,  678,  706,  720,  811,  883,  650,  832,  849,  860,  876
  5942. ,  735,  242,  651,  637,  941,  944,   83,   94,  306,  312
  5943. ,  323,  512,  555,  619,  638,  727,  792,  798,  799,  854
  5944. ,  855,  731,  803,  804,  912,  926,  940,  934,  106,  455
  5945. ,  865,  933,  233,  897,  938,   84,   85,  299,   86,  167
  5946. ,  206,  401,  313,  195,  196,  726,  197,  222,  402,  403
  5947. ,  207,  367,  208,   22,  209,   23,  210,  211,   49,   50
  5948. ,   51,  297,  257,  249,  107,   52,  250,  325,  505,  688
  5949. ,  108,  236,  340,  594,  595,  109,  332,  337,  458,  237
  5950. ,  453,  457,  110,  338,   53,   54,  258,  346,  130,  344
  5951. ,   55,  263,  265,  266,  267,  268,  269,  347,  348,  349
  5952. ,  350,   56,   57,   58,   59,   60,  121,  122,   61,   62
  5953. ,   63,  153,  272,   64,  152,  274,  149,   65,  273,   66
  5954. ,   67,  251,  326,   68,   69,  123,  142,   70,  147,  150
  5955. ,   99,  165,  277,  289,  304,  351,  363,  507,  564,  565
  5956. ,  571,  648,  656,  776,  316,  574,  581,  758,  769,  823
  5957. ,  828,  874,  422,  690,  582,  317,  672,  692,  759,  772
  5958. ,  778,  814,  827,  868,  871,  873,  423,  583,  424,  584
  5959. ,  425,  426,  427,  428,  429,  430,  431,  679,  432,  433
  5960. ,  434,  435,  680,  436,  437,  438,  439,  440,  681,  441
  5961. ,  442,  585,  567,  755,  765,  821,  568,  668,  693,  754
  5962. ,  757,  869,  592,  752,  816,  817,  818,  867,  443,  218
  5963. ,  294,  318,  406,  508,  696,  773,  797,  848,  877,  895
  5964. ,  905,  589,  216,  591,   87,  168,  315,  695,  593,  444
  5965. ,   24,   91,  198,  212,  281,  368,  404,  279,  287,  599
  5966. ,  749,  850,  894,  923,  355,  364,  813,  888,  915,  931
  5967. ,   74,  219,  353,  284,  354,  292,   25,   92,   26,   27
  5968. ,  385,  199,  513,  627,  629,  723,  213,  796,  630,  665
  5969. ,  445,  446,  447,  575,  829,  686,  682,  872,  683,  684
  5970. ,  902,  685,  760,  761,  762,  663,    4,    5,    6,   10
  5971. ,    7,   28,   29,    8,  221,   33,  699,  700,  779,  777
  5972. ,  906,  837,   30,   31,   75,  161,  479,  842,  359,  497
  5973. ,  596,  612,  788,  614,  703,  711,  498,  499,  500,  715
  5974. ,  200,  201,  202,  203,  620,  722,  621,  721,   71,  259
  5975. ,  100,  822,  766,  701,   95)  ;
  5976.         --| Shift_State_ is an array that
  5977.         --| maps from non-terminals (using shift index map) to sets
  5978.         --| of states in which
  5979.         --| a shift to the non-terminal is defined.
  5980.         --| Used to determine the number of trials in primary
  5981.         --| error recovery.
  5982.  
  5983.     ------------------------------------------------------------------
  5984.     -- Subprogram Bodies Global to Package ErrorParseTables
  5985.     ------------------------------------------------------------------
  5986.  
  5987.     function Get_Action_Token_Map ( --| return the array of action tokens
  5988.                     --| for the state passed in.
  5989.         In_Index : in StateRange
  5990.                     --| the state to return action tokens
  5991.                     --| for.
  5992.         )
  5993.         return Action_Token_Record
  5994.         is
  5995.         --| Returns
  5996.         --| This subprogram returns the action token record for the
  5997.         --| state passed in.
  5998.         Result : Action_Token_Record ;
  5999.         LowerBound, UpperBound : GC.ParserInteger ;
  6000.         --| Lower and upper bounds of the slice of Action Token Map
  6001.     begin
  6002.         LowerBound := Action_Token_MapIndex ( In_Index*2 - 1 ) ;
  6003.         UpperBound := Action_Token_MapIndex ( In_Index*2 ) ;
  6004.  
  6005.         Result.set_size := UpperBound - LowerBound + 1;
  6006.         Result.set := (others => DefaultValue) ;
  6007.         Result.set(Result.set'first .. Result.set_size) :=
  6008.         Action_Token_Map(LowerBound..UpperBound) ;
  6009.       
  6010.         return Result ;
  6011.     end Get_Action_Token_Map ;
  6012.  
  6013.     ------------------------------------------------------------------
  6014.  
  6015.     function Get_Shift_State_Map (  --| return the array of shift states
  6016.                     --| for the grammar symbol passed in.
  6017.         In_Index : in GrammarSymbolRange
  6018.                     --| the grammar symbol to return shifts
  6019.                     --| for.
  6020.         )
  6021.         --| Raises: This subprogram raises no exceptions.
  6022.         return Shift_State_Record
  6023.         --| Returns
  6024.         --| This subprogram returns the array of shift states for the
  6025.         --| grammar symbol passed in.
  6026.         is
  6027.         
  6028.         Result : Shift_State_Record ;
  6029.         LowerBound, UpperBound : GC.ParserInteger ;
  6030.           --| Lower and upper bounds of the slice of Shift State Map
  6031.     begin
  6032.         LowerBound := Shift_State_MapIndex ( In_Index*2 - 1 ) ;
  6033.         UpperBound := Shift_State_MapIndex ( In_Index*2 ) ;
  6034.     
  6035.         Result.set_size := UpperBound - LowerBound + 1;
  6036.         Result.set := (others => DefaultValue) ;
  6037.         Result.set(Result.set'first .. Result.set_size) :=
  6038.             Shift_State_Map(LowerBound..UpperBound) ;
  6039.       
  6040.         return Result ;
  6041.     end Get_Shift_State_Map ;
  6042.  
  6043.     function Get_Grammar_Symbol (   --| return the string representation
  6044.                     --| of the grammar symbol
  6045.         In_Index : in GrammarSymbolRange
  6046.         )
  6047.         return string
  6048.         is
  6049.         LowerBound, UpperBound : GC.ParserInteger ;
  6050.       --| Lower and upper bounds of the slice of Shift State Map
  6051.     begin
  6052.         LowerBound := GrammarSymbolTableIndex ( In_Index*2 - 1 ) ;
  6053.         UpperBound := GrammarSymbolTableIndex ( In_Index*2 ) ;
  6054.  
  6055.         return GrammarSymbolTable(
  6056.             Integer(LowerBound) .. Integer(UpperBound)) ;
  6057.     end Get_Grammar_Symbol ;
  6058.  
  6059.     ------------------------------------------------------------------
  6060.  
  6061.     function Get_Follow_Map (       --| return the array of follow symbols
  6062.                     --| of the grammar symbol passed in
  6063.         In_Index : in FollowMapRange
  6064.         )
  6065.         -- |
  6066.         -- |Raises: This subprogram raises no exceptions.
  6067.         -- |
  6068.     
  6069.       return FollowSymbolRecord
  6070.       is
  6071.         Result : FollowSymbolRecord ;
  6072.         LowerBound, UpperBound : GC.ParserInteger ;
  6073.         Adjusted_Index : GC.ParserInteger :=
  6074.           (In_Index - FollowMapRange'first) + 1;
  6075.     begin
  6076.         LowerBound := FollowSymbolMapIndex ( Adjusted_Index*2 - 1 ) ;
  6077.         UpperBound := FollowSymbolMapIndex ( Adjusted_Index*2 ) ;
  6078.     
  6079.         Result.follow_symbol_count := UpperBound - LowerBound + 1;
  6080.         Result.follow_symbol := (others => DefaultValue) ;
  6081.         Result.follow_symbol(
  6082.           Result.follow_symbol'first ..
  6083.           Result.follow_symbol_count) :=
  6084.             FollowSymbolMap(LowerBound..UpperBound) ;
  6085.           
  6086.         return Result ;
  6087.     end Get_Follow_Map ;
  6088.  
  6089.     ------------------------------------------------------------------
  6090.  
  6091.     function GetAction (            -- see subprogram declaration
  6092.       InStateValue  : in StateRange;
  6093.       InSymbolValue : in GrammarSymbolRange
  6094.       )
  6095.       return ActionRange
  6096.       is
  6097.         
  6098.         Unique : GC.ParserInteger;
  6099.             --| unique value to hash for Index.
  6100.         Index  : GC.ParserInteger;
  6101.             --| index into Action Tables.
  6102.         Action : GC.ParserInteger;
  6103.             --| value from Action Tables.
  6104.         CollisionCount : Natural := 0 ; --| Number of collisions.
  6105.     begin -- GetAction function
  6106.     --| Algorithm
  6107.     --|-
  6108.     --| Definitions of key objects from package ParseTables:
  6109.     --|
  6110.     --| ActionCount: the number of actions in the action tables.
  6111.     --|
  6112.     --| ActionTableOne: table of action values for all combinations of
  6113.     --|     states and input actions.
  6114.     --|
  6115.     --| ActionTableTwo: hash values to check against to verify that action
  6116.     --|     value at same index in ActionTableOne is correct one.
  6117.     --|
  6118.     --| ActionTableSize: last index in ActionTableOne and ActionTableTwo
  6119.     --|     before the hash collision chains.
  6120.     --|
  6121.     --| DefaultMap: default action for each state.
  6122.     --|+
  6123.     --| The action to be returned is computed from parameters InStateValue
  6124.     --| and InSymbolValue. First, determine the unique single value:
  6125.     --|
  6126.     --|     Unique := (InStateValue * GrammarSymbolCountPlusOne) +
  6127.     --|                InSymbolValue;
  6128.     --|
  6129.     --| Unique is hashed by reducing modulo ActionTableSize and adding 1:
  6130.     --|
  6131.     --|     Index := (Unique mod ActionTableSize) + 1;
  6132.     --|
  6133.     --| This hash value, Index, is used to index ActionTableOne to
  6134.     --| obtain an Action:
  6135.     --|
  6136.     --|     Action := ActionTableOne(Index);
  6137.     --|
  6138.     --| Action is then used to determine the return value:
  6139.     --|
  6140.     --| Action = 0:
  6141.     --|     return DefaultMap(InStateValue);
  6142.     --|
  6143.     --| Action < ActionCount:
  6144.     --|     if (Unique = ActionTableTwo(Index)) then
  6145.     --|         return Action;
  6146.     --|     else
  6147.     --|         return DefaultMap(InStateValue);
  6148.     --|     end if;
  6149.     --|
  6150.     --| Action >= ActionCount:
  6151.     --|     --Search the hash collision chain
  6152.     --|     Index := Action - ActionCount;
  6153.     --|     while (Action /= 0) loop
  6154.     --|         Index := Index + 1;
  6155.     --|         Action := ActionTableTwo(Index);
  6156.     --|         if (Action = Unique) then
  6157.     --|             return ActionTableOne(Index);
  6158.     --|         end if;
  6159.     --|     end loop;
  6160.     --|     return DefaultMap(InStateValue);
  6161.  
  6162.     ------------------------------------------------------------------
  6163.  
  6164.   --| The actual code used folds this algorithm into a more efficient one:
  6165.         ParserDecisionCount := Natural'succ(ParserDecisionCount) ;
  6166.                                                                     
  6167.         Unique := (InStateValue * GrammarSymbolCountPlusOne) +          
  6168.                         InSymbolValue;                                  
  6169.         Index := (Unique mod ActionTableSize) + 1;                      
  6170.         Action := ActionTableOne(Index);                                
  6171.                                                                         
  6172.         if (Action >= ActionCount) then                                 
  6173.             Index := Action - ActionCount + 1;                          
  6174.             while ( (ActionTableTwo(Index) /= Unique) and then          
  6175.                     (ActionTableTwo(Index) /= 0) ) loop                 
  6176.                 Index := Index + 1;
  6177.             CollisionCount := Natural'succ(CollisionCount) ;
  6178.             end loop;                                                   
  6179.             Action := ActionTableOne(Index);                            
  6180.         end if;
  6181.         
  6182.         -- Collect statistics information.
  6183.         TotalCollisions := CollisionCount + TotalCollisions ;
  6184.         if CollisionCount > MaxCollisions then
  6185.             MaxCollisions := CollisionCount ;
  6186.         end if;
  6187.                                                                         
  6188.         if (ActionTableTwo(Index) /= Unique) then                       
  6189.             return DefaultMap(InStateValue);                            
  6190.         else                                                            
  6191.             return Action;                                              
  6192.         end if;                                                         
  6193.     
  6194.     end GetAction; -- function
  6195.  
  6196.     function Get_LeftHandSide(
  6197.       GrammarRule : LeftHandSideRange
  6198.       ) return GrammarSymbolRange is
  6199.     begin
  6200.         return LeftHandSide(GrammarRule) ;
  6201.     end Get_LeftHandSide ;
  6202.     
  6203.     function Get_RightHandSide(
  6204.       GrammarRule : RightHandSideRange
  6205.       ) return GC.ParserInteger is
  6206.     begin
  6207.         return RightHandSide(GrammarRule) ;
  6208.     end Get_RightHandSide ;
  6209.     
  6210. end MCC_ParseTables;
  6211.  
  6212. ----------------------------------------------------------------------
  6213. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6214. --mccstates.spc
  6215. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6216.  
  6217. ----------------------------------------------------------------------
  6218.  
  6219. with MCC_ParserDeclarations;  -- declarations for the Parser
  6220. use MCC_ParserDeclarations;
  6221.  
  6222. package MCC_StateStack is     --| Elements awaiting parsing
  6223.  
  6224. --| Overview
  6225. --|
  6226. --| The StateStack used by the parser.
  6227. --|
  6228. --| This data structure has the following sets of operations:
  6229. --|
  6230. --| 1) A set that add and delete elements.
  6231. --| This set can raise the exceptions Underflow and Overflow.
  6232. --| The set includes:
  6233. --|
  6234. --|     Pop
  6235. --|     Push
  6236. --|     Reduce
  6237. --|
  6238. --| 2) A function that returns the number of elements in the
  6239. --| data structure.
  6240. --| This set raises no exceptions.
  6241. --| The set includes:
  6242. --|
  6243. --|     Length
  6244. --|
  6245. --| 3) A procedure that re-initializes the stack to have zero elements.
  6246. --| This set raises no exception.
  6247. --| The set includes:
  6248. --|
  6249. --|     Initialize 
  6250. --|
  6251. --| 4) A copy operations, to return the top of the stack.
  6252. --| The exception, UnderFlow,
  6253. --| is utilized to indicate the end of a sequential examination.
  6254. --| The set includes:
  6255. --|
  6256. --|     CopyTop
  6257. --|     InitCopy
  6258. --|     CopyNext
  6259.  
  6260. --| Notes
  6261. --|
  6262. --|     Under some implementations the exception
  6263. --| ParserDeclarations.MemoryOverflow could be raised.
  6264. --|
  6265.  
  6266.     ------------------------------------------------------------------
  6267.     -- Declarations Global to Package StateStack
  6268.     ------------------------------------------------------------------
  6269.  
  6270.     OverFlow  : exception;
  6271.     --| raised if no more space in stack.
  6272.     UnderFlow : exception;
  6273.     --| raised if no more elements in stack.
  6274.  
  6275.     ------------------------------------------------------------------
  6276.  
  6277.     procedure Push(                     --| Adds new top element to stack
  6278.     Element: in StateStackElement); --| element to add
  6279.  
  6280.     --|
  6281.     --| Raises
  6282.     --|
  6283.     --| OverFlow - no more space in stack.
  6284.  
  6285.     --| Effects
  6286.     --|
  6287.     --| This subprogram adds an element to the top of the stack.
  6288.     --|
  6289.  
  6290.     ------------------------------------------------------------------
  6291.  
  6292.     function Pop return StateStackElement;--| Removes top element in stack
  6293.  
  6294.     --| Raises
  6295.     --|
  6296.     --| UnderFlow - no more elements in stack.
  6297.  
  6298.     --| Effects
  6299.     --|
  6300.     --| This subprogram pops the element at the top of the stack.
  6301.     --|
  6302.  
  6303.     ------------------------------------------------------------------
  6304.  
  6305.     function CopyTop return StateStackElement;
  6306.     --| Copy top element in stack
  6307.  
  6308.     --| Raises
  6309.     --|
  6310.     --| UnderFlow - no more elements in stack.
  6311.     --|
  6312.  
  6313.     --| Effects
  6314.     --|
  6315.     --| Returns the top of the stack.
  6316.  
  6317.     ------------------------------------------------------------------
  6318.  
  6319.     function CopyNext return StateStackElement;
  6320.     --| Copy element after previous one copied
  6321.  
  6322.     --| Raises
  6323.     --|
  6324.     --| UnderFlow - no more elements in stack.
  6325.  
  6326.     --| Effects
  6327.     --|
  6328.     --| This subprogram is used in conjunction with
  6329.     --| CopyTop or Init Copy to sequentially examine the stack.
  6330.     --|
  6331.  
  6332.     ------------------------------------------------------------------
  6333.  
  6334.     function Length return StateParseStacksIndex;
  6335.    --| Returns the number of elements in the stack
  6336.  
  6337.     --| Effects
  6338.     --|
  6339.     --| This subprogram returns the number of elements in the stack.
  6340.     --|
  6341.  
  6342.     ----------------------------------------------------------------------
  6343.  
  6344.     procedure Initialize;      --| Re-initializes the state to have no
  6345.                 --| elements.
  6346.  
  6347.     --| Effects
  6348.     --| 
  6349.     --| Resets the top of the stack to the first element.
  6350.  
  6351.     ----------------------------------------------------------------------
  6352.     
  6353.     procedure InitCopy;           --| Initialize sequential examination of
  6354.                               --| the data structure
  6355.  
  6356.     --| Effects
  6357.     --|
  6358.     --| Initializes the copy function,
  6359.     --| so that subsequent calls to CopyNext will sequentially examine
  6360.     --| the elements in the data structure.
  6361.     --|
  6362.  
  6363.     ------------------------------------------------------------------
  6364.  
  6365.     function CopyThisOne (  --| returns element given by parm 'which_one'
  6366.     which_one:  StateParseStacksRange) return StateStackElement;
  6367.  
  6368.     --| Overview
  6369.     --|
  6370.     --| Returns the state stack element indicated by the parameter
  6371.     --| 'which_one'.  This operation is needed by LocalStateStack
  6372.     --| because, in essence, the state stack is being copied in two
  6373.     --| nested loops and the Next_To_Copy counter can therefore only
  6374.     --| be used for one of the series of copies.
  6375.  
  6376.     ------------------------------------------------------------------
  6377.  
  6378.     procedure Reduce(           --| Pops and discards top n elements on
  6379.                             --| the stack.
  6380.     TopN : StateParseStacksIndex);    --| Number of elements to pop.
  6381.  
  6382.     --| Raises:
  6383.     --|
  6384.     --| Underflow - no more elements in stack.
  6385.  
  6386.     --| Effects
  6387.     --|
  6388.     --| Pops and discards TopN elements on the stack.
  6389.     --| If TopN is greater than the number of elements in the stack,
  6390.     --| Underflow is raised.
  6391.     --| This subprogram is used by the parser to reduce the stack during
  6392.     --| a reduce action.
  6393.     --| This stack reduction could be done with a for
  6394.     --| loop and the Pop subprogram at a considerable cost in execution
  6395.     --| time.
  6396.     --|
  6397.  
  6398.     ------------------------------------------------------------------
  6399.  
  6400. end MCC_StateStack;
  6401.  
  6402. ----------------------------------------------------------------------
  6403. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6404. --mccstates.bdy
  6405. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6406.  
  6407. ----------------------------------------------------------------------
  6408.  
  6409. with MCC_ParseTables;               -- state tables generated
  6410.                             -- by parser generator
  6411. use MCC_ParseTables;
  6412. with MCC_Grammar_Constants;         -- constants generated by parser generator
  6413. use MCC_Grammar_Constants;          -- to have visiblity on operations
  6414.                             -- on type ParserInteger.
  6415.  
  6416. package body MCC_StateStack is
  6417.  
  6418. --| Overview
  6419. --|
  6420. --| The data structure is implemented as an array.
  6421. --|
  6422.  
  6423. --| Notes
  6424. --|
  6425. --| Abbreviations used in this compilation unit:
  6426. --|
  6427. --| Init : used as prefix for Initialize
  6428. --|
  6429.  
  6430.     ------------------------------------------------------------------
  6431.     -- Declarations Global to Package Body StateStack
  6432.     ------------------------------------------------------------------
  6433.  
  6434.     Index        : StateParseStacksIndex := 0;
  6435.     --| top element in stack.
  6436.     Next_To_Copy : StateParseStacksIndex := 0;
  6437.     --| next element to copy in stack.
  6438.  
  6439.     Space : array (StateParseStacksRange) of StateStackElement;
  6440.     --| Storage used to hold stack elements
  6441.  
  6442.  
  6443.     ------------------------------------------------------------------
  6444.     -- Subprogram Bodies Global to Package StateStack
  6445.     -- (declared in package specification).
  6446.     ------------------------------------------------------------------
  6447.  
  6448.     procedure Push(Element: in StateStackElement) is
  6449.  
  6450.     begin
  6451.  
  6452.     if (Index >= StateParseStacksRange'Last) then
  6453.         raise OverFlow;
  6454.     end if;
  6455.  
  6456.     Index := Index + 1;
  6457.     Space (Index) := Element;
  6458.  
  6459.     end Push;
  6460.  
  6461.     ------------------------------------------------------------------
  6462.  
  6463.     function Pop return StateStackElement is
  6464.  
  6465.     begin
  6466.  
  6467.     if (Index < StateParseStacksRange'First) then
  6468.         raise UnderFlow;
  6469.     end if;
  6470.  
  6471.        Index := Index - 1;
  6472.        return Space (Index + 1);
  6473.  
  6474.     end Pop;
  6475.  
  6476.     ------------------------------------------------------------------
  6477.  
  6478.     function CopyTop return StateStackElement is
  6479.  
  6480.     begin
  6481.  
  6482.     InitCopy;
  6483.     return CopyNext;
  6484.  
  6485.     end CopyTop;
  6486.  
  6487.     ------------------------------------------------------------------
  6488.  
  6489.     function CopyNext return StateStackElement is
  6490.  
  6491.     begin 
  6492.  
  6493.     Next_To_Copy := Next_To_Copy - 1;
  6494.  
  6495.     if (Next_To_Copy < StateParseStacksRange'First) then
  6496.         raise UnderFlow;
  6497.     end if;
  6498.  
  6499.     return Space (Next_To_Copy);
  6500.  
  6501.     end CopyNext;
  6502.  
  6503.     ------------------------------------------------------------------
  6504.  
  6505.     function Length return StateParseStacksIndex is
  6506.  
  6507.     begin
  6508.  
  6509.     return Index;
  6510.  
  6511.     end Length;
  6512.  
  6513.     ------------------------------------------------------------------
  6514.     procedure Initialize      --| Re-initializes the state to have no
  6515.                 --| elements.
  6516.     is
  6517.     begin
  6518.     Index := 0;
  6519.     end Initialize;
  6520.  
  6521.     --| Effects
  6522.     --| 
  6523.     --| Resets the top of the stack to the first element.
  6524.  
  6525.     ----------------------------------------------------------------------
  6526.  
  6527.     procedure InitCopy is
  6528.  
  6529.     begin
  6530.  
  6531.     Next_To_Copy := Index + 1;  -- start examination here
  6532.  
  6533.     end InitCopy;
  6534.  
  6535.     ------------------------------------------------------------------
  6536.  
  6537.     function CopyThisOne (    --| returns the which_oneth element
  6538.     which_one:   StateParseStacksRange) return StateStackElement is
  6539.  
  6540.     begin
  6541.  
  6542.     if which_one > Index then
  6543.         raise OverFlow;
  6544.     end if;
  6545.  
  6546.     return (Space (which_one));
  6547.  
  6548.     end CopyThisOne;
  6549.  
  6550.     ------------------------------------------------------------------
  6551.  
  6552.     procedure Reduce (TopN : StateParseStacksIndex) is
  6553.  
  6554.     begin
  6555.  
  6556.     if (TopN > Index) then
  6557.         raise UnderFlow;
  6558.     end if;
  6559.  
  6560.     Index := Index - TopN;
  6561.  
  6562.     end Reduce;
  6563.  
  6564.     ------------------------------------------------------------------
  6565.  
  6566. end MCC_StateStack;
  6567.  
  6568. ----------------------------------------------------------------------
  6569. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6570. --mccpdecls.bdy
  6571. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6572.  
  6573. with unchecked_deallocation;
  6574. ----------------------------------------------------------------------
  6575.  
  6576. package body MCC_ParserDeclarations is
  6577.  
  6578.     subtype Dump_String_Range_Plus_Zero is
  6579.     STANDARD.NATURAL range 0 .. 4000;
  6580.  
  6581.     Dump_String        : string (1..Dump_String_Range_Plus_Zero'Last);
  6582.  
  6583.     Dump_String_Length : Dump_String_Range_Plus_Zero;
  6584.     -- must be set to zero before each use.
  6585.  
  6586.     ------------------------------------------------------------------
  6587.     -- Subprograms Local to Package ParserDeclarations
  6588.     ------------------------------------------------------------------
  6589.  
  6590.     procedure Append_To_Dump_String (   --| Add In_String to Dump_String
  6591.     In_String : in string           --| String to append
  6592.     );
  6593.  
  6594.     --| Effects
  6595.  
  6596.     --| This subprogram appends In_String to the package Body global
  6597.     --| Dump_String.
  6598.  
  6599.     --| Modifies
  6600.     --|
  6601.     --| Dump_String
  6602.     --| Dump_String_Length
  6603.  
  6604.     ------------------------------------------------------------------
  6605.     -- Subprogram Bodies Global to Package ParserDeclarations
  6606.     -- (declared in package specification).
  6607.     ------------------------------------------------------------------
  6608.  
  6609.     function Get_Source_Text(
  6610.     In_Source_Text : in Source_Text
  6611.     ) return string is
  6612.  
  6613.     begin
  6614.  
  6615.     if (In_Source_Text = Null_Source_Text) then
  6616.         return "" ;
  6617.     else
  6618.         return In_Source_Text.all ;
  6619.     end if;
  6620.  
  6621.     end Get_Source_Text;
  6622.  
  6623.     ------------------------------------------------------------------
  6624.  
  6625.     procedure Put_Source_Text(
  6626.     In_String          : in     string ;
  6627.     In_Out_Source_Text : in out Source_Text
  6628.     ) is
  6629.  
  6630.     begin
  6631.  
  6632.     In_Out_Source_Text := new string'(In_String);
  6633.  
  6634.     end Put_Source_Text;
  6635.  
  6636.     ------------------------------------------------------------------
  6637.  
  6638.     function Dump_Parse_Stack_Element(
  6639.     In_PSE : in ParseStackElement
  6640.     ) return string is
  6641.  
  6642.     --| Notes
  6643.  
  6644.     --| Abbreviations used in this compilation unit
  6645.     --|
  6646.     --| PSE : ParseStackElement
  6647.     --|
  6648.  
  6649.     begin
  6650.  
  6651.     Dump_String_Length := 0;
  6652.  
  6653.     -- Output data common to all ParseStackElements
  6654.     Append_To_Dump_String
  6655.         ("Element Kind:  "
  6656.         & PT.Get_Grammar_Symbol(In_PSE.gram_sym_val)
  6657.         & " "       -- give extra space to help highlight delimiters
  6658.         );
  6659.  
  6660.     -- Output data common to all lexed_tokens
  6661.     Append_To_Dump_String
  6662.         (" Token - Line: "
  6663.         & HD.Source_Line'IMAGE  (In_PSE.lexed_token.srcpos_line)
  6664.         &       " Column: "
  6665.         & HD.Source_Column'IMAGE(In_PSE.lexed_token.srcpos_column)
  6666.         );
  6667.  
  6668.     Append_To_Dump_String
  6669.         ( " Text: %"
  6670.         & Get_Source_Text(In_PSE.lexed_token.text)
  6671.         & "%"
  6672.         );
  6673.  
  6674.  
  6675.     -- Finally, finish up the message
  6676.     Append_To_Dump_String("");
  6677.  
  6678.     return Dump_String(1..Dump_String_Length);
  6679.  
  6680.     end Dump_Parse_Stack_Element;
  6681.  
  6682.     ------------------------------------------------------------------
  6683.  
  6684.     procedure flush is new unchecked_deallocation (string,
  6685.                                   Source_Text);
  6686.  
  6687.     procedure flush_source_text (s : in out source_text) is
  6688.     begin
  6689.     if s /= null then flush (s); end if;
  6690.     end flush_source_text;
  6691.  
  6692.     ------------------------------------------------------------------
  6693.     -- Subprogram Bodies Local to Package ParserDeclarations
  6694.     ------------------------------------------------------------------
  6695.  
  6696.     procedure Append_To_Dump_String(
  6697.     In_String : in string       --| String to append
  6698.     ) is
  6699.  
  6700.     begin
  6701.  
  6702.     Dump_String((Dump_String_Length + 1) ..
  6703.         (Dump_String_Length + In_String'Last)) := In_String;
  6704.  
  6705.     Dump_String_Length := Dump_String_Length + In_String'Length;
  6706.  
  6707.     end Append_To_Dump_String;
  6708.  
  6709.     ------------------------------------------------------------------
  6710.  
  6711.  
  6712. end MCC_ParserDeclarations;
  6713.  
  6714. ----------------------------------------------------------------------
  6715. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6716. --mccparses.spc
  6717. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6718.  
  6719. ----------------------------------------------------------------------
  6720.  
  6721. with MCC_ParserDeclarations;        -- declarations for the Parser
  6722. use MCC_ParserDeclarations;
  6723.  
  6724. package MCC_ParseStack is           --| Elements awaiting parsing
  6725.  
  6726. --| Overview
  6727. --|
  6728. --| The ParseStack used by the parser.
  6729. --|
  6730. --| This data structure has the following sets of operations:
  6731. --|
  6732. --| 1) A set that add and delete elements.  This set can
  6733. --| raise the exceptions: UnderFlow and OverFlow.
  6734. --| The set includes:
  6735. --|
  6736. --|     Pop
  6737. --|     Push
  6738. --|     Reduce
  6739. --|
  6740. --| 2) A function that returns the number of elements in the
  6741. --| data structure. This set raises no exceptions.
  6742. --| The set includes:
  6743. --|
  6744. --|     Length
  6745. --|
  6746. --| 3) A procedure that re-initializes the stack to have zero elements.
  6747. --| This set raises no exception.
  6748. --| The set includes:
  6749. --|
  6750. --|     Initialize 
  6751.  
  6752. --|
  6753. --| Notes
  6754. --|
  6755. --|     Under some implementations the exception
  6756. --| ParserDeclarations.MemoryOverflow could be raised.
  6757. --|
  6758.  
  6759.     package PD renames MCC_ParserDeclarations;
  6760.  
  6761.     ------------------------------------------------------------------
  6762.     -- Declarations Global to Package ParseStack
  6763.     ------------------------------------------------------------------
  6764.  
  6765.     OverFlow  : exception;
  6766.     --| raised if no more space in stack.
  6767.     UnderFlow : exception;
  6768.     --| raised if no more elements in stack.
  6769.  
  6770.     ------------------------------------------------------------------
  6771.  
  6772.     procedure Push(         --| Adds new top element to stack
  6773.     Element: in PD.ParseStackElement); --| element to add
  6774.  
  6775.     --| Raises
  6776.     --|
  6777.     --| OverFlow - no more space in stack.
  6778.  
  6779.     --| Effects
  6780.     --|
  6781.     --| This subprogram adds an element to the top of the stack.
  6782.     --|
  6783.     
  6784.     ------------------------------------------------------------------
  6785.     
  6786.     function Pop                 --| Removes top element in stack
  6787.     return PD.ParseStackElement;
  6788.  
  6789.     --| Raises
  6790.     --|
  6791.     --| UnderFlow - no more elements in stack.
  6792.  
  6793.     --| Effects
  6794.     --|
  6795.     --| This subprogram obtains the element at the top of the stack.
  6796.     --|
  6797.     
  6798.     ------------------------------------------------------------------
  6799.     
  6800.     function Length                 --| Returns the number of
  6801.                                 --| elements in the stack
  6802.     return PD.StateParseStacksIndex;
  6803.  
  6804.     --| Effects
  6805.     --|
  6806.     --| This subprogram returns the number of elements in the stack.
  6807.     --|
  6808.     
  6809.     ----------------------------------------------------------------------
  6810.  
  6811.     procedure Initialize;      --| Re-initializes the state to have no
  6812.                 --| elements.
  6813.  
  6814.     --| Effects
  6815.     --| 
  6816.     --| Resets the top of the stack to the first element.
  6817.  
  6818.     ----------------------------------------------------------------------
  6819.     
  6820.     procedure Deallocate_Tokens(--| Deallocates the source texts of tokens
  6821.                 --| on the stack about to be popped.
  6822.     TopN : in PD.StateParseStacksIndex
  6823.                 --| how many tokens to deallocate
  6824.     );
  6825.  
  6826.     ----------------------------------------------------------------------
  6827.  
  6828.     procedure Reduce(           --| Pops and discards top n elements on
  6829.                             --| the stack.
  6830.     TopN : in PD.StateParseStacksIndex);
  6831.     --| Number of elements to pop.
  6832.  
  6833.     --| Raises
  6834.     --|
  6835.     --| Underflow - no more elements in stack.
  6836.  
  6837.     --| Effects
  6838.     --|
  6839.     --| Pops and discards top N elements on the stack.
  6840.     --| If TopN is greater than the number of elements in the stack,
  6841.     --| Underflow is raised.
  6842.     --| This subprogram is used by the parser to reduce the stack during
  6843.     --| a reduce action.
  6844.     --| This stack reduction could be done with a for loop and
  6845.     --| the Pop subprogram at a considerable cost in execution time.
  6846.     --|
  6847.     
  6848.     ----------------------------------------------------------------------
  6849.  
  6850.     function Get_Stack_Element(
  6851.                            position : PD.StateParseStacksIndex
  6852.                           ) 
  6853.                            return PD.ParseStackElement;
  6854.                 
  6855.     ----------------------------------------------------------------------
  6856. end MCC_ParseStack;
  6857.     
  6858. --------------------------------------------------------------------------
  6859. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6860. --mccparses.bdy
  6861. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6862.  
  6863. ----------------------------------------------------------------------
  6864.  
  6865. with MCC_ParseTables;               -- state tables generated by parser
  6866.                             --     generator
  6867. use MCC_ParseTables;
  6868.  
  6869. with MCC_Grammar_Constants;
  6870. use MCC_Grammar_Constants;          -- to have visibility on operations
  6871.                             -- on type ParserInteger declared there.
  6872.  
  6873. with MCC_StateStack;
  6874.  
  6875. package body MCC_ParseStack is
  6876.  
  6877. --| Overview
  6878. --|
  6879. --| The data structure is implemented as an array.
  6880. --|
  6881.  
  6882.     ------------------------------------------------------------------
  6883.     -- Declarations Global to Package Body ParseStack
  6884.     ------------------------------------------------------------------
  6885.  
  6886.     Index       : PD.StateParseStacksIndex := 0;
  6887.     --| top element in stack.
  6888.  
  6889.     Space : array (PD.StateParseStacksRange) of PD.ParseStackElement;
  6890.     --| Storage used to hold stack elements
  6891.  
  6892.     ------------------------------------------------------------------
  6893.     -- Subprogram Bodies Global to Package ParseStack
  6894.     -- (declared in package specification).
  6895.     ------------------------------------------------------------------
  6896.  
  6897.     procedure Push(Element : in PD.ParseStackElement) is
  6898.  
  6899.     begin
  6900.  
  6901.     if (Index >= PD.StateParseStacksRange'Last) then
  6902.         raise OverFlow;
  6903.     end if;
  6904.  
  6905.     Index := Index + 1;
  6906.     Space (Index) := Element;
  6907.  
  6908.     end Push;
  6909.  
  6910.     ------------------------------------------------------------------
  6911.  
  6912.     function Pop return PD.ParseStackElement is
  6913.  
  6914.     begin
  6915.  
  6916.     if (Index < PD.StateParseStacksRange'First) then
  6917.         raise UnderFlow;
  6918.     end if;
  6919.  
  6920.     Index := Index - 1;
  6921.     return Space (Index + 1);
  6922.  
  6923.     end Pop;
  6924.  
  6925.     ------------------------------------------------------------------
  6926.  
  6927.     function Length return PD.StateParseStacksIndex is
  6928.  
  6929.     begin
  6930.  
  6931.     return Index;
  6932.  
  6933.     end Length;
  6934.  
  6935.     ------------------------------------------------------------------
  6936.  
  6937.     procedure Initialize      --| Re-initializes the state to have no
  6938.                 --| elements.
  6939.     is
  6940.     element : PD.ParseStackElement;
  6941.     begin
  6942.     while Index > 0 loop
  6943.         element := Space (Index);
  6944.         PD.flush_source_text (element.lexed_token.text);
  6945.         Index := Index - 1;
  6946.     end loop;
  6947.     end Initialize;
  6948.  
  6949.     --| Effects
  6950.     --| 
  6951.     --| Resets the top of the stack to the first element.
  6952.  
  6953.     ----------------------------------------------------------------------
  6954.  
  6955.     
  6956.     procedure Deallocate_Tokens(--| Deallocates the source texts of tokens
  6957.                 --| on the stack about to be popped.
  6958.     TopN : in PD.StateParseStacksIndex
  6959.                   --| how many tokens to deallocate
  6960.     ) is
  6961.  
  6962.     element : PD.ParseStackElement;
  6963.  
  6964.     begin
  6965.     if (TopN > Index) then
  6966.         raise UnderFlow;
  6967.     end if;
  6968.  
  6969.     for i in 1..TopN loop
  6970.         element := Space ((Index - i) + 1);
  6971.         PD.flush_source_text (element.lexed_token.text);
  6972.     end loop;
  6973.     end Deallocate_Tokens;
  6974.  
  6975.     ----------------------------------------------------------------------
  6976.     procedure Reduce(TopN : in PD.StateParseStacksIndex) is
  6977.  
  6978.     begin
  6979.     if (TopN > Index) then
  6980.         raise UnderFlow;
  6981.     end if;
  6982.  
  6983.     Index := Index - TopN;
  6984.  
  6985.     end Reduce; -- procedure
  6986.  
  6987.     ------------------------------------------------------------------
  6988.     function Get_Stack_Element(position : PD.StateParseStacksIndex)
  6989.     return PD.ParseStackElement is
  6990.  
  6991.     begin
  6992.     
  6993.     return Space(MCC_StateStack.Length - Position);
  6994.  
  6995.     end Get_Stack_Element; 
  6996.  
  6997.     ------------------------------------------------------------------
  6998. end MCC_ParseStack;
  6999.  
  7000. ----------------------------------------------------------------------
  7001. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7002. --mcclexidv.bdy
  7003. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7004.  
  7005. ----------------------------------------------------------------------
  7006.  
  7007. with MCC_Grammar_Constants;           -- constants from the parser generator
  7008. use MCC_Grammar_Constants;
  7009.     --| to gain visibility on ParserInteger's operations
  7010.  
  7011. package body MCC_Lex_Identifier_Token_Value is
  7012.  
  7013. --| Overview
  7014. --|
  7015. --| This perfect hash algorithm taken from
  7016. --|  "A Perfect Hash Function for Ada Reserved Words"
  7017. --|  by David Wolverton, published in Ada Letters Jul-Aug 1984
  7018. --|
  7019.     use MCC_ParseTables;
  7020.     package PT renames MCC_ParseTables;
  7021.  
  7022.     ------------------------------------------------------------------
  7023.     -- Declarations Local to Package Lex_Identifier_Token_Value
  7024.     ------------------------------------------------------------------
  7025.  
  7026.     subtype HashRange is integer ;
  7027.     subtype HashIdentifierSubrange is HashRange range 0..70 ;
  7028.  
  7029.     type XlateArray is array(character) of HashRange ;
  7030.     Xlate : constant XlateArray := XlateArray'(
  7031.     'A' => 0,    'B' => 49,   'C' => 0,   'D' => -7,   'E' => -20,
  7032.     'F' => 18,   'G' => -2,   'H' =>-38,  'I' => 33,   'J' =>  0,
  7033.     'K' => -9,   'L' =>  9,   'M' => 29,   'N' => -9,   'O' =>  6,
  7034.     'P' => 26,   'Q' =>  0,   'R' =>  8,   'S' =>  1,   'T' =>  1,
  7035.     'U' => -9,   'V' =>  0,   'W' => 56,   'X' =>-28,   'Y' => 11,
  7036.     'Z' =>  0, others => 0) ;
  7037.  
  7038.     type HashTableArray is array( HashIdentifierSubrange)
  7039.     of MCC_ParseTables.TokenRange ;
  7040.     --| Mapping from hash value into the token values.
  7041.  
  7042.     HashTable : constant HashTableArray := HashTableArray'(
  7043.     40 => 2,   -- ABORT
  7044.     6 => 3,    -- ABS
  7045.     37 => 4,   -- ACCEPT
  7046.     43 => 5,   -- ACCESS
  7047.     34 => 6,   -- ALL
  7048.     22 => 7,   -- AND
  7049.     16 => 8,   -- ARRAY
  7050.     3 => 9,    -- AT
  7051.     61 => 10,  -- BEGIN
  7052.     70 => 11,  -- BODY
  7053.     20 => 12,  -- CASE
  7054.     35 => 13,  -- CONSTANT
  7055.     14 => 14,  -- DECLARE
  7056.     9 => 15,   -- DELAY
  7057.     36 => 16,  -- DELTA
  7058.     38 => 17,  -- DIGITS
  7059.     7 => 18,   -- DO
  7060.     0 => 19,   -- ELSE
  7061.     19 => 20,  -- ELSIF
  7062.     2 => 21,   -- END
  7063.     30 => 22,  -- ENTRY
  7064.     8 => 23,   -- EXCEPTION
  7065.     1 => 24,   -- EXIT
  7066.     57 => 25,  -- FOR
  7067.     45 => 26,  -- FUNCTION
  7068.     21 => 27,  -- GENERIC
  7069.     46 => 28,  -- GOTO
  7070.     69 => 29,  -- IF
  7071.     42 => 30,  -- IN
  7072.     52 => 31,  -- IS
  7073.     17 => 32,  -- LIMITED
  7074.     67 => 33,  -- LOOP
  7075.     53 => 34,  -- MOD
  7076.     58 => 35,  -- NEW
  7077.     23 => 36,  -- NOT
  7078.     26 => 37,  -- NULL
  7079.     54 => 38,  -- OF
  7080.     44 => 39,  -- OR
  7081.     47 => 40,  -- OTHERS
  7082.     50 => 41,  -- OUT
  7083.     25 => 42,  -- PACKAGE
  7084.     56 => 43,  -- PRAGMA
  7085.     51 => 44,  -- PRIVATE
  7086.     49 => 45,  -- PROCEDURE
  7087.     29 => 46,  -- RAISE
  7088.     5 => 47,   -- RANGE
  7089.     41 => 48,  -- RECORD
  7090.     48 => 49,  -- REM
  7091.     24 => 50,  -- RENAMES
  7092.     39 => 51,  -- RETURN
  7093.     31 => 52,  -- REVERSE
  7094.     12 => 53,  -- SELECT
  7095.     27 => 54,  -- SEPARATE
  7096.     18 => 55,  -- SUBTYPE
  7097.     32 => 56,  -- TASK
  7098.     28 => 57,  -- TERMINATE
  7099.     4 => 58,   -- THEN
  7100.     15 => 59,  -- TYPE
  7101.     10 => 60,  -- USE
  7102.     59 => 61,  -- WHEN
  7103.     63 => 62,  -- WHILE
  7104.     60 => 63,  -- WITH
  7105.     11 => 64,  -- XOR
  7106.     others => PT.IdentifierTokenValue
  7107.     ) ;
  7108.  
  7109.     --| These are used to convert lower to upper case.
  7110.     convert : array(character) of character ;
  7111.     difference : constant := character'pos('a') - character'pos('A');
  7112.  
  7113.     ------------------------------------------------------------------
  7114.     -- Subprogram Specifications Local to
  7115.     -- Package Lex_Identifier_Token_Value
  7116.     ------------------------------------------------------------------
  7117.  
  7118.     function NormalizeToUpperCase ( --| normalize SYMREP to upper case
  7119.     In_String: in String) return String;
  7120.  
  7121.     ------------------------------------------------------------------
  7122.     -- Subprogram Bodies Global to Package Lex_Identifier_Token_Value
  7123.     ------------------------------------------------------------------
  7124.  
  7125.     procedure Find(
  7126.     In_Identifier   : in string;
  7127.     Out_Token_Value : out MCC_ParseTables.TokenRange) is
  7128.  
  7129.     subtype id_string is string(In_Identifier'Range);
  7130.  
  7131.     In_Identifier_Normalized : id_string;
  7132.  
  7133.     Length : HashRange := In_Identifier_Normalized'length ;
  7134.     --| Length of string
  7135.  
  7136.     First : HashRange := In_Identifier_Normalized'first ;
  7137.     --| Lower bound
  7138.  
  7139.     FirstChar, LastChar : character ;
  7140.     --| First and last characters
  7141.  
  7142.     SecondToLastChar : character ;
  7143.     --| Second to last character
  7144.  
  7145.     SecondToLast : HashRange;
  7146.     --| Alphabetic position of 2nd to last char.
  7147.  
  7148.     HashValue : HashRange ;
  7149.     --| Perfect hash value.
  7150.  
  7151.     TokenValue : MCC_ParseTables.GrammarSymbolRange ;
  7152.  
  7153.     begin
  7154.     In_Identifier_Normalized := NormalizeToUpperCase(In_Identifier);
  7155.  
  7156.     -- Assume In_Identifier is a plain identifier.
  7157.     Out_Token_Value   := PT.IdentifierTokenValue;
  7158.  
  7159.     if (Length <= 1) or else (Length >= 10) then
  7160.         -- Couldn't be a reserved word.
  7161.         return;
  7162.     else
  7163.         FirstChar := In_Identifier_Normalized(First) ;
  7164.         LastChar := In_Identifier_Normalized( (First+Length) -1 ) ;
  7165.         SecondToLastChar := In_Identifier_Normalized(
  7166.             (First+Length) -2 ) ;
  7167.         SecondToLast := character'pos(SecondToLastChar)
  7168.             - character'pos('A') ;
  7169.         HashValue := XLate(FirstChar) + XLate(LastChar) +
  7170.             2*SecondToLast + Length ;
  7171.     end if;
  7172.  
  7173.     if HashValue in HashIdentifierSubrange then
  7174.         -- index and see if it matches a reserved word value.
  7175.         -- if so, then compare the string to the reserved word text.
  7176.         TokenValue := MCC_ParseTables.GrammarSymbolRange(
  7177.         HashTable(HashValue)) ; -- conversion
  7178.         if TokenValue /= PT.IdentifierTokenValue then
  7179.             if (In_Identifier_Normalized =
  7180.             PT.Get_Grammar_Symbol(TokenValue) ) then
  7181.                 Out_Token_Value := PT.TokenRange(TokenValue) ;
  7182.                                  -- conversion
  7183.             end if;
  7184.         end if;
  7185.     end if;
  7186.     end Find;
  7187.  
  7188.     ------------------------------------------------------------------
  7189.     -- Subprogram Bodies Local to
  7190.     -- Package Lex_Identifier_Token_Value
  7191.     ------------------------------------------------------------------
  7192.  
  7193.     function NormalizeToUpperCase(  --| normalize SYMREP to upper case
  7194.     In_String: in String) return String is
  7195.  
  7196.     OutString : string (In_String'range);
  7197.  
  7198.     begin
  7199.     for i in In_String'range loop
  7200.         OutString(i) := convert(In_String(i));
  7201.     end loop;
  7202.     return OutString;
  7203.     end NormalizeToUpperCase;
  7204.  
  7205.     ------------------------------------------------------------------
  7206.  
  7207.     begin
  7208.  
  7209.     --| Initialize the conversion array for lower to upper case conversion
  7210.     for i in character loop
  7211.     case i is
  7212.         when 'a' .. 'z' =>
  7213.         convert(i) := character'val(character'pos(i)
  7214.                 - difference);
  7215.         when others =>
  7216.         convert(i) := i;
  7217.     end case;
  7218.     end loop;
  7219.  
  7220.     ------------------------------------------------------------------
  7221.  
  7222. end MCC_Lex_Identifier_Token_Value;
  7223.  
  7224. ----------------------------------------------------------------------
  7225. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7226. --mccgrmcon.bdy
  7227. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7228. --+ GRMCONST.BDY +--
  7229.  
  7230. Package body MCC_Grammar_Constants is
  7231.  
  7232.     function setGrammarSymbolCount return ParserInteger is
  7233.     begin
  7234.         return   319 ;
  7235.     end setGrammarSymbolCount;
  7236.     
  7237.     function setActionCount return ParserInteger is
  7238.     begin
  7239.         return  1422 ;
  7240.     end setActionCount;
  7241.     
  7242.     function setStateCountPlusOne return ParserInteger is
  7243.     begin
  7244.         return   946 ;
  7245.     end setStateCountPlusOne;
  7246.     
  7247.     function setLeftHandSideCount return ParserInteger is
  7248.     begin
  7249.     return   474 ;
  7250.     end setLeftHandSideCount;
  7251.     
  7252.     function setRightHandSideCount return ParserInteger is
  7253.     begin
  7254.         return   474 ;
  7255.     end setRightHandSideCount;
  7256.     
  7257. end MCC_Grammar_Constants;
  7258.  
  7259. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7260. --mccdefs.spc
  7261. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7262. with Lists;
  7263. with mcc_ParserDeclarations;
  7264.  
  7265. package McCabe_Definitions is
  7266.  
  7267.   subtype Max_Value is INTEGER range 1 .. 99;    -- max complexity
  7268.  
  7269.   type Node_Record;
  7270.  
  7271.   type Node_Type is access Node_Record;
  7272.  
  7273.   type Edges_Out_Type is (Left, Right);
  7274.  
  7275.   type Edge_Array is array( Edges_Out_Type ) of Node_Type;
  7276.  
  7277.   package Node_List is new Lists(Node_Type);
  7278.  
  7279.  
  7280.   type Node_Record is 
  7281.       record
  7282.  
  7283.           Node_Number    : NATURAL; 
  7284.           Edges_In       : Node_List.List;
  7285.           Edges_Out      : Edge_Array;
  7286.           End_Node       : Node_Type := NULL;  --| set to node degnating
  7287.                             --| END statement for a conditional (if,elsif,when) 
  7288.       end record;
  7289.  
  7290.   type McCabe_Stack_Element is
  7291.       record
  7292.           First : Node_Type := NULL;
  7293.           Last  : Node_Type := NULL;
  7294.       end record;
  7295.  
  7296.  
  7297. ------------------------------------------------------------------------------
  7298. -- global variables used by the McCabe Complexity Tool
  7299. ------------------------------------------------------------------------------
  7300.   
  7301.   Null_Element : McCabe_Stack_Element := (NULL,NULL);
  7302.  
  7303.   First_Node : Node_Type := Null;
  7304.   Last_Node  : Node_Type := Null; 
  7305.  
  7306.   Max_Complexity : Max_Value;
  7307.  
  7308.  
  7309.     type Subprogram_ItemType is
  7310.         record
  7311.             Unit_Name  : mcc_ParserDeclarations.Source_Text;
  7312.             Node_Count : NATURAL;
  7313.             Edge_Count : NATURAL;
  7314.         end record;
  7315.     Subprogram_Info  : Subprogram_ItemType;
  7316.                     --| Holds current subprogram information.  Used by grammar
  7317.                     --| and ReduceActions.apply_red.
  7318.  
  7319.   S_Identifier    : mcc_ParserDeclarations.Source_Text;
  7320.                     --| Identifier for current subunit
  7321.   S_Ident_Flag    : BOOLEAN := FALSE;
  7322.                     --| flag to mark identifier  (see getnext.sub)
  7323.  
  7324. end McCabe_Definitions;
  7325. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7326. --getnext.sub
  7327. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7328. with mcc_ParserDeclarations;
  7329. with McCabe_Definitions; use McCabe_Definitions;
  7330.  
  7331. separate (mcc_Lex)
  7332. function GetNextNonCommentToken return PD.ParseStackElement is
  7333.  
  7334.  
  7335.     begin
  7336.         loop
  7337.             CST := GetNextSourceToken;
  7338.  
  7339.             if (CST.gram_sym_val = PT.PackageTokenValue) OR
  7340.                (CST.gram_sym_val = PT.ProcedureTokenValue) OR
  7341.                (CST.gram_sym_val = PT.FunctionTokenValue) OR
  7342.                (CST.gram_sym_val = PT.TaskTokenValue) then
  7343.  
  7344.                 S_Ident_Flag := True;
  7345.  
  7346.             elsif (CST.gram_sym_val = PT.IdentifierTokenValue) OR
  7347.                   (CST.gram_sym_val = PT.StringTokenValue) then
  7348.  
  7349.                 if S_Ident_Flag then
  7350.                     S_Identifier := CST.lexed_token.text;
  7351.                     S_Ident_Flag := False;
  7352.                 end if;
  7353.  
  7354.             end if;
  7355.  
  7356.  
  7357.             exit when (CST.gram_sym_val = PT.EOF_TokenValue) or
  7358.                       (CST.gram_sym_val /= PT.Comment_TokenValue);
  7359.  
  7360. --          this is a comment.  put here the code which deals with
  7361. --          comments for your tool
  7362.  
  7363.  
  7364.         end loop;
  7365.  
  7366.  
  7367. -- Debug Aid
  7368. -- TEXT_IO.Put_Line(PD.Dump_Parse_Stack_Element(CST));
  7369. --
  7370.  
  7371.         return CST; -- return the token that is not a comment
  7372.     end GetNextNonCommentToken;
  7373. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7374. --mccparser.spc
  7375. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7376.  
  7377. ----------------------------------------------------------------------
  7378.  
  7379. with MCC_ParserDeclarations;        -- declarations for the Parser
  7380. use MCC_ParserDeclarations;
  7381.  
  7382. package MCC_Parser is
  7383.  
  7384.     --| Notes
  7385.     --| 
  7386.     --| WARNING:
  7387.     --| 
  7388.     --| Some of the code for this package is in the grammar source that is
  7389.     --| input to the parse table generator. One of the ouputs of the
  7390.     --| parse table generator is the source for the body of the procedure
  7391.     --| Apply_Actions used in this package. This procedure provides case
  7392.     --| statements to select the number of the rule to be used.
  7393.     --| This procedure is declared as separate subunits in the
  7394.     --| body of this package. It is strongly recommended that
  7395.     --| the code of these functions be kept integrated with the grammar
  7396.     --| for the following reasons.
  7397.     --|
  7398.     --| 1) to keep the case select numbers consistent with the reduce
  7399.     --| action numbers in the parse tables.
  7400.     --| 
  7401.     --| 2) to associate each grammar rule with the code for its actions.
  7402.     --| 
  7403.  
  7404.     package PD renames MCC_ParserDeclarations;
  7405.  
  7406.     ------------------------------------------------------------------
  7407.  
  7408.     procedure Apply_Actions(
  7409.     Rule_Number : in PT.LeftHandSideRange);
  7410.  
  7411.     ------------------------------------------------------------------
  7412.     
  7413.     function Parse                  --| NYU LALR style parser
  7414.     return PD.ParseStackElement;
  7415.     
  7416.     --| Raises
  7417.     --|
  7418.     --| ParserDeclarations.MemoryOverflow
  7419.     --|
  7420.     
  7421.     --| Effects
  7422.     --|
  7423.     --| This parser takes input from a Lexer and parses it according
  7424.     --| to a set of grammar rules that have been converted into a set of
  7425.     --| ParseTables by the NYU LALR Parser Generator.
  7426.     
  7427.     --| Requires
  7428.     --|
  7429.     --| The parser expects the Lexer and other units it uses to be
  7430.     --| initialized.
  7431.     --|
  7432.     --| The units that stay the same for different grammars are:
  7433.     --|
  7434.     --| Parser.Parse (this subprogram)
  7435.     --| ParseStack
  7436.     --|
  7437.     --| The units that need to be changed for different grammars are:
  7438.     --|
  7439.     --| Parser.Apply_Actions
  7440.     --| Lex
  7441.     --| ParserDeclarations
  7442.     --| ParseTables
  7443.     --|
  7444.     
  7445.     --| Modifies
  7446.     --|
  7447.     --| The following are modified:
  7448.     --|
  7449.     --| ParseStack
  7450.     --|
  7451.     
  7452.     ------------------------------------------------------------------
  7453.  
  7454. end MCC_Parser;
  7455.  
  7456. ----------------------------------------------------------------------
  7457. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7458. --mccstk.spc
  7459. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7460. -- $Source: /nosc/work/parser/RCS/ParseStk.spc,v $
  7461. -- $Revision: 4.0 $ -- $Date: 85/02/19 11:33:03 $ -- $Author: carol $
  7462.  
  7463. ----------------------------------------------------------------------
  7464.  
  7465. with mcc_ParserDeclarations;        -- declarations for the Parser
  7466. use mcc_ParserDeclarations;
  7467. with McCabe_Definitions;
  7468. use McCabe_Definitions;
  7469.  
  7470. package McCabe_Stack is           --| Elements awaiting parsing
  7471.  
  7472. --| Overview
  7473. --|
  7474. --| The Stack used by the McCabe Complexities Tool.
  7475. --|
  7476. --| This data structure has the following sets of operations:
  7477. --|
  7478. --| 1) A set that add and delete elements.  This set can
  7479. --| raise the exceptions: UnderFlow and OverFlow.
  7480. --| The set includes:
  7481. --|
  7482. --|     Pop
  7483. --|     Push
  7484. --|     Reduce
  7485. --|
  7486. --| 2) A function that returns the number of elements in the
  7487. --| data structure. This set raises no exceptions.
  7488. --| The set includes:
  7489. --|
  7490. --|     Length
  7491. --|
  7492. --| 3) A procedure that re-initializes the stack to have zero elements.
  7493. --| This set raises no exception.
  7494. --| The set includes:
  7495. --|
  7496. --|     Initialize 
  7497.  
  7498. --|
  7499. --| Notes
  7500. --|
  7501. --|     Under some implementations the exception
  7502. --| ParserDeclarations.MemoryOverflow could be raised.
  7503. --|
  7504.  
  7505.     package PD renames mcc_ParserDeclarations;
  7506.     package MD renames McCabe_Definitions;
  7507.  
  7508.     ------------------------------------------------------------------
  7509.     -- Declarations Global to Package McCabe_Stack
  7510.     ------------------------------------------------------------------
  7511.  
  7512.     OverFlow  : exception;
  7513.         --| raised if no more space in stack.
  7514.     UnderFlow : exception;
  7515.         --| raised if no more elements in stack.
  7516.  
  7517.     ------------------------------------------------------------------
  7518.  
  7519.     procedure Push(         --| Adds new top element to stack
  7520.         Element: in MD.McCabe_Stack_Element); --| element to add
  7521.  
  7522.     --| Raises
  7523.     --|
  7524.     --| OverFlow - no more space in stack.
  7525.  
  7526.     --| Effects
  7527.     --|
  7528.     --| This subprogram adds an element to the top of the stack.
  7529.     --|
  7530.     
  7531.     ------------------------------------------------------------------
  7532.     
  7533.     procedure Pop;                 --| Removes top element in stack
  7534.  
  7535.     --| Raises
  7536.     --|
  7537.     --| UnderFlow - no more elements in stack.
  7538.  
  7539.     --| Effects
  7540.     --|
  7541.     --| This subprogram obtains the element at the top of the stack.
  7542.     --|
  7543.     
  7544.     ------------------------------------------------------------------
  7545.     
  7546.     function Length                 --| Returns the number of
  7547.                                     --| elements in the stack
  7548.         return PD.StateParseStacksIndex;
  7549.  
  7550.     --| Effects
  7551.     --|
  7552.     --| This subprogram returns the number of elements in the stack.
  7553.     --|
  7554.     
  7555.     ----------------------------------------------------------------------
  7556.  
  7557.     procedure Initialize;      --| Re-initializes the state to have no
  7558.                 --| elements.
  7559.  
  7560.     --| Effects
  7561.     --| 
  7562.     --| Resets the top of the stack to the first element.
  7563.  
  7564.     ----------------------------------------------------------------------
  7565.     
  7566.     procedure Reduce(           --| Pops and discards top n elements on
  7567.                                 --| the stack.
  7568.         TopN : in PD.StateParseStacksIndex);
  7569.         --| Number of elements to pop.
  7570.  
  7571.     --| Raises
  7572.     --|
  7573.     --| Underflow - no more elements in stack.
  7574.  
  7575.     --| Effects
  7576.     --|
  7577.     --| Pops and discards top N elements on the stack.
  7578.     --| If TopN is greater than the number of elements in the stack,
  7579.     --| Underflow is raised.
  7580.     --| This subprogram is used by the parser to reduce the stack during
  7581.     --| a reduce action.
  7582.     --| This stack reduction could be done with a for loop and
  7583.     --| the Pop subprogram at a considerable cost in execution time.
  7584.     --|
  7585.     
  7586.     ----------------------------------------------------------------------
  7587.  
  7588.     function Get_Stack_Element(
  7589.                                position : PD.StateParseStacksIndex
  7590.                               ) 
  7591.                                return MD.McCabe_Stack_Element;
  7592.                     
  7593.     ----------------------------------------------------------------------
  7594.  
  7595.     procedure Put_Element_Value(First_Node : MD.Node_Type;
  7596.                                 Last_Node  : MD.Node_Type;
  7597.                                 position   : PD.StateParseStacksIndex
  7598.                                );
  7599.  
  7600.     ----------------------------------------------------------------------
  7601.  
  7602. end McCabe_Stack;
  7603.     
  7604. --------------------------------------------------------------------------
  7605. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7606. --parse.bdy
  7607. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7608. -- $Source: /nosc/work/parser/RCS/Parse.bdy,v $
  7609. -- $Revision: 4.0 $ -- $Date: 85/02/19 12:00:03 $ -- $Author: carol $
  7610.  
  7611. ----------------------------------------------------------------------
  7612.  
  7613. with mcc_Lex;        -- the lexical analyzer
  7614. with mcc_ParseStack;    -- elements awaiting parsing
  7615. with mcc_StateStack;    -- stack of parse states
  7616. with mcc_ParseTables;    -- state tables generated by parser generator
  7617. use mcc_ParseTables;
  7618.  
  7619. with mcc_Grammar_Constants;    -- constants generated by parser generator
  7620. use mcc_Grammar_Constants;
  7621.  
  7622. with McCabe_Definitions; use McCabe_Definitions;
  7623. with McCabe_Stack;  use McCabe_Stack;
  7624.  
  7625.  
  7626. package body mcc_Parser is
  7627.  
  7628.  
  7629.     package MD renames McCabe_Definitions;
  7630.  
  7631.  
  7632.     ------------------------------------------------------------------
  7633.     -- Reduce Action Work Variables
  7634.     ------------------------------------------------------------------
  7635.  
  7636.     Reduce_Action_Number   : PT.LeftHandSideRange;
  7637.         --| reduction to perform
  7638.  
  7639.     Reduce_Action_LH_Value : GrammarSymbolRange;
  7640.         --| grammar symbol number of left hand side of reduction
  7641.  
  7642.     Reduce_Action_RH_Size  : PD.StateParseStacksIndex;
  7643.         --| number of elements in right hand side of reduction
  7644.  
  7645.     New_Stack_Element : PD.ParseStackElement;
  7646.         --| New element created when a grammar reduction takes place
  7647.    
  7648.     New_McCabe_Element : MD.McCabe_Stack_Element;
  7649.         --| New McCabe element created when a grammar reduction takes place
  7650.  
  7651.     ------------------------------------------------------------------
  7652.  
  7653.     procedure Apply_Actions(
  7654.         Rule_Number : in PT.LeftHandSideRange) is separate;
  7655.  
  7656.     ------------------------------------------------------------------
  7657.  
  7658.     function Parse return PD.ParseStackElement is
  7659.  
  7660.     --| Overview
  7661.     --|
  7662.     --| The appropriate reference is:
  7663.     --|
  7664.     --| Using the NYU LALR Parser Generator. Philippe Charles and
  7665.     --| Gerald Fisher. Courant Institute, New York University, 251 Mercer
  7666.     --| Street, New York, N.Y.  10012. Unpublished paper. 1981.
  7667.     --|
  7668.  
  7669.     --|
  7670.     --| Notes
  7671.     --|
  7672.     --| Abbreviations Used:
  7673.     --|
  7674.     --| Cur : Current - used as prefix
  7675.     --| LH  : LeftHand
  7676.     --| RH  : RightHand
  7677.     --|
  7678.  
  7679.     ------------------------------------------------------------------
  7680.     -- Objects
  7681.     ------------------------------------------------------------------
  7682.  
  7683.     Current_Action      : ActionRange;
  7684.         --| return from PT.GetAction.
  7685.  
  7686.     Start_State         : constant := 1;
  7687.         --| Start state for parser.
  7688.  
  7689.     Last_Element_Popped : PD.ParseStackElement;
  7690.         --| Last element popped from parse stack
  7691.  
  7692.         ------------------------------------------------------------------
  7693.  
  7694.     begin
  7695.  
  7696.     --|
  7697.     --| Algorithm
  7698.     --|
  7699.     --| Function PT.GetAction returns an action value,
  7700.     --| which indicate one of four possible actions:
  7701.     --|
  7702.     --| Error:  action value = 0.
  7703.     --| Shift:  0 < action value < StateCountPlusOne.
  7704.     --| Accept: action value = StateCountPlusOne.
  7705.     --| Reduce: action value > StateCountPlusOne.
  7706.     --|
  7707.     --| The action is processed (as described below).
  7708.     --| This is repeated until no more tokens are obtained.
  7709.     --|
  7710.     --| The basic action processing is:
  7711.     --|
  7712.     --| SHIFT ACTION: the next token is placed on the ParseStack.
  7713.     --|
  7714.     --| REDUCE ACTION: the handle (a grammar rule's right hand side)
  7715.     --| found on the ParseStack is replaced with a
  7716.     --| non-terminal (grammar rule's left hand side) to which
  7717.     --| it has been reduced, and a new state.
  7718.     --|
  7719.     --| ACCEPT ACTION: the ParseStack contains the root
  7720.     --| of the parse tree, and processing is finished for
  7721.     --| If another compilation unit is present, parsing continues.
  7722.     --|
  7723.     --| ERROR ACTION: the exception Parser_Error is raised.
  7724.  
  7725.     ------------------------------------------------------------------
  7726.     
  7727.         -- Initialize Lexical Analyzer
  7728.         mcc_Lex.Initialization;
  7729.  
  7730.         PD.CurToken := mcc_Lex.GetNextNonCommentToken;
  7731.  
  7732.     mcc_StateStack.Initialize;
  7733.     mcc_ParseStack.Initialize;
  7734.         McCabe_Stack.Initialize;
  7735.  
  7736.         mcc_StateStack.Push(Start_State);
  7737.  
  7738.         Do_Parse: loop
  7739.  
  7740.             Current_Action := PT.GetAction(
  7741.                 mcc_StateStack.CopyTop,
  7742.                 PD.CurToken.gram_sym_val);
  7743.  
  7744.             -- Accept action
  7745.             exit when (Current_Action in PD.Accept_Action_Range);
  7746.         
  7747.             if Current_Action in PD.Shift_Action_Range then
  7748.  
  7749.                 -- Shift token from CurToken to ParseStack.
  7750.                 mcc_ParseStack.Push(PD.CurToken);
  7751.  
  7752.                 McCabe_Stack.Push(MD.Null_Element);
  7753.  
  7754.                 -- Add new state to top of StateStack
  7755.                 mcc_StateStack.Push(Current_Action);
  7756.         
  7757.                 -- Get next token.
  7758.                 PD.CurToken := mcc_Lex.GetNextNonCommentToken;
  7759.         
  7760.             elsif Current_Action in PD.Reduce_Action_Range then
  7761.         
  7762.                 Reduce_Action_Number := Current_Action -
  7763.                     StateCountPlusOne;
  7764.  
  7765.                 Reduce_Action_LH_Value  :=
  7766.                     PT.Get_LeftHandSide(Reduce_Action_Number);
  7767.  
  7768.                 Reduce_Action_RH_Size :=
  7769.                     PT.Get_RightHandSide(Reduce_Action_Number);
  7770.  
  7771.                 New_Stack_Element.gram_sym_val := Reduce_Action_LH_Value;
  7772.                 New_Stack_Element.lexed_token.text := PD.Null_Source_Text;
  7773.                 New_Stack_Element.lexed_token.srcpos_line := 0;
  7774.                 New_Stack_Element.lexed_token.srcpos_Column := 0;
  7775.                                           
  7776.                 Apply_Actions(Reduce_Action_Number);
  7777.  
  7778.                 -- Reduce Parse Stack
  7779.                 mcc_ParseStack.Reduce(Reduce_Action_RH_Size);
  7780.                 McCabe_Stack.Reduce(Reduce_Action_RH_Size);
  7781.  
  7782.                 New_McCabe_Element.first := MD.First_Node;
  7783.                 New_McCabe_Element.last  := MD.Last_Node;
  7784.  
  7785.                 MD.First_Node := NULL;
  7786.                 MD.Last_Node  := NULL;
  7787.  
  7788.                 mcc_ParseStack.Push(New_Stack_Element);
  7789.                 McCabe_Stack.Push(New_McCabe_Element);
  7790.  
  7791.                 -- Reduce State Stack
  7792.                 mcc_StateStack.Reduce(Reduce_Action_RH_Size);
  7793.  
  7794.                 mcc_StateStack.Push(PT.GetAction(
  7795.                     mcc_StateStack.CopyTop,
  7796.                     Reduce_Action_LH_Value));
  7797.  
  7798.  
  7799.             else -- Current_Action is in PD.Error_Action_Range
  7800.                 raise PD.Parser_Error;
  7801.             end if;
  7802.         end loop Do_Parse;
  7803.  
  7804.         McCabe_Stack.Pop;
  7805.         return mcc_ParseStack.Pop;
  7806.     
  7807.     exception
  7808.         when PD.MemoryOverflow =>
  7809.             -- raised if Parse runs out of newable memory.
  7810.             raise PD.MemoryOverflow;
  7811.     
  7812.     end Parse;
  7813.     
  7814.     ------------------------------------------------------------------
  7815.  
  7816. end mcc_Parser;
  7817.  
  7818. ----------------------------------------------------------------------
  7819. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7820. --flowgraph.spc
  7821. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7822. with mcc_ParserDeclarations;
  7823. with Lists;
  7824. with McCabe_Definitions;
  7825.  
  7826. package Flow_Graph_Pkg is
  7827.  
  7828.     use McCabe_Definitions;
  7829.  
  7830.     package PD renames mcc_ParserDeclarations;
  7831.     package MD renames McCabe_Definitions;
  7832.  
  7833.  
  7834. -----------------------------------------------------------------------------
  7835. -- Global types
  7836. -----------------------------------------------------------------------------
  7837.  
  7838. type Item_Type is
  7839.     record
  7840.         Name : PD.Source_Text;
  7841.         Node : MD.Node_Type;
  7842.     end record;
  7843.  
  7844.  
  7845. ----------------------------------------------------------------------------
  7846. -- Generic packages
  7847. ----------------------------------------------------------------------------
  7848.  
  7849.     package Node_List is new Lists(MD.Node_Type);
  7850.  
  7851.     package Item_List is new Lists(Item_Type);
  7852.  
  7853.  
  7854. --------------------------------------------------------------------------
  7855. --  Procedures providing operations for producing graph
  7856. --------------------------------------------------------------------------
  7857.  
  7858. procedure Make_Edge(    --| procedure to create edges between two nodes
  7859.     From_Node: MD.Node_Type;
  7860.     To_Node: MD.Node_Type;
  7861.     Which_Out: MD.Edges_Out_Type := MD.Left
  7862.     );
  7863.  
  7864. function Make_Node    --| procedure to create and return a new node
  7865.     return MD.Node_Type;
  7866.  
  7867.  
  7868. ---------------------------------------------------------------------------
  7869. -- subprograms providing operations for reading graph
  7870. ---------------------------------------------------------------------------
  7871.  
  7872. function Find_Top_Node(
  7873. --| procedure to find the first open top node of a conditional statement
  7874.     N : MD.Node_Type
  7875.     ) return MD.Node_Type;
  7876.  
  7877.  
  7878. end Flow_Graph_Pkg;
  7879.  
  7880.  
  7881.  
  7882.  
  7883.  
  7884. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7885. --statement.spc
  7886. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7887. with McCabe_Definitions;
  7888. with mcc_ParserDeclarations;
  7889. with mcc_ParseTables;
  7890. with mcc_Grammar_Constants;
  7891. with Lists;
  7892. with Labeled_Binary_Trees_Pkg;
  7893. with Flow_Graph_Pkg;
  7894. with Stack_Pkg;
  7895. with String_Pkg;
  7896.  
  7897. package Statements_Pkg is
  7898.  
  7899.     use McCabe_Definitions;
  7900.     use mcc_ParserDeclarations;
  7901.     use mcc_ParseTables;
  7902.     use mcc_Grammar_Constants;
  7903.  
  7904.     package PD renames mcc_ParserDeclarations;
  7905.     package FG renames Flow_Graph_Pkg;
  7906.     package MD renames McCabe_Definitions;
  7907.     package GC renames mcc_Grammar_Constants;
  7908.     package SP renames String_Pkg;
  7909.  
  7910.     function Label_Compare(x,y : SP.String_Type) return integer;
  7911.  
  7912.     package Label_Tree_Pkg is new Labeled_Binary_Trees_Pkg(
  7913.     Label_Type => SP.String_Type,
  7914.     Value_Type => MD.Node_Type,
  7915.     Difference => Label_Compare
  7916.     );
  7917.  
  7918.     package McCabe_List_Pkg is new Lists(ItemType => MD.Node_Type);
  7919.  
  7920.     package LT renames Label_Tree_Pkg;
  7921.  
  7922.     Curr_Label_Tree : LT.tree;
  7923.  
  7924.     package LP renames McCabe_List_Pkg;
  7925.  
  7926.     type Statement_Type is (Compound, Simple);
  7927.  
  7928.  
  7929.  
  7930.     package ST is new Stack_Pkg(Subprogram_ItemType);
  7931.  
  7932. ------------------------------------------------------------------------------
  7933. --  Declarations of global variables for Subprogram 
  7934. ------------------------------------------------------------------------------
  7935.  
  7936.     Source_File_Name : SP.String_Type;
  7937.             --| Name of the input file
  7938.  
  7939.     Subunit       : ST.Stack;
  7940.                     --| Holds current stack pointer
  7941.     Identifier    : PD.Source_Text;
  7942.                     --| Identifier for current subunit
  7943.     Ident_Flag    : BOOLEAN := FALSE;
  7944.                     --| flag to mark identifier  (see getnext.sub)
  7945.  
  7946.  
  7947.             -- Exceptions --
  7948.  
  7949.     Empty_Stack: exception;    --| Raised if an attempt is made to
  7950.                 --| manipulate an empty list.
  7951.  
  7952.  
  7953. --------------------------------------------------------------------------
  7954. --  Global Variables and Constants
  7955. --------------------------------------------------------------------------
  7956.  
  7957. --|  global constants for grammar symbols (may change if grammar changes);
  7958. --|  these constants correspond to the constants generated by the parser
  7959. --|  in the file mcc.tab
  7960.  
  7961.     Loop_Token         : constant GrammarSymbolRange := 33;
  7962.     Select_Stmt_Token  : constant GrammarSymbolRange := 53;
  7963.     Identifier_Token   : constant GrammarSymbolRange := 65;
  7964.     Expanded_Name      : constant GrammarSymbolRange := 214;
  7965.     Statement_Token    : constant GrammarSymbolRange := 216;
  7966.     Stmt_List_Token    : constant GrammarSymbolRange := 217;
  7967.     Seq_of_Stmt        : constant GrammarSymbolRange := 218;
  7968.     Simple_Stmt        : constant GrammarSymbolRange := 219;
  7969.     Comp_Stmt          : constant GrammarSymbolRange := 220;
  7970.     Label_Plus_Token   : constant GrammarSymbolRange := 221;
  7971.     Exit_Stmt          : constant GrammarSymbolRange := 224;
  7972.     Goto_Stmt          : constant GrammarSymbolRange := 226;
  7973.     If_Stmt            : constant GrammarSymbolRange := 232;
  7974.     Case_Stmt          : constant GrammarSymbolRange := 233;
  7975.     Loop_Stmt          : constant GrammarSymbolRange := 234;
  7976.     Block_Stmt         : constant GrammarSymbolRange := 235;
  7977.     Accept_Stmt        : constant GrammarSymbolRange := 236;
  7978.     Select_Stmt        : constant GrammarSymbolRange := 237;
  7979.     Label_Token        : constant GrammarSymbolRange := 238;
  7980.     Elsif_Part         : constant GrammarSymbolRange := 240;    
  7981.     Else_Part          : constant GrammarSymbolRange := 241;
  7982.     Case_Stmt_Alt      : constant GrammarSymbolRange := 246;
  7983.     Case_Stmt_Alt_List : constant GrammarSymbolRange := 244;
  7984.     Loop_Id_Token      : constant GrammarSymbolRange := 247;
  7985.     Iteration_Rule     : constant GrammarSymbolRange := 249;    
  7986.     Begin_End          : constant GrammarSymbolRange := 250;
  7987.     Dec_Begin_End      : constant GrammarSymbolRange := 251;    
  7988.     Pragma_Except_Hand : constant GrammarSymbolRange := 252;
  7989.     Select_Wait        : constant GrammarSymbolRange := 272;
  7990.     Cond_Entry         : constant GrammarSymbolRange := 273;
  7991.     Timed_Entry        : constant GrammarSymbolRange := 274;
  7992.     Select_Alt         : constant GrammarSymbolRange := 275;
  7993.     Or_Select_Alt      : constant GrammarSymbolRange := 276;
  7994.     Select_Wait_Alt    : constant GrammarSymbolRange := 277;
  7995.     Accept_Alt         : constant GrammarSymbolRange := 278;
  7996.     Delay_Alt          : constant GrammarSymbolRange := 279;
  7997.     Terminate_Alt      : constant GrammarSymbolRange := 280;
  7998.     Bracket_Sequence   : constant GrammarSymbolRange := 281;
  7999.     Else_Seq_of_Stmt   : constant GrammarSymbolRange := 317;    
  8000.     Except_Handler     : constant GrammarSymbolRange := 293;
  8001.     Except_Hand_List   : constant GrammarSymbolRange := 318;
  8002.  
  8003. -- global stack elements
  8004.  
  8005.     Id_Element     : PD.ParseStackElement;
  8006.     Expand_Element : PD.ParseStackElement;
  8007.  
  8008.     
  8009. -- global label stack
  8010.  
  8011.     package STL is new Stack_Pkg(LT.Tree);
  8012.  
  8013.     Label_Stack  : STL.Stack;
  8014.    
  8015. --------------------------------------------------------------------------
  8016. --  The following groups of subprograms are used in the actions file. 
  8017. --------------------------------------------------------------------------
  8018.  
  8019. --------------------------------------------------------------------------------
  8020. -- Procedures for tying together a sequence of statements
  8021. --------------------------------------------------------------------------------
  8022.  
  8023. procedure Sequence_of_Statements 
  8024.     --| procedure to connect a sequence of statement nodes using the following
  8025.     --| grammar reduction.
  8026.                                 ;
  8027.  
  8028.     --| Overview
  8029.     --|
  8030.     --| sequence_of_statements   ::= 
  8031.     --|          {pragma_stm} statement {statement} 
  8032.  
  8033.     --| Effects
  8034.     --|     Causes the nodes for a statement and a list of statements to be 
  8035.     --| connected in the flow graph.
  8036.  
  8037.  
  8038.     --| Modifies
  8039.     --|    McCabe_Definitions.First_Node
  8040.     --|    McCabe_Definitions.Last_Node
  8041.     --|    McCabe_Stack.Space
  8042.  
  8043.     --| N/A  
  8044.  
  8045. procedure Statement_List
  8046.     --| procedure to connect a list of statements 
  8047.                         ;
  8048.  
  8049.     --| Overview
  8050.     --|                        
  8051.     --| {statement}   ::= 
  8052.     --|         {pragma_stm} 
  8053.     --|
  8054.     --|     |   {statement} statement {pragma_stm}
  8055.       
  8056.     --| Effects
  8057.     --|     Causes the nodes for a statement and a list of statements to be 
  8058.     --| connected in the flow graph.
  8059.  
  8060.     --| Modifies
  8061.     --|    McCabe_Definitions.First_Node
  8062.     --|    McCabe_Definitions.Last_Node
  8063.     --|    McCabe_Stack.Space
  8064. -----------------------------------------------------------------------------
  8065. --  Procedures to handle loops and exits
  8066. -----------------------------------------------------------------------------
  8067.  
  8068. procedure Loop_Statement(
  8069. --| Procedure to create flow graph for a loop statement.
  8070.     Iteration_Rule_Exists : Boolean
  8071.     );
  8072.  
  8073.     --| Overview
  8074.     --|                        
  8075.     --|loop_statement   ::=
  8076.     --|         [loop_identifier:] iteration_rule
  8077.     --|             sequence_of_statements END LOOP [identifier] ;
  8078.  
  8079.     --| Effects
  8080.     --| Causes the nodes for a statement and a list of statements to be 
  8081.     --| connected in the flow graph.  Creates nodes for the top and bottom of
  8082.     --| the loop statement and modifies the Edge list for the nodes involved.
  8083.  
  8084.     --| Modifies
  8085.     --|    McCabe_Definitions.First_Node
  8086.     --|    McCabe_Definitions.Last_Node
  8087.     --|    McCabe_Stack.Space
  8088.  
  8089. procedure Labeled_Exit(
  8090. --| Procedure for determining the flow of a labeled exit, and adding it
  8091. --| the flow graph.
  8092.     Conditional: boolean
  8093.     );
  8094.  
  8095.     --| Overview
  8096.     --|
  8097.     --| exit_statement   ::= 
  8098.     --|
  8099.     --|     |   EXIT expanded_name ;
  8100.     --|    
  8101.     --|     |   EXIT expanded_name WHEN condition ;
  8102.  
  8103.     --| Effects
  8104.     --|    Finds the enclosing loop with the matching identifier and causes the
  8105.     --| flow of control to point to the end of that loop.
  8106.  
  8107.  
  8108.     --| Modifies
  8109.     --|    McCabe_Definitions.First_Node
  8110.     --|    McCabe_Definitions.Last_Node
  8111.     --|    McCabe_Stack.Space
  8112.  
  8113.  
  8114. procedure UnLabeled_Exit(
  8115. --| Procedure to determine the flow of control for an unlabeled exit
  8116.     Conditional: boolean
  8117.     );
  8118.  
  8119.     --| Overview
  8120.     --|
  8121.     --| exit_statement   ::= 
  8122.     --|
  8123.     --|         EXIT ;
  8124.     --|
  8125.     --|     |   EXIT WHEN condition ;
  8126.  
  8127.  
  8128.     --| Modifies
  8129.     --|    McCabe_Definitions.First_Node
  8130.     --|    McCabe_Definitions.Last_Node
  8131.     --|    McCabe_Stack.Space
  8132. -----------------------------------------------------------------------------
  8133. --    Procedures to handle Labeled statements and Goto's
  8134. -----------------------------------------------------------------------------
  8135.  
  8136. procedure Goto_Statement;
  8137. --| Procedure to determine flow of control for a goto statement
  8138.  
  8139.     --| Overview
  8140.     --|    
  8141.     --| goto_statement   ::= 
  8142.     --|         GOTO expanded_name ;
  8143.  
  8144.     --| Modifies
  8145.     --|    McCabe_Definitions.First_Node
  8146.     --|    McCabe_Definitions.Last_Node
  8147.     --|    McCabe_Stack.Space
  8148.     --|    Label_List
  8149.  
  8150. procedure Set_Label;
  8151. --| Procedure to set the label id and place it in a list for later reference
  8152.  
  8153.     --| Overview
  8154.     --|
  8155.     --| label   ::= 
  8156.     --|         << identifier >>
  8157.  
  8158.     --| Modifies
  8159.     --|    McCabe_Definitions.First_Node
  8160.     --|    McCabe_Definitions.Last_Node
  8161.     --|    McCabe_Stack.Space
  8162.     --|    Label_List
  8163.  
  8164. procedure Label_Plus_Rule;
  8165.     --| procedure to connect two (or more) labels listed consecutively
  8166.  
  8167.     --| Overview
  8168.     --|    
  8169.     --|  {label}+   ::=
  8170.     --|         label
  8171.     --|     |   {label}+ label
  8172.  
  8173.     --| Modifies
  8174.     --|    McCabe_Definitions.First_Node
  8175.     --|    McCabe_Definitions.Last_Node
  8176.     --|    McCabe_Stack.Space
  8177.     --|    Label_List
  8178.  
  8179. procedure Label_Plus_Statement_Rule(
  8180. --| procedure to connect a list of labels with the corresponding statement.
  8181.     This_Statement : Statement_Type
  8182.     );
  8183.  
  8184.     --| Overview
  8185.     --|                                     
  8186.     --| statement   ::= 
  8187.     --|
  8188.     --|     |   {label}+ simple_statement
  8189.     --|
  8190.     --|     |   {label}+ compound_statement
  8191.  
  8192.     --| Modifies
  8193.     --|    McCabe_Definitions.First_Node
  8194.     --|    McCabe_Definitions.Last_Node
  8195.     --|    McCabe_Stack.Space
  8196. -----------------------------------------------------------------------------
  8197. --     procedures for conditional statements
  8198. --        such as IF, SELECT, CASE, and Exception Handlers
  8199. -----------------------------------------------------------------------------
  8200.  
  8201. procedure Entry_Call(
  8202. --| procedure to create the nodes and edges required for an entry call
  8203.     Else_Part_Kind: GrammarSymbolRange
  8204.     );
  8205.  
  8206.     --| Overview
  8207.     --|
  8208.     --| conditional_entry_call   ::= 
  8209.     --|     SELECT_token {pragma_stm} call_statement [sequence_of_statements]
  8210.     --|            ELSE__sequence_of_statements END SELECT ;
  8211.     --|
  8212.     --| timed_entry_call   ::= 
  8213.     --|     SELECT {pragma_stm} call_statement [sequence_of_statements]
  8214.     --|            OR {pragma_stm} delay_alternative END SELECT ;
  8215.  
  8216.  
  8217.  
  8218.     --| Modifies
  8219.     --|    McCabe_Definitions.First_Node
  8220.     --|    McCabe_Definitions.Last_Node
  8221.     --|    McCabe_Stack.Space
  8222.  
  8223. procedure Accept_Alternative;
  8224. --| procedure to connect the parts of an accept alternative 
  8225.  
  8226.     --| Overview
  8227.     --|
  8228.     --| accept_alternative   ::= 
  8229.     --|         accept_statement [sequence_of_statements]
  8230.  
  8231.     --| Modifies
  8232.     --|    McCabe_Definitions.First_Node
  8233.     --|    McCabe_Definitions.Last_Node
  8234.     --|    McCabe_Stack.Space
  8235.  
  8236.  
  8237. procedure Elsif_or_OR_Statement(
  8238. --| procedure to connect the parts of an elsif part of and if statement
  8239. --| or the OR part of a select statement
  8240.     List_Part: GrammarSymbolRange;
  8241.     Seq_Part: GrammarSymbolRange
  8242.     );
  8243.  
  8244.     --| Overview
  8245.     --|
  8246.     --| {ELSIF__condition__THEN__sequence_of_statements}   ::= 
  8247.     --|          empty 
  8248.     --|
  8249.     --|     |   {ELSIF__condition__THEN__sequence_of_statements} 
  8250.     --|            ELSIF__condition__THEN sequence_of_statements
  8251.     --|
  8252.     --| {OR__select_alternative}   ::= 
  8253.     --|          empty 
  8254.     --|      |   {OR__select_alternative} OR select_alternative
  8255.  
  8256.     --| Modifies
  8257.     --|    McCabe_Definitions.First_Node
  8258.     --|    McCabe_Definitions.Last_Node
  8259.     --|    McCabe_Stack.Space
  8260.  
  8261.  
  8262. procedure Conditional_Stmt_Alternative;
  8263. --| procedure to create the nodes and edges required for a conditional
  8264. --| statement alternative.
  8265.  
  8266.     --| Overview
  8267.     --|
  8268.     --| case_statement_alternative   ::= 
  8269.     --|         WHEN_choice_=> sequence_of_statements 
  8270.     --|
  8271.     --| exception_handler   ::= 
  8272.     --|         WHEN_exception_choice_=>
  8273.     --|            sequence_of_statements
  8274.  
  8275.     --| Modifies
  8276.     --|    McCabe_Definitions.First_Node
  8277.     --|    McCabe_Definitions.Last_Node
  8278.     --|    McCabe_Stack.Space
  8279.  
  8280.  
  8281. procedure Conditional_Stmt_Alternative_List( 
  8282. --| procedure to connect a list of conditional statement alternatives
  8283.     Alternate_Kind: GrammarSymbolRange;
  8284.     List_Kind: GrammarSymbolRange
  8285.     );    
  8286.  
  8287.     --| Overview
  8288.     --| {case_statement_alternative}   ::= 
  8289.     --|     |   {case_statement_alternative} case_statement_alternative
  8290.     --|
  8291.     --| exception_handler_list   ::= 
  8292.     --|         exception_handler 
  8293.     --|     |   exception_handler_list exception_handler
  8294.  
  8295.  
  8296.     --| Modifies
  8297.     --|    McCabe_Definitions.First_Node
  8298.     --|    McCabe_Definitions.Last_Node
  8299.     --|    McCabe_Stack.Space
  8300.  
  8301.  
  8302. procedure Conditional_End (
  8303. --| procedure to finish up the flow graph for a conditional statement
  8304.     List_Part: GrammarSymbolRange := Elsif_Part;
  8305.     Seq_Part: GrammarSymbolRange := Seq_of_Stmt
  8306.     );
  8307.     --| Overview
  8308.     --|
  8309.     --| if_statement   ::= 
  8310.     --|         IF condition_THEN__sequence_of_statements
  8311.     --|         {ELSIF__condition__THEN__sequence_of_statements} 
  8312.     --|         [ELSE__sequence_of_statements] END IF ;
  8313.     --|
  8314.     --| case_statement   ::= 
  8315.     --|         CASE_expression_IS
  8316.     --|         {pragma_alt} case_statement_alternative
  8317.     --|         {case_statement_alternative} END CASE ;
  8318.     --|
  8319.     --| selective_wait   ::= 
  8320.     --|         SELECT_token select_alternative {OR__select_alternative} 
  8321.     --|            [ELSE__sequence_of_statements] END SELECT ;
  8322.  
  8323.     --| Modifies
  8324.     --|    McCabe_Definitions.First_Node
  8325.     --|    McCabe_Definitions.Last_Node
  8326.     --|    McCabe_Stack.Space
  8327.  
  8328.  
  8329. procedure Exception_End;
  8330. --| procedure to finish up the connections for the end of an exception
  8331. --| handler
  8332.  
  8333.     --| Overview
  8334.     --| begin_end_block   ::=
  8335.     --|     |   BEGIN sequence_of_statements
  8336.     --|         EXCEPTION {pragma_alt}__exception_handler_list END
  8337.  
  8338.     --| Modifies
  8339.     --|    McCabe_Definitions.First_Node
  8340.     --|    McCabe_Definitions.Last_Node
  8341.     --|    McCabe_Stack.Space
  8342. ------------------------------------------------------------------------------
  8343. -- Procedure for cleaning up at end of a subprogram
  8344. ------------------------------------------------------------------------------
  8345.  
  8346. procedure Clean_Up_Subprogram;
  8347. --| Procedure to make the final connections for a subprogram's flow graph
  8348.  
  8349.     --| Overview
  8350.     --|
  8351.     --| subprogram_body   ::= 
  8352.     --|         subprogram_specification IS
  8353.     --|         declarative_part__begin_end_block
  8354.     --|         [end_designator] ;
  8355.     --|
  8356.     --| package_body   ::= 
  8357.     --|     |   package_body_indicator
  8358.     --|         declarative_part__begin_end_block
  8359.     --|         [identifier] ;
  8360.     --|
  8361.     --| task_body   ::= 
  8362.     --|         task_body_indicator
  8363.     --|         declarative_part__begin_end_block
  8364.     --|         [identifier] ;
  8365.  
  8366.     --| Modifies
  8367.     --|    McCabe_Definitions.First_Node
  8368.     --|    McCabe_Definitions.Last_Node
  8369.     --|    McCabe_Stack.Space
  8370. ------------------------------------------------------------------------------
  8371. -- Procedures for propagating information up as reductions are done
  8372. ------------------------------------------------------------------------------
  8373.  
  8374. procedure Make_Holding_Node;
  8375. --| procedure to create a node when neede to hold a place which might be
  8376. --| empty
  8377.  
  8378.     --| Overview
  8379.     --|
  8380.     --| [sequence_of_statements]   ::= 
  8381.     --|          {pragma_stm} 
  8382.     --|
  8383.     --| {statement}   ::= 
  8384.     --|         {pragma_stm} 
  8385.  
  8386.     --| Modifies
  8387.     --|    McCabe_Definitions.First_Node
  8388.     --|    McCabe_Definitions.Last_Node
  8389.     --|    McCabe_Stack.Space
  8390.  
  8391.  
  8392. procedure Propagate_Up(
  8393. --| procedure to propagate up a spcefic part of a grammar construct
  8394.     Grammar_Kind: GrammarSymbolRange
  8395.     );
  8396.     
  8397.     --| Overview
  8398.     --|
  8399.     --| accept_statement   ::=   
  8400.     --|     ACCEPT identifier [(expression)][formal_part] DO_token
  8401.     --|            sequence_of_statements END [identifier] ;
  8402.     --|
  8403.     --| begin_end_block   ::=
  8404.     --|         BEGIN sequence_of_statements END
  8405.     --|
  8406.     --| [ELSE__sequence_of_statements]   ::= 
  8407.     --|     |   ELSE__sequence_of_statements
  8408.     --|
  8409.     --|  ELSE__sequence_of_statements   ::=
  8410.     --|         ELSE  sequence_of_statements
  8411.     --|
  8412.     --| [sequence_of_statements]   ::= 
  8413.     --|          {pragma_stm} 
  8414.     --|     |    sequence_of_statements 
  8415.  
  8416.     --| Modifies
  8417.     --|    McCabe_Definitions.First_Node
  8418.     --|    McCabe_Definitions.Last_Node
  8419.     --|    McCabe_Stack.Space
  8420. --------------------------------------------------------------------------
  8421. --| procedures for keeping track of current subprogram
  8422. --------------------------------------------------------------------------
  8423.  
  8424. procedure Init_Subprogram_Element;
  8425.  
  8426. procedure Open_Subprogram;
  8427.     --| Makes Element first item in stack Stk.
  8428.  
  8429.     --| Effects
  8430.     --| This prepends stack Stk with Element.
  8431.     --|
  8432.     --| Modifies
  8433.     --| This adds Element to the beginning of the stack Stk.
  8434.  
  8435. procedure Report_and_Close_Subprogram;
  8436.  
  8437. procedure Close_Subprogram;
  8438.  
  8439. procedure Report_Total_Complexity;
  8440.  
  8441. end Statements_Pkg;
  8442.  
  8443.  
  8444.  
  8445.  
  8446.  
  8447. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8448. --mccapply.sub
  8449. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  8450.  
  8451.  
  8452.  with Statements_Pkg; use Statements_Pkg;
  8453.  with MCC_ParseStack; use MCC_ParseStack;
  8454.  with MCC_ParserDeclarations; use MCC_ParserDeclarations;
  8455.  
  8456.  
  8457.  
  8458.  separate ( MCC_Parser )
  8459.  
  8460.  procedure Apply_Actions ( Rule_Number : in PT.LeftHandSideRange )
  8461.      is
  8462.  begin
  8463.      case Rule_Number is
  8464.  
  8465.  
  8466.   ----------------------------------------------------------------------
  8467.  -- sequence_of_statements ::= {pragma_stm} statement {statement}  
  8468.  
  8469.  
  8470.  when 166 =>
  8471.  
  8472.  
  8473.      Sequence_of_Statements;
  8474.   ----------------------------------------------------------------------
  8475.  -- statement ::= simple_statement  
  8476.  
  8477.  
  8478.  when 167 =>
  8479.  
  8480.  
  8481.      Propagate_Up(Simple_Stmt);
  8482.   ----------------------------------------------------------------------
  8483.  -- statement ::= compound_statement  
  8484.  
  8485.  
  8486.  when 168 =>
  8487.  
  8488.  
  8489.      Propagate_Up(Comp_Stmt);
  8490.   ----------------------------------------------------------------------
  8491.  -- statement ::= {label}+ simple_statement  
  8492.  
  8493.  
  8494.  when 169 =>
  8495.  
  8496.  
  8497.      Label_Plus_Statement_Rule(Simple);
  8498.   ----------------------------------------------------------------------
  8499.  -- statement ::= {label}+ compound_statement  
  8500.  
  8501.  
  8502.  when 170 =>
  8503.  
  8504.  
  8505.      Label_Plus_Statement_Rule(Compound);
  8506.   ----------------------------------------------------------------------
  8507.  -- simple_statement ::= exit_statement  
  8508.  
  8509.  
  8510.  when 173 =>
  8511.  
  8512.  
  8513.      Propagate_Up(Exit_Stmt);
  8514.   ----------------------------------------------------------------------
  8515.  -- simple_statement ::= goto_statement  
  8516.  
  8517.  
  8518.  when 175 =>
  8519.  
  8520.  
  8521.      Propagate_Up(Goto_Stmt);
  8522.   ----------------------------------------------------------------------
  8523.  -- compound_statement ::= if_statement  
  8524.  
  8525.  
  8526.  when 181 =>
  8527.  
  8528.  
  8529.      Propagate_Up(If_Stmt);
  8530.   ----------------------------------------------------------------------
  8531.  -- compound_statement ::= case_statement  
  8532.  
  8533.  
  8534.  when 182 =>
  8535.  
  8536.  
  8537.      Propagate_Up(Case_Stmt);
  8538.   ----------------------------------------------------------------------
  8539.  -- compound_statement ::= loop_statement  
  8540.  
  8541.  
  8542.  when 183 =>
  8543.  
  8544.  
  8545.      Propagate_Up(Loop_Stmt);
  8546.   ----------------------------------------------------------------------
  8547.  -- compound_statement ::= block_statement  
  8548.  
  8549.  
  8550.  when 184 =>
  8551.  
  8552.  
  8553.      Propagate_Up(Block_Stmt);
  8554.   ----------------------------------------------------------------------
  8555.  -- compound_statement ::= accept_statement  
  8556.  
  8557.  
  8558.  when 185 =>
  8559.  
  8560.  
  8561.      Propagate_Up(Accept_Stmt);
  8562.   ----------------------------------------------------------------------
  8563.  -- compound_statement ::= select_statement  
  8564.  
  8565.  
  8566.  when 186 =>
  8567.  
  8568.  
  8569.      Propagate_Up(Select_Stmt);
  8570.   ----------------------------------------------------------------------
  8571.  -- label ::= << identifier >>  
  8572.  
  8573.  
  8574.  when 187 =>
  8575.  
  8576.  
  8577.      Set_Label;
  8578.   ----------------------------------------------------------------------
  8579.  -- if_statement ::= IF condition__THEN sequence_of_statements END IF ;  
  8580.  
  8581.  
  8582.  when 190 =>
  8583.  
  8584.  
  8585.      Conditional_End;
  8586.   ----------------------------------------------------------------------
  8587.  -- case_statement ::= CASE expression IS {pragma_alt}  
  8588.  --     {case_statement_alternative}  
  8589.  
  8590.  
  8591.  when 192 =>
  8592.  
  8593.  
  8594.      Propagate_Up(Case_Stmt_Alt_List);
  8595.   ----------------------------------------------------------------------
  8596.  -- case_statement_alternative ::= WHEN_choice_=> sequence_of_statements  
  8597.  
  8598.  
  8599.  when 193 =>
  8600.  
  8601.  
  8602.      Conditional_Stmt_Alternative;
  8603.   ----------------------------------------------------------------------
  8604.  -- loop_statement ::= [loop_identifier:] LOOP sequence_of_statements END LOOP ; 
  8605.  
  8606.  
  8607.  when 196 =>
  8608.  
  8609.  
  8610.      Loop_Statement(Iteration_Rule_Exists => FALSE);
  8611.   ----------------------------------------------------------------------
  8612.  -- loop_statement ::= [loop_identifier:] iteration_rule LOOP END LOOP ;  
  8613.  
  8614.  
  8615.  when 197 =>
  8616.  
  8617.  
  8618.      Loop_Statement(Iteration_Rule_Exists => TRUE);
  8619.   ----------------------------------------------------------------------
  8620.  -- declarative_part__begin_end_block ::= declarative_part begin_end_block  
  8621.  
  8622.  
  8623.  when 201 =>
  8624.  
  8625.  
  8626.      Propagate_Up(Begin_End);
  8627.   ----------------------------------------------------------------------
  8628.  -- begin_end_block ::= BEGIN sequence_of_statements END  
  8629.  
  8630.  
  8631.  when 202 =>
  8632.  
  8633.  
  8634.      Propagate_Up(Seq_of_Stmt);
  8635.   ----------------------------------------------------------------------
  8636.  -- begin_end_block ::= BEGIN sequence_of_statements EXCEPTION END  
  8637.  
  8638.  
  8639.  when 203 =>
  8640.  
  8641.  
  8642.      Exception_End;
  8643.   ----------------------------------------------------------------------
  8644.  -- block_statement ::= [block_identifier:] DECLARE [identifier] ;  
  8645.  
  8646.  
  8647.  when 204 =>
  8648.  
  8649.  
  8650.      Propagate_Up(Dec_Begin_End);
  8651.   ----------------------------------------------------------------------
  8652.  -- block_statement ::= [block_identifier:] begin_end_block [identifier] ;  
  8653.  
  8654.  
  8655.  when 205 =>
  8656.  
  8657.  
  8658.      Propagate_Up(Begin_End);
  8659.   ----------------------------------------------------------------------
  8660.  -- exit_statement ::= EXIT ;  
  8661.  
  8662.  
  8663.  when 206 =>
  8664.  
  8665.  
  8666.      UnLabeled_Exit(Conditional => FALSE);
  8667.   ----------------------------------------------------------------------
  8668.  -- exit_statement ::= EXIT WHEN condition ;  
  8669.  
  8670.  
  8671.  when 207 =>
  8672.  
  8673.  
  8674.      UnLabeled_Exit(Conditional => TRUE);
  8675.   ----------------------------------------------------------------------
  8676.  -- exit_statement ::= EXIT expanded_name ;  
  8677.  
  8678.  
  8679.  when 208 =>
  8680.  
  8681.  
  8682.      Labeled_Exit(Conditional => FALSE);
  8683.   ----------------------------------------------------------------------
  8684.  -- exit_statement ::= EXIT expanded_name WHEN condition ;  
  8685.  
  8686.  
  8687.  when 209 =>
  8688.  
  8689.  
  8690.      Labeled_Exit(Conditional => TRUE);
  8691.   ----------------------------------------------------------------------
  8692.  -- goto_statement ::= GOTO expanded_name ;  
  8693.  
  8694.  
  8695.  when 212 =>
  8696.  
  8697.  
  8698.      Goto_Statement;
  8699.   ----------------------------------------------------------------------
  8700.  -- subprogram_declaration ::= subprogram_specification ;  
  8701.  
  8702.  
  8703.  when 213 =>
  8704.  
  8705.  
  8706.      Close_Subprogram;
  8707.   ----------------------------------------------------------------------
  8708.  -- subprogram_specification ::= PROCEDURE identifier  
  8709.  
  8710.  
  8711.  when 214 =>
  8712.  
  8713.  
  8714.      Open_Subprogram;
  8715.   ----------------------------------------------------------------------
  8716.  -- subprogram_specification ::= PROCEDURE identifier ( parameter_specification  
  8717.  --     )  
  8718.  
  8719.  
  8720.  when 215 =>
  8721.  
  8722.  
  8723.      Open_Subprogram;
  8724.   ----------------------------------------------------------------------
  8725.  -- subprogram_specification ::= FUNCTION designator RETURN type_mark  
  8726.  
  8727.  
  8728.  when 216 =>
  8729.  
  8730.  
  8731.      Open_Subprogram;
  8732.   ----------------------------------------------------------------------
  8733.  -- subprogram_specification ::= FUNCTION designator ( parameter_specification ) 
  8734.  
  8735.  
  8736.  when 217 =>
  8737.  
  8738.  
  8739.      Open_Subprogram;
  8740.   ----------------------------------------------------------------------
  8741.  -- subprogram_body ::= subprogram_specification IS [end_designator] ;  
  8742.  
  8743.  
  8744.  when 226 =>
  8745.  
  8746.  
  8747.      Clean_Up_Subprogram;
  8748.      Report_and_Close_Subprogram;
  8749.   ----------------------------------------------------------------------
  8750.  -- package_declaration ::= package_specification ;  
  8751.  
  8752.  
  8753.  when 228 =>
  8754.  
  8755.  
  8756.      Close_Subprogram;
  8757.   ----------------------------------------------------------------------
  8758.  -- package_spec_indicator ::= PACKAGE identifier IS  
  8759.  
  8760.  
  8761.  when 231 =>
  8762.  
  8763.  
  8764.      Open_Subprogram;
  8765.   ----------------------------------------------------------------------
  8766.  -- package_body ::= package_body_indicator declarative_part END [identifier] ;  
  8767.  
  8768.  
  8769.  when 232 =>
  8770.  
  8771.  
  8772.      Close_Subprogram;
  8773.   ----------------------------------------------------------------------
  8774.  -- package_body ::= package_body_indicator declarative_part__begin_end_block ;  
  8775.  
  8776.  
  8777.  when 233 =>
  8778.  
  8779.  
  8780.      Clean_Up_Subprogram;
  8781.      Report_and_Close_Subprogram;
  8782.   ----------------------------------------------------------------------
  8783.  -- package_body_indicator ::= PACKAGE BODY identifier IS  
  8784.  
  8785.  
  8786.  when 234 =>
  8787.  
  8788.  
  8789.      Open_Subprogram;
  8790.   ----------------------------------------------------------------------
  8791.  -- renaming_declaration ::= subprogram_specification RENAMES name ;  
  8792.  
  8793.  
  8794.  when 243 =>
  8795.  
  8796.  
  8797.      Close_Subprogram;
  8798.   ----------------------------------------------------------------------
  8799.  -- task_body ::= task_body_indicator declarative_part__begin_end_block ;  
  8800.  
  8801.  
  8802.  when 249 =>
  8803.  
  8804.  
  8805.      Clean_Up_Subprogram;
  8806.      Report_and_Close_Subprogram;
  8807.   ----------------------------------------------------------------------
  8808.  -- task_body_indicator ::= TASK BODY identifier IS  
  8809.  
  8810.  
  8811.  when 250 =>
  8812.  
  8813.  
  8814.      Open_Subprogram;
  8815.   ----------------------------------------------------------------------
  8816.  -- accept_statement ::= ACCEPT identifier [(expression)][formal_part] ;  
  8817.  
  8818.  
  8819.  when 252 =>
  8820.  
  8821.  
  8822.      Make_Holding_Node;
  8823.   ----------------------------------------------------------------------
  8824.  -- accept_statement ::= ACCEPT identifier [(expression)][formal_part] DO END ;  
  8825.  
  8826.  
  8827.  when 253 =>
  8828.  
  8829.  
  8830.      Propagate_Up(Seq_of_Stmt);
  8831.   ----------------------------------------------------------------------
  8832.  -- select_statement ::= selective_wait  
  8833.  
  8834.  
  8835.  when 255 =>
  8836.  
  8837.  
  8838.      Propagate_Up(Select_Wait);
  8839.   ----------------------------------------------------------------------
  8840.  -- select_statement ::= conditional_entry_call  
  8841.  
  8842.  
  8843.  when 256 =>
  8844.  
  8845.  
  8846.      Propagate_Up(Cond_Entry);
  8847.   ----------------------------------------------------------------------
  8848.  -- select_statement ::= timed_entry_call  
  8849.  
  8850.  
  8851.  when 257 =>
  8852.  
  8853.  
  8854.      Propagate_Up(Timed_Entry);
  8855.   ----------------------------------------------------------------------
  8856.  -- selective_wait ::= SELECT select_alternative {OR__select_alternative} END ;  
  8857.  
  8858.  
  8859.  when 258 =>
  8860.  
  8861.  
  8862.      Conditional_End(Or_Select_Alt, Select_Alt);
  8863.   ----------------------------------------------------------------------
  8864.  -- select_alternative ::= {pragma_stm} WHEN condition =>  
  8865.  
  8866.  
  8867.  when 259 =>
  8868.  
  8869.  
  8870.      Propagate_Up(Select_Wait_Alt);
  8871.   ----------------------------------------------------------------------
  8872.  -- select_alternative ::= {pragma_stm} selective_wait_alternative  
  8873.  
  8874.  
  8875.  when 260 =>
  8876.  
  8877.  
  8878.      Propagate_Up(Select_Wait_Alt);
  8879.   ----------------------------------------------------------------------
  8880.  -- selective_wait_alternative ::= accept_alternative  
  8881.  
  8882.  
  8883.  when 261 =>
  8884.  
  8885.  
  8886.      Propagate_Up(Accept_Alt);
  8887.   ----------------------------------------------------------------------
  8888.  -- selective_wait_alternative ::= delay_alternative  
  8889.  
  8890.  
  8891.  when 262 =>
  8892.  
  8893.  
  8894.      Propagate_Up(Delay_Alt);
  8895.   ----------------------------------------------------------------------
  8896.  -- selective_wait_alternative ::= terminate_alternative  
  8897.  
  8898.  
  8899.  when 263 =>
  8900.  
  8901.  
  8902.      Propagate_Up(Terminate_Alt);
  8903.   ----------------------------------------------------------------------
  8904.  -- accept_alternative ::= accept_statement [sequence_of_statements]  
  8905.  
  8906.  
  8907.  when 264 =>
  8908.  
  8909.  
  8910.      Accept_Alternative;
  8911.   ----------------------------------------------------------------------
  8912.  -- delay_alternative ::= delay_statement [sequence_of_statements]  
  8913.  
  8914.  
  8915.  when 265 =>
  8916.  
  8917.  
  8918.      Propagate_Up(Bracket_Sequence);
  8919.   ----------------------------------------------------------------------
  8920.  -- terminate_alternative ::= TERMINATE ; {pragma_stm}  
  8921.  
  8922.  
  8923.  when 266 =>
  8924.  
  8925.  
  8926.      Make_Holding_Node;
  8927.   ----------------------------------------------------------------------
  8928.  -- conditional_entry_call ::= SELECT {pragma_stm} call_statement ELSE END  
  8929.  --     SELECT  
  8930.  
  8931.  
  8932.  when 267 =>
  8933.  
  8934.  
  8935.      Entry_Call(Seq_of_Stmt);
  8936.   ----------------------------------------------------------------------
  8937.  -- timed_entry_call ::= SELECT {pragma_stm} call_statement OR {pragma_stm} END  
  8938.  
  8939.  
  8940.  when 268 =>
  8941.  
  8942.  
  8943.      Entry_Call(Delay_Alt);
  8944.   ----------------------------------------------------------------------
  8945.  -- body_stub ::= subprogram_specification IS SEPARATE ;  
  8946.  
  8947.  
  8948.  when 284 =>
  8949.  
  8950.  
  8951.      Close_Subprogram;
  8952.   ----------------------------------------------------------------------
  8953.  -- body_stub ::= PACKAGE BODY identifier IS SEPARATE ;  
  8954.  
  8955.  
  8956.  when 285 =>
  8957.  
  8958.  
  8959.      Close_Subprogram;
  8960.   ----------------------------------------------------------------------
  8961.  -- body_stub ::= TASK BODY identifier IS SEPARATE ;  
  8962.  
  8963.  
  8964.  when 286 =>
  8965.  
  8966.  
  8967.      Close_Subprogram;
  8968.   ----------------------------------------------------------------------
  8969.  -- exception_handler ::= WHEN_exception_choice_=> sequence_of_statements  
  8970.  
  8971.  
  8972.  when 289 =>
  8973.  
  8974.  
  8975.      Conditional_Stmt_Alternative;
  8976.   ----------------------------------------------------------------------
  8977.  -- generic_specification ::= generic_formal_part subprogram_specification  
  8978.  
  8979.  
  8980.  when 296 =>
  8981.  
  8982.  
  8983.      Close_Subprogram;
  8984.   ----------------------------------------------------------------------
  8985.  -- generic_specification ::= generic_formal_part package_specification  
  8986.  
  8987.  
  8988.  when 297 =>
  8989.  
  8990.  
  8991.      Close_Subprogram;
  8992.   ----------------------------------------------------------------------
  8993.  -- generic_parameter_declaration ::= WITH subprogram_specification ;  
  8994.  
  8995.  
  8996.  when 302 =>
  8997.  
  8998.  
  8999.      Close_Subprogram;
  9000.   ----------------------------------------------------------------------
  9001.  -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ;  
  9002.  
  9003.  
  9004.  when 315 =>
  9005.  
  9006.  
  9007.      Close_Subprogram;
  9008.   ----------------------------------------------------------------------
  9009.  -- generic_instantiation ::= subprogram_specification IS NEW expanded_name ( )  
  9010.  --     ;  
  9011.  
  9012.  
  9013.  when 316 =>
  9014.  
  9015.  
  9016.      Close_Subprogram;
  9017.   ----------------------------------------------------------------------
  9018.  -- expanded_name ::= identifier  
  9019.  
  9020.  
  9021.  when 346 =>
  9022.  
  9023.  
  9024.      Id_Element := Get_Stack_Element(1);
  9025.      New_Stack_Element.lexed_token.text :=
  9026.          Id_Element.lexed_token.text;
  9027.   ----------------------------------------------------------------------
  9028.  -- expanded_name ::= expanded_name . identifier  
  9029.  
  9030.  
  9031.  when 347 =>
  9032.  
  9033.  
  9034.  
  9035.      Id_Element := Get_Stack_Element(1);
  9036.      Expand_Element := Get_Stack_Element(3);
  9037.  
  9038.       Put_Source_Text(
  9039.           (Get_Source_Text(Expand_Element.lexed_token.text) &
  9040.           "." &
  9041.           Get_Source_Text(Id_Element.lexed_token.text)),
  9042.           New_Stack_Element.lexed_token.text);
  9043.  
  9044.   ----------------------------------------------------------------------
  9045.  -- {statement} ::= {statement} statement {pragma_stm}  
  9046.  
  9047.  
  9048.  when 408 =>
  9049.  
  9050.  
  9051.      Statement_List;
  9052.   ----------------------------------------------------------------------
  9053.  -- {label}+ ::= label  
  9054.  
  9055.  
  9056.  when 409 =>
  9057.  
  9058.  
  9059.      Label_Plus_Rule;
  9060.   ----------------------------------------------------------------------
  9061.  -- {label}+ ::= {label}+ label  
  9062.  
  9063.  
  9064.  when 410 =>
  9065.  
  9066.  
  9067.      Label_Plus_Rule;
  9068.   ----------------------------------------------------------------------
  9069.  -- {ELSIF__condition__THEN__sequence_of_statements} ::= ELSIF__condition__THEN  
  9070.  
  9071.  
  9072.  when 412 =>
  9073.  
  9074.  
  9075.      Elsif_or_OR_Statement(Elsif_Part, Seq_of_Stmt);
  9076.   ----------------------------------------------------------------------
  9077.  -- [ELSE__sequence_of_statements] ::= empty  
  9078.  
  9079.  
  9080.  when 413 =>
  9081.  
  9082.  
  9083.      Make_Holding_Node;
  9084.   ----------------------------------------------------------------------
  9085.  -- [ELSE__sequence_of_statements] ::= ELSE__sequence_of_statements  
  9086.  
  9087.  
  9088.  when 414 =>
  9089.  
  9090.  
  9091.      Propagate_Up(Else_Seq_of_Stmt);
  9092.   ----------------------------------------------------------------------
  9093.  -- ELSE__sequence_of_statements ::= ELSE sequence_of_statements  
  9094.  
  9095.  
  9096.  when 415 =>
  9097.  
  9098.  
  9099.      Propagate_Up(Seq_of_Stmt);
  9100.   ----------------------------------------------------------------------
  9101.  -- {case_statement_alternative} ::= case_statement_alternative  
  9102.  
  9103.  
  9104.  when 418 =>
  9105.  
  9106.  
  9107.      Propagate_Up(Case_Stmt_Alt);
  9108.   ----------------------------------------------------------------------
  9109.  -- {case_statement_alternative} ::= {case_statement_alternative}  
  9110.  
  9111.  
  9112.  when 419 =>
  9113.  
  9114.  
  9115.      Conditional_Stmt_Alternative_List(Case_Stmt_Alt, Case_Stmt_Alt_List);
  9116.   ----------------------------------------------------------------------
  9117.  -- [loop_identifier:] ::= identifier :  
  9118.  
  9119.  
  9120.  when 421 =>
  9121.  
  9122.  
  9123.      Id_Element := Get_Stack_Element(2);
  9124.      New_Stack_Element.lexed_token.text :=
  9125.          Id_Element.lexed_token.text;
  9126.   ----------------------------------------------------------------------
  9127.  -- {pragma_alt}__exception_handler_list ::= {pragma_alt} exception_handler_list 
  9128.  
  9129.  
  9130.  when 426 =>
  9131.  
  9132.  
  9133.      Propagate_Up(Except_Hand_List);
  9134.   ----------------------------------------------------------------------
  9135.  -- exception_handler_list ::= exception_handler  
  9136.  
  9137.  
  9138.  when 427 =>
  9139.  
  9140.  
  9141.      Propagate_Up(Except_Handler);
  9142.  -- Conditional_Stmt_Alternative_List(Except_Handler, Except_Hand_List);
  9143.   ----------------------------------------------------------------------
  9144.  -- exception_handler_list ::= exception_handler_list exception_handler  
  9145.  
  9146.  
  9147.  when 428 =>
  9148.  
  9149.  
  9150.      Conditional_Stmt_Alternative_List(Except_Handler, Except_Hand_List);
  9151.   ----------------------------------------------------------------------
  9152.  -- {OR__select_alternative} ::= {OR__select_alternative} OR select_alternative  
  9153.  
  9154.  
  9155.  when 449 =>
  9156.  
  9157.  
  9158.      Elsif_or_OR_Statement(OR_Select_Alt, Select_Alt);
  9159.   ----------------------------------------------------------------------
  9160.  -- [sequence_of_statements] ::= {pragma_stm}  
  9161.  
  9162.  
  9163.  when 450 =>
  9164.  
  9165.  
  9166.      Make_Holding_Node;
  9167.   ----------------------------------------------------------------------
  9168.  -- [sequence_of_statements] ::= sequence_of_statements  
  9169.  
  9170.  
  9171.  when 451 =>
  9172.  
  9173.  
  9174.      Propagate_Up(Seq_of_Stmt);
  9175.  
  9176.      when others =>
  9177.          null;
  9178.      end case;
  9179.  
  9180.  end Apply_Actions;
  9181.  
  9182.  
  9183.  
  9184. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9185. --statement.bdy
  9186. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9187. with case_insensitive_string_comparison;
  9188.  
  9189. with McCabe_Stack;
  9190. with Paginated_Output;
  9191. with mcc_ParseStack;
  9192. with mcc_StateStack;
  9193. with Text_IO;
  9194.  
  9195. package body Statements_Pkg is
  9196.  
  9197. --    package PD renames ParserDeclarations;
  9198. --    package LT renames Label_Tree_Pkg;
  9199. --    package FG renames Flow_Graph_Package;
  9200. --    package LP renames McCabe_List_Package;
  9201. --    package MD renames McCabe_Definitions;
  9202.  
  9203.       package CISC renames case_insensitive_string_comparison;
  9204.       package PO renames Paginated_Output;
  9205.       package Int_IO is new Text_IO.Integer_IO(INTEGER);
  9206.  
  9207. --------------------------------------------------------------------------
  9208. --  Local State Variables
  9209. --------------------------------------------------------------------------
  9210.  
  9211. Total_Nodes: integer := 0;
  9212. Total_Edges: integer := 0;
  9213. Total_Units: integer := 0;
  9214.  
  9215. --------------------------------------------------------------------------
  9216. --  Specifications of local subprograms
  9217. --------------------------------------------------------------------------
  9218.  
  9219. procedure Backup_Thru_Stack(
  9220.     Stack_Element: in out PD.ParseStackElement;
  9221.     Token: in GrammarSymbolRange
  9222.     );
  9223.  
  9224. procedure Backup_Thru_Stack(
  9225.     Stack_Element: in out MD.McCabe_Stack_Element;
  9226.     Token: in GrammarSymbolRange);
  9227.  
  9228. procedure Backup_Thru_Stack(
  9229.     Stack_Element: in out MD.McCabe_Stack_Element;
  9230.     Token: in GrammarSymbolRange;
  9231.     Position: out StateParseStacksIndex
  9232.     );
  9233.  
  9234. procedure Backup_Thru_Stack_Twice(
  9235.     Stack_Element: in out MD.McCabe_Stack_Element;
  9236.     Token: in GrammarSymbolRange
  9237.     );
  9238.  
  9239. function Get_Id(Stack_Element : PD.ParseStackElement) return PD.Source_Text;
  9240.  
  9241.  
  9242. procedure Exit_Statement(
  9243.     Stack_Element: in out MD.McCabe_Stack_Element;
  9244.     Conditional: in boolean;
  9245.     Position: in PD.StateParseStacksIndex
  9246.     );
  9247.  
  9248.  
  9249. procedure Conditional_Statement(
  9250.     Seq_Element: MD.McCabe_Stack_Element;
  9251.     Conditional_Node: in out MD.Node_Type;
  9252.     End_Node: in out MD.Node_Type
  9253.     );
  9254.  
  9255. procedure Conditional_Statement_List(
  9256.     List_Element : MD.McCabe_Stack_Element;
  9257.     Conditional_Node   : MD.Node_Type
  9258.     );
  9259.  
  9260. procedure Put_Fully_Qualified_Name;
  9261.  
  9262. procedure Report_Complexities;
  9263.  
  9264. --------------------------------------------------------------------------
  9265. --  The following function is used in the instantiation of Label_Tree
  9266. --  to allow for ordering of the label tree.
  9267. --------------------------------------------------------------------------
  9268.  
  9269. function Label_Compare(
  9270. --| used by trees_pkg for determining order of nodes.
  9271.     x,y : SP.String_Type
  9272.     ) return integer is
  9273.  
  9274. --| Algorithm
  9275. --|+
  9276. --| returns true if the string value of x is less than
  9277. --| the string value of y, else returns false. 
  9278. --|-
  9279.  
  9280. begin
  9281.  
  9282.     return CISC.Compare(SP.Value(x), SP.Value(y));
  9283.  
  9284. end Label_Compare;
  9285.  
  9286. --------------------------------------------------------------------------
  9287. --  The following groups of subprograms are used in the actions file. 
  9288. --------------------------------------------------------------------------
  9289.  
  9290. ----------------------------------------------------------------------------
  9291. -- Procedures for tying together a sequence of statements
  9292. ----------------------------------------------------------------------------
  9293.  
  9294. procedure Sequence_of_Statements is
  9295.  
  9296.     --| Overview
  9297.     --| sequence_of_statements   ::= 
  9298.     --|          {pragma_stm} statement {statement} 
  9299.  
  9300. --| Algorithm
  9301. --|+
  9302. --|     Backup through the parse stack to the beginning of the sequence.
  9303. --| Loop through the statements.  If the first and last nodes of a statement
  9304. --| are null then it can be added to the current node.  If not, an edge is
  9305. --| made from the previous node to the first node of the current statement
  9306. --| and from the last node to a new node.
  9307. --|-
  9308.  
  9309.     Statement_Element   : MD.McCabe_Stack_Element;
  9310.     Stmt_List_Element   : MD.McCabe_Stack_Element;
  9311.    
  9312. begin
  9313.     Backup_Thru_Stack(Statement_Element, Statement_Token);
  9314.     Backup_Thru_Stack(Stmt_List_Element, Stmt_List_Token);
  9315.  
  9316.     if (Statement_Element.first = NULL) and (Stmt_List_Element.first = NULL)
  9317.     then
  9318.     MD.First_Node := FG.Make_Node;
  9319.     MD.Last_Node  := MD.First_Node;
  9320.     elsif Statement_Element.first /= NULL then
  9321.     MD.First_Node := Statement_Element.first;
  9322.     if Stmt_List_Element.first /= NULL then
  9323.         MD.Last_Node := Stmt_List_Element.last;
  9324.         FG.Make_Edge(Statement_Element.last, Stmt_List_Element.first);
  9325.     else
  9326.         MD.Last_Node := Statement_Element.last;
  9327.     end if;
  9328.     else
  9329.     MD.First_Node := Stmt_List_Element.first;
  9330.     MD.Last_Node  := Stmt_List_Element.last;
  9331.     end if;
  9332.   
  9333.     end Sequence_of_Statements;
  9334.  
  9335.  
  9336. procedure Statement_List is
  9337.  
  9338. --| Overview
  9339. --|
  9340. --| {statement}   ::= 
  9341. --|     |   {statement} statement {pragma_stm}
  9342.  
  9343.     Statement_Element : MD.McCabe_Stack_Element;
  9344.     Stmt_List_Element : MD.McCabe_Stack_Element;
  9345.  
  9346. begin 
  9347.     
  9348.     Backup_Thru_Stack(Statement_Element, Statement_Token);
  9349.     Backup_Thru_Stack(Stmt_List_Element, Stmt_List_Token);
  9350.  
  9351.     if (Stmt_List_Element.first = NULL) and (Statement_Element.first = NULL)
  9352.     then
  9353.     MD.First_Node := FG.Make_Node;
  9354.     MD.Last_Node  := MD.First_Node;
  9355.  
  9356.     elsif Stmt_List_Element.first /= NULL then
  9357.  
  9358.     MD.First_Node := Stmt_List_Element.first;
  9359.  
  9360.     if Statement_Element.first /= NULL then
  9361.         FG.Make_Edge(Stmt_List_Element.last, Statement_Element.first);
  9362.         MD.Last_Node  := Statement_Element.last;
  9363.     else
  9364.         MD.Last_Node := Stmt_List_Element.last;
  9365.     end if;
  9366.  
  9367.     else
  9368.    
  9369.     MD.First_Node := Statement_Element.first;
  9370.     MD.Last_Node  := Statement_Element.last;
  9371.  
  9372.     end if;
  9373.  
  9374. end Statement_List;
  9375.  
  9376. -----------------------------------------------------------------------------
  9377. -- Procedures to handle loops and exits
  9378. -----------------------------------------------------------------------------
  9379.  
  9380. procedure Loop_Statement(
  9381.     Iteration_Rule_Exists : Boolean
  9382.     ) is
  9383.  
  9384. --| Overview
  9385. --|
  9386. --| loop_statement   ::=
  9387. --|         [loop_identifier:] iteration_rule
  9388. --|             sequence_of_statements END LOOP [identifier] ;
  9389.  
  9390.  
  9391. --| Algorithm
  9392. --|+
  9393. --|     If the loop token element in the parse stack has no first and end
  9394. --| nodes associated with it (no exit statements were found) then make
  9395. --| these two nodes.  Otherwise propagate the values up.
  9396. --|     If this loop has an iteration rule associated with it then make
  9397. --| an edge to the top of the loop from the end.  
  9398. --|     Then enclose the sequence of statements between the top and the
  9399. --| end.
  9400. --|-
  9401.  
  9402.     Loop_Stmt_Token      : MD.McCabe_Stack_Element;
  9403.     Seq_Token            : MD.McCabe_Stack_Element;
  9404.     Iteration_Rule_Token : MD.McCabe_Stack_Element;
  9405.  
  9406. begin
  9407.     Backup_Thru_Stack_Twice(Loop_Stmt_Token, Loop_Token);
  9408.     Backup_Thru_Stack(Seq_Token, Seq_of_Stmt);
  9409.  
  9410.     if Loop_Stmt_Token.first = NULL then
  9411.     MD.First_Node := FG.Make_Node;
  9412.     MD.Last_Node  := FG.Make_Node;
  9413.        FG.Make_Edge(MD.First_Node, MD.Last_Node);
  9414.     else
  9415.     MD.First_Node := Loop_Stmt_Token.first;
  9416.     MD.Last_Node  := Loop_Stmt_Token.last;
  9417.     if  Iteration_Rule_Exists then
  9418.         FG.Make_Edge(MD.First_Node, MD.Last_Node);
  9419.     end if;
  9420.     end if;
  9421.  
  9422.     FG.Make_Edge(MD.First_Node, Seq_Token.first);
  9423.     FG.Make_Edge(Seq_Token.last, MD.First_Node);
  9424.  
  9425. end Loop_Statement;
  9426.  
  9427.  
  9428. procedure Labeled_Exit(
  9429.     Conditional: boolean
  9430.     ) is
  9431. --| Overview
  9432. --| exit_statement   ::= 
  9433. --|     |   EXIT expanded_name ;
  9434. --|     |   EXIT expanded_name WHEN condition ;
  9435.  
  9436. --| Algorithm
  9437. --|+
  9438. --|    Backup through the parse stack until the enclosing loop with
  9439. --| the corresponding label is found.  Call Exit_Statement. 
  9440. --|-
  9441.  
  9442.     Stack_Element : PD.ParseStackElement;
  9443.     McCabe_Element : MD.McCabe_Stack_Element;
  9444.     Label_Id  : PD.Source_Text;
  9445.     Exists    : Boolean := False;
  9446.     Complaint : Exception;
  9447.     Position  : PD.StateParseStacksIndex;
  9448.  
  9449. begin
  9450.  
  9451.     Backup_Thru_Stack(Stack_Element, Expanded_Name);
  9452.     Label_Id := Get_Id(Stack_Element);
  9453.  
  9454.     for i in 1..mcc_ParseStack.Length loop
  9455.  
  9456.     Stack_Element  := mcc_ParseStack.Get_Stack_Element(i);
  9457.  
  9458.     if Stack_Element.gram_sym_val = Loop_Token then
  9459.         McCabe_Element := McCabe_Stack.Get_Stack_Element(i);
  9460.         Position := i;
  9461.  
  9462.     elsif Stack_Element.gram_sym_val = Loop_Id_Token then
  9463.                  
  9464.         if PD.GEt_Source_Text(Get_Id(Stack_Element))
  9465.                 = PD.Get_Source_Text(Label_Id)
  9466.         then
  9467.             Exists := TRUE;
  9468.             EXIT;
  9469.         end if;
  9470.  
  9471.     end if;
  9472.  
  9473.     end loop;
  9474.  
  9475.     if Exists then
  9476.     Exit_Statement( McCabe_Element, Conditional, Position);
  9477.     else 
  9478.     Paginated_Output.PUT("Loop identifier not found");
  9479.     end if;
  9480.  
  9481.     end Labeled_Exit;
  9482.  
  9483. procedure UnLabeled_Exit(
  9484.     Conditional: boolean
  9485.     ) is
  9486.  
  9487. --| Overview
  9488. --| exit_statement   ::= 
  9489. --|         EXIT ;
  9490. --|     |   EXIT WHEN condition ;
  9491.  
  9492. --| Algorithm
  9493. --|+
  9494. --|    Back up through the parse stack until the enclosing loop token
  9495. --| is found.  Call Exit_Statement.
  9496. --|-
  9497.  
  9498.     Stack_Element : MD.McCabe_Stack_Element;
  9499.     Position      : PD.StateParseStacksIndex;
  9500.  
  9501. begin
  9502.  
  9503.     Backup_thru_Stack(Stack_Element, Loop_Token, Position);
  9504.     Exit_Statement( Stack_Element, Conditional, Position) ;
  9505.  
  9506. end UnLabeled_Exit;
  9507.  
  9508.  
  9509. ---------------------------------------------------------------------------
  9510. --    Procedures to handle Labeled statements and Goto's
  9511. ---------------------------------------------------------------------------
  9512.  
  9513. procedure Goto_Statement is
  9514.  
  9515. --| Overview
  9516. --| goto_statement   ::= 
  9517. --|         GOTO expanded_name ;
  9518.  
  9519. --| Algorithm
  9520. --|+
  9521. --|     Make a node for the goto statement.  Check the label tree for
  9522. --| the Label_Id (expanded_name).  If is not present, make a node,and 
  9523. --| add a listing to the label tree.  Make an edge to the label node,
  9524. --| and set the last node in the goto statement to be null.  This is
  9525. --| done so that when the enclosing sequence of statements is reduced,
  9526. --| no edge will be made to the following statement.
  9527. --|-
  9528.  
  9529.     Stack_Element: PD.ParseStackElement;
  9530.     Label_Node: MD.Node_Type;
  9531.     Goto_Node: MD.Node_Type;
  9532.     Label_Id: SP.String_Type;
  9533.  
  9534. begin
  9535.  
  9536.     Goto_Node := FG.Make_Node;
  9537.     MD.First_Node := Goto_Node;
  9538.     MD.Last_Node  := Goto_Node;
  9539.  
  9540.     Backup_Thru_Stack(Stack_Element, Expanded_Name); 
  9541.     Label_Id := SP.Upper(PD.Get_Source_Text(Get_Id(Stack_Element)));
  9542.     
  9543.     if LT.is_Found(Label_Id, Curr_Label_Tree) then
  9544.     Label_Node := LT.Find(Label_Id, Curr_Label_Tree);
  9545.     else
  9546.     Label_Node := FG.Make_Node;
  9547.     LT.Insert(Label_Id, Label_Node, Curr_Label_Tree);
  9548.     end if;
  9549.  
  9550.     FG.Make_Edge(Goto_Node, Label_Node);
  9551.     MD.Last_Node := NULL;
  9552.  
  9553. end Goto_Statement;
  9554.  
  9555.  
  9556.  
  9557. procedure Set_Label is
  9558.  
  9559. --| Overview
  9560. --| label   ::= 
  9561. --|         << identifier >>
  9562.  
  9563. --| Algorithm
  9564. --|+
  9565. --|     Look for the label identifier in the label tree.  If it is present
  9566. --| then set the ParseStackElement first and last values to the listed
  9567. --| node.  If not, make a new node and add it and the label id to the 
  9568. --| label tree.
  9569. --|-
  9570.  
  9571.     Stack_Element: PD.ParseStackElement;
  9572.     Label_Id: SP.String_Type;
  9573.     N: Node_Type;
  9574.  
  9575. begin
  9576.  
  9577.  
  9578.     Backup_Thru_Stack(Stack_Element, Identifier_Token);
  9579.     Label_Id := SP.Upper(PD.Get_Source_Text(Get_Id(Stack_Element)));
  9580.  
  9581.     if LT.is_Found(Label_Id, Curr_Label_Tree) then
  9582.     MD.First_Node := LT.Find(Label_Id, Curr_Label_Tree);
  9583.     MD.Last_Node  := MD.First_Node;
  9584.     else
  9585.     N := FG.Make_Node;
  9586.     LT.Insert(Label_Id, N, Curr_Label_Tree);
  9587.     MD.First_Node := N;
  9588.     MD.Last_Node  := N;
  9589.     end if;
  9590.  
  9591. end Set_Label;
  9592.  
  9593.  
  9594. procedure Label_Plus_Rule is
  9595. --| This makes sure that a list of labels is connected into the flow graph.
  9596.  
  9597. --| Overview
  9598. --|  {label}+   ::=
  9599. --|         label
  9600. --|     |   {label}+ label
  9601.  
  9602. --| Algorithm
  9603. --|+
  9604. --|     Make an edge from the last node of the label list to the label.
  9605. --| Then set the first and last nodes of the new Stack_Element to include
  9606. --| the newly added label.
  9607. --|-
  9608.        Label_Plus_Element : MD.McCabe_Stack_Element;
  9609.        Label_Element      : MD.McCabe_Stack_Element;
  9610.  
  9611. begin
  9612.  
  9613.     Backup_Thru_Stack(Label_Plus_Element, Label_Plus_Token);
  9614.     Backup_Thru_Stack(Label_Element, Label_Token);  
  9615.  
  9616.     if Label_Plus_Element.first /= NULL then
  9617.  
  9618.     FG.Make_Edge(Label_Plus_Element.last, Label_Element.first);
  9619.     MD.First_Node := Label_Plus_Element.first;
  9620.     MD.Last_Node  := Label_Element.last;
  9621.  
  9622.     else 
  9623.  
  9624.     MD.First_Node := Label_Element.first;
  9625.     MD.Last_Node  := Label_Element.last;
  9626.  
  9627.     end if;
  9628.  
  9629. end Label_Plus_Rule;
  9630.  
  9631.  
  9632. procedure Label_Plus_Statement_Rule(This_Statement : Statement_Type) is
  9633.  
  9634. --| Overview
  9635. --| statement   ::= 
  9636. --|     |   {label}+ simple_statement
  9637. --|     |   {label}+ compound_statement
  9638.  
  9639. --| Algorithm
  9640. --|+
  9641. --|     Add an edge from the list of labels to the top of the statement.
  9642. --| If it is a simple statement, then a new node must be made.
  9643. --|-
  9644.  
  9645.     N : Node_Type;
  9646.     Statement_Element  : MD.McCabe_Stack_Element;
  9647.     Label_Plus_Element : MD.McCabe_Stack_Element;
  9648.  
  9649.     begin
  9650.  
  9651.     if This_Statement = Compound then        
  9652.     Backup_Thru_Stack(Statement_Element, Comp_Stmt); 
  9653.     else
  9654.     Backup_Thru_Stack(Statement_Element, Simple_Stmt); 
  9655.     end if;
  9656.  
  9657.     Backup_Thru_Stack(Label_Plus_Element, Label_Plus_Token);
  9658.  
  9659.     if Statement_Element.first = NULL then
  9660.     N := FG.Make_Node;
  9661.     Statement_Element.first := N;
  9662.     Statement_Element.last  := N;
  9663.     end if;
  9664.  
  9665.     FG.Make_Edge(Label_Plus_Element.last,Statement_Element.first);
  9666.  
  9667.     MD.First_Node := Statement_Element.first;
  9668.     MD.Last_Node  := Statement_Element.last;
  9669.  
  9670. end Label_Plus_Statement_Rule;
  9671.  
  9672. ---------------------------------------------------------------------------
  9673. --     procedures for conditional statements
  9674. --        such as IF, SELECT, CASE, and Exception Handlers
  9675. ---------------------------------------------------------------------------
  9676.  
  9677. procedure Entry_Call(Else_Part_Kind : GrammarSymbolRange) is
  9678.  
  9679. --| Overview
  9680. --| conditional_entry_call   ::= 
  9681. --|     SELECT_token {pragma_stm} call_statement [sequence_of_statements]
  9682. --|            ELSE__sequence_of_statements END SELECT ;
  9683. --|
  9684. --| timed_entry_call   ::= 
  9685. --|     SELECT {pragma_stm} call_statement [sequence_of_statements]
  9686. --|            OR {pragma_stm} delay_alternative END SELECT ;
  9687.  
  9688.     Entry_Element : MD.McCabe_Stack_Element;
  9689.     Seq_Element   : MD.McCabe_Stack_Element;
  9690.  
  9691. begin
  9692.     
  9693.     Backup_Thru_Stack(Entry_Element, Else_Part_Kind);
  9694.     Backup_Thru_Stack(Seq_Element, Bracket_Sequence);
  9695.  
  9696.     MD.First_Node := FG.Make_Node;
  9697.     MD.Last_Node  := FG.Make_Node;
  9698.  
  9699.     FG.Make_Edge(MD.First_Node, Seq_Element.first);
  9700.     FG.Make_Edge(Seq_Element.last, MD.Last_Node);
  9701.  
  9702.     FG.Make_Edge(MD.First_Node, Entry_Element.first);
  9703.     FG.Make_Edge(Entry_Element.last, MD.Last_Node);
  9704.  
  9705. end Entry_Call;
  9706.  
  9707.  
  9708. procedure Accept_Alternative is
  9709.  
  9710. --| Overview
  9711. --| accept_alternative   ::= 
  9712. --|         accept_statement [sequence_of_statements]
  9713.  
  9714.     Accept_Element : MD.McCabe_Stack_Element;
  9715.     Seq_Element    : MD.McCabe_Stack_Element;
  9716.  
  9717. begin
  9718.     Backup_Thru_Stack(Accept_Element, Accept_Stmt);
  9719.     Backup_Thru_Stack(Seq_Element, Bracket_Sequence);
  9720.  
  9721.     MD.First_Node := Accept_Element.first;
  9722.     MD.Last_Node  := Seq_Element.last;
  9723.  
  9724.     FG.Make_Edge(Accept_Element.last, Seq_Element.first);
  9725.  
  9726. end Accept_Alternative;
  9727.  
  9728.  
  9729.  
  9730. procedure Elsif_or_OR_Statement(
  9731.     List_Part: GrammarSymbolRange;
  9732.     Seq_Part: GrammarSymbolRange
  9733.     ) is
  9734.  
  9735. --| Overview
  9736. --| {ELSIF__condition__THEN__sequence_of_statements}   ::= 
  9737. --|          empty 
  9738. --|
  9739. --|     |   {ELSIF__condition__THEN__sequence_of_statements} 
  9740. --|            ELSIF__condition__THEN sequence_of_statements
  9741. --|
  9742. --| {OR__select_alternative}   ::= 
  9743. --|          empty 
  9744. --|     |   {OR__select_alternative} OR select_alternative
  9745.  
  9746.     Seq_Element  : MD.McCabe_Stack_Element;
  9747.     List_Element : MD.McCabe_Stack_Element;
  9748.     End_Node     : MD.Node_Type := NULL;
  9749.     Conditional_Node : MD.Node_Type := NULL;
  9750.  
  9751. begin
  9752.  
  9753.     Backup_Thru_Stack(Seq_Element, Seq_Part);
  9754.     Backup_Thru_Stack(List_Element, List_Part);
  9755.  
  9756.     Conditional_Statement(Seq_Element,Conditional_Node, End_Node);
  9757.     
  9758.     if List_Element.first /= NULL then
  9759.  
  9760.     Conditional_Statement_List(List_Element, Conditional_Node);
  9761.  
  9762.     else
  9763.  
  9764.     MD.First_Node := Conditional_Node;
  9765.     MD.Last_Node  := End_Node;
  9766.  
  9767.     end if;
  9768.     
  9769. end Elsif_or_OR_Statement;
  9770.  
  9771.  
  9772.  
  9773. procedure Conditional_Stmt_Alternative is
  9774.  
  9775. --| Overview
  9776. --| case_statement_alternative   ::= 
  9777. --|         WHEN_choice_=> sequence_of_statements 
  9778. --|
  9779. --| exception_handler   ::= 
  9780. --|         WHEN_exception_choice_=>
  9781. --|            sequence_of_statements
  9782.  
  9783.  
  9784.     Seq_Element : MD.McCabe_Stack_Element;
  9785.     End_Node    : MD.Node_Type := NULL;
  9786.     Conditional_Node : MD.Node_Type := NULL;
  9787.  
  9788. begin
  9789.  
  9790.     Backup_Thru_Stack(Seq_Element, Seq_of_Stmt);
  9791.  
  9792.     Conditional_Statement(Seq_Element,Conditional_Node, End_Node);
  9793.  
  9794.     MD.First_Node := Conditional_Node;
  9795.     MD.Last_Node  := End_Node;
  9796.  
  9797. end Conditional_Stmt_Alternative;
  9798.  
  9799.  
  9800.  
  9801. procedure Conditional_Stmt_Alternative_List( 
  9802.     Alternate_Kind: GrammarSymbolRange;
  9803.     List_Kind: GrammarSymbolRange
  9804.     ) is
  9805.  
  9806. --| Overview
  9807. --| {case_statement_alternative}   ::= 
  9808. --|     |   {case_statement_alternative} case_statement_alternative
  9809. --|
  9810. --| exception_handler_list   ::= 
  9811. --|         exception_handler 
  9812. --|     |   exception_handler_list exception_handler
  9813.  
  9814.     Alternate       : MD.McCabe_Stack_Element;
  9815.     Alternate_List  : MD.McCabe_Stack_Element;
  9816.  
  9817. begin
  9818.  
  9819.     Backup_Thru_Stack(Alternate, Alternate_Kind);
  9820.     Backup_Thru_Stack(Alternate_List, List_Kind);
  9821.     
  9822.     if Alternate_List.first /= NULL then
  9823.         
  9824.     Conditional_Statement_List(Alternate_List, Alternate.first);
  9825.  
  9826.     else
  9827.  
  9828.     MD.First_Node := Alternate.first;
  9829.     MD.Last_Node  := Alternate.last;
  9830.  
  9831.     end if;
  9832.     
  9833. end Conditional_Stmt_Alternative_List;
  9834.  
  9835.  
  9836. procedure Conditional_End (
  9837.     List_Part: GrammarSymbolRange := Elsif_Part;
  9838.     Seq_Part: GrammarSymbolRange := Seq_of_Stmt
  9839.     ) is
  9840.  
  9841. --| Overview
  9842. --| End If
  9843. --| if_statement   ::= 
  9844. --|         IF condition__THEN  sequence_of_statements
  9845. --|         {ELSIF__condition__THEN__sequence_of_statements} 
  9846. --|         [ELSE__sequence_of_statements] END IF ;
  9847. --|     
  9848. --| End Select
  9849. --| selective_wait   ::= 
  9850. --|         SELECT_token select_alternative {OR__select_alternative} 
  9851. --|            [ELSE__sequence_of_statements] END SELECT ;
  9852.  
  9853.  
  9854. --| Algorithm
  9855. --|+
  9856. --|     Starting from the parse stack element for the IF (or select)
  9857. --| token, loop through the stack.  If the grammar type of the current element
  9858. --| is a sequence of statements then make an edge from the top node to the
  9859. --| first node in the sequence.  Make an end node and add an edge from the
  9860. --| last node in the sequence to this node.  The last value of the IF 
  9861. --| (select) statement is this node.
  9862. --|     If the grammar type is an elsif ( when condition, or select_alternate)
  9863. --| then make an edge from the top node to the first node of this production.
  9864. --| The top node is then set to be this first node.  Make a new node, make an
  9865. --| edge from this node to the end node.  This node then becomes the end node.
  9866. --| Make an edge from the last node in the production to this new end node.
  9867. --|     If the grammar type is an else clause then make an edge from the top
  9868. --| node to the first node in the production, and the top node becomes the
  9869. --| last node in this production.
  9870. --|-
  9871.  
  9872.     Top, Bottom, N   : Node_Type;
  9873.     Seq_Stmts        : MD.McCabe_Stack_Element;
  9874.     List_Element     : MD.McCabe_Stack_Element;
  9875.     Else_Pt_Element  : MD.McCabe_Stack_Element;
  9876.  
  9877. begin
  9878.  
  9879.     Backup_Thru_Stack(Seq_Stmts, Seq_Part);
  9880.     Backup_Thru_Stack(List_Element, List_Part);
  9881.     Backup_Thru_Stack(Else_Pt_Element, Else_Part);
  9882.  
  9883.     MD.First_Node := FG.Make_Node;
  9884.     MD.Last_Node  := FG.Make_Node;
  9885.     
  9886.     if Seq_Stmts.first /= NULL then
  9887.      
  9888.     FG.Make_Edge(MD.First_Node, Seq_Stmts.first, MD.Right);
  9889.     FG.Make_Edge(Seq_Stmts.last, MD.Last_Node);
  9890.  
  9891.     end if;
  9892.  
  9893.     if List_Element.first /= NULL then
  9894.  
  9895.     FG.Make_Edge(MD.First_Node, List_Element.first);
  9896.     FG.Make_Edge(List_Element.last, MD.Last_Node);
  9897.  
  9898.     Top := FG.Find_Top_Node(List_Element.first);
  9899.     Bottom := Top.End_Node;
  9900.  
  9901.     if Else_Pt_Element.first /= NULL then
  9902.         FG.Make_Edge(Top, Else_Pt_Element.first);
  9903.         FG.Make_Edge(Else_Pt_Element.last, Bottom);
  9904.     else
  9905.         FG.Make_Edge(Top, Bottom);
  9906.     end if;
  9907.  
  9908.     else
  9909.  
  9910.     if Else_Pt_Element.first /= NULL then
  9911.         FG.Make_Edge(MD.First_Node, Else_Pt_Element.first);
  9912.         FG.Make_Edge(Else_Pt_Element.last, MD.Last_Node);
  9913.     else
  9914.         FG.Make_Edge(MD.First_Node, MD.Last_Node);
  9915.     end if;
  9916.  
  9917.     end if;
  9918.  
  9919. end Conditional_End;
  9920.  
  9921.  
  9922. procedure Exception_End is
  9923.  
  9924. --| Overview
  9925. --| begin_end_block   ::=
  9926. --|     |   BEGIN sequence_of_statements
  9927. --|         EXCEPTION {pragma_alt}__exception_handler_list END
  9928.  
  9929.     Top, Bottom : MD.Node_Type;
  9930.     Raise_Node  : MD.Node_Type;
  9931.     Seq_Element : MD.McCabe_Stack_Element;
  9932.     Except_Hand_Element : MD.McCabe_Stack_Element;
  9933.  
  9934. begin
  9935.  
  9936.     Backup_Thru_Stack(Except_Hand_Element, Pragma_Except_Hand);
  9937.     Backup_Thru_Stack(Seq_Element, Seq_of_Stmt);
  9938.  
  9939.     Top := FG.Find_Top_Node(Except_Hand_Element.first);
  9940.     Bottom := Top.End_Node;
  9941.     FG.Make_Edge(Top, Bottom);
  9942.     FG.Make_Edge(Seq_Element.last, Except_Hand_Element.first);
  9943.     
  9944.     MD.First_Node := Seq_Element.first;
  9945.     MD.Last_Node  := Except_Hand_Element.last;
  9946.  
  9947. end Exception_End;
  9948.  
  9949.  
  9950. ----------------------------------------------------------------------------
  9951. -- Procedure for cleaning up at end of a subprogram
  9952. ----------------------------------------------------------------------------
  9953.  
  9954. procedure Clean_Up_Subprogram is
  9955.  
  9956.     --| Overview
  9957.     --|
  9958.     --| subprogram_body   ::= 
  9959.     --|         subprogram_specification IS
  9960.     --|         declarative_part__begin_end_block
  9961.     --|         [end_designator] ;
  9962.     --|
  9963.     --| package_body   ::= 
  9964.     --|     |   package_body_indicator
  9965.     --|         declarative_part__begin_end_block
  9966.     --|         [identifier] ;
  9967.     --|
  9968.     --| task_body   ::= 
  9969.     --|         task_body_indicator
  9970.     --|         declarative_part__begin_end_block
  9971.     --|         [identifier] ;
  9972.  
  9973.  
  9974.     Return_Node : MD.Node_Type;
  9975.     N  : MD.Node_Type;
  9976.  
  9977. begin
  9978.  
  9979.     Propagate_Up(Dec_Begin_End);
  9980.  
  9981. end Clean_Up_Subprogram;
  9982.  
  9983. ----------------------------------------------------------------------------
  9984. -- Procedures for propagating information up as reductions are done
  9985. ----------------------------------------------------------------------------
  9986.  
  9987.  
  9988. procedure Make_Holding_Node is
  9989.  
  9990. --| Overview
  9991. --| [sequence_of_statements]   ::= 
  9992. --|          {pragma_stm} 
  9993. --|
  9994. --| {statement}   ::= 
  9995. --|         {pragma_stm} 
  9996.  
  9997. begin
  9998.     MD.First_Node := FG.Make_Node;
  9999.     MD.Last_Node  := MD.First_Node;
  10000. end Make_Holding_Node;
  10001.  
  10002.  
  10003.  
  10004. procedure Propagate_Up(Grammar_Kind : GrammarSymbolRange) is
  10005.  
  10006. --| Overview
  10007. --| [ELSE__sequence_of_statements]   ::= 
  10008. --|     |   ELSE__sequence_of_statements
  10009. --|
  10010. --|  ELSE__sequence_of_statements   ::=
  10011. --|         ELSE  sequence_of_statements
  10012. --|
  10013. --| [sequence_of_statements]   ::= 
  10014. --|          {pragma_stm} 
  10015. --|     |    sequence_of_statements 
  10016. --|
  10017. --| declarative_part__begin_end_block   ::=
  10018. --|         declarative_part begin_end_block
  10019. --|
  10020. --| accept_statement   ::=   
  10021. --|     ACCEPT identifier [(expression)][formal_part] DO_token
  10022. --|            sequence_of_statements END [identifier] ;
  10023. --|
  10024. --| begin_end_block   ::=
  10025. --|         BEGIN sequence_of_statements END
  10026.  
  10027. --| Algorithm
  10028. --|+
  10029. --|     Read back through the parse stack until the enclosed
  10030. --| Grammar_Kind is found.   The first and last nodes
  10031. --| of the sequence become the first and last nodes of the
  10032. --| new element on the parse stack.
  10033. --|-
  10034.  
  10035.     Stack_Element : MD.McCabe_Stack_Element;
  10036.  
  10037.  begin
  10038.  
  10039.     Backup_Thru_Stack(Stack_Element, Grammar_Kind);
  10040.  
  10041.     MD.First_Node := Stack_element.first;
  10042.     MD.Last_Node  := Stack_Element.last;
  10043.  
  10044. end Propagate_Up;
  10045.  
  10046.  
  10047. -------------------------------------------------------------------------
  10048. --| procedures for keeping track of current subprogram
  10049. -------------------------------------------------------------------------
  10050.  
  10051. procedure Init_Subprogram_Element is
  10052.     --| Used to initialize an element in the Subprogram  Stack
  10053. begin
  10054.  
  10055.     Subprogram_Info.Unit_Name  := S_Identifier;
  10056.     Subprogram_Info.Node_Count := 0;  --| number of nodes of the graph 
  10057.     Subprogram_Info.Edge_Count := 0;  --| number of edges on the graph
  10058.  
  10059. end Init_Subprogram_Element;
  10060.  
  10061. procedure Open_Subprogram is
  10062.     --| Pushes a new element on the subprogram stack and
  10063.     --| initializes it.
  10064. begin
  10065.  
  10066.     ST.Push(Subunit, Subprogram_Info);  --| push element on stack
  10067.     Init_Subprogram_Element;            --| initialize new element
  10068.      
  10069.     STL.Push(Label_Stack,Curr_Label_Tree);
  10070.     Curr_Label_Tree := LT.Create;
  10071.  
  10072. end Open_Subprogram;
  10073.  
  10074. procedure Report_and_Close_Subprogram is
  10075. begin  
  10076.  
  10077.     Report_Complexities;
  10078.     ST.Pop(Subunit, Subprogram_Info);
  10079.  
  10080.     STL.Pop(Label_Stack,Curr_Label_Tree);
  10081.  
  10082. exception
  10083.     when ST.Empty_Stack =>
  10084.     raise Empty_Stack;
  10085.  
  10086.     when STL.Empty_Stack =>
  10087.     raise Empty_Stack;
  10088.  
  10089. end Report_and_Close_Subprogram;
  10090.  
  10091.  
  10092. procedure Close_Subprogram is
  10093.  
  10094. begin
  10095.  
  10096.     ST.Pop(Subunit, Subprogram_Info);
  10097.     STL.Pop(Label_Stack,Curr_Label_Tree);
  10098. exception
  10099.     when ST.Empty_Stack =>
  10100.     raise Empty_Stack;
  10101.  
  10102.     when STL.Empty_Stack =>
  10103.     raise Empty_Stack;
  10104.  
  10105. end Close_Subprogram;
  10106.  
  10107. ----------------------------------------------------------------------------
  10108. -- Bodies of Local Subprograms
  10109. ----------------------------------------------------------------------------
  10110.  
  10111. procedure Backup_Thru_Stack(
  10112.     Stack_Element: in out PD.ParseStackElement;
  10113.     Token: in GrammarSymbolRange
  10114.     ) is
  10115.  
  10116. begin
  10117.  
  10118.     for i in 1..(mcc_StateStack.Length - 1) loop
  10119.     Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
  10120.     if Stack_Element.gram_sym_val = Token then
  10121.         Return;
  10122.     end if;
  10123.     end loop;
  10124.  
  10125. end Backup_Thru_Stack;
  10126.  
  10127.  
  10128. procedure Backup_Thru_Stack(
  10129.     Stack_Element: in out MD.McCabe_Stack_Element;
  10130.     Token: in GrammarSymbolRange
  10131.     ) is
  10132.     
  10133.     Parse_Stack_Element : PD.ParseStackElement;
  10134.  
  10135. begin
  10136.  
  10137.     for i in 1..(mcc_StateStack.Length - 1) loop
  10138.  
  10139.     Parse_Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
  10140.  
  10141.     if Parse_Stack_Element.gram_sym_val = Token then
  10142.         Stack_Element := McCabe_Stack.Get_Stack_Element(i);
  10143.         Return;
  10144.     end if;
  10145.  
  10146.     end loop;
  10147.  
  10148. end Backup_Thru_Stack;
  10149.  
  10150.  
  10151. procedure Backup_Thru_Stack(
  10152.     Stack_Element: in out MD.McCabe_Stack_Element;
  10153.     Token: in GrammarSymbolRange;
  10154.     Position: out StateParseStacksIndex
  10155.     )
  10156. is
  10157.     Parse_Stack_Element : PD.ParseStackElement;
  10158.  
  10159. begin
  10160.  
  10161.     for i in 1..(mcc_StateStack.Length - 1) loop
  10162.  
  10163.     Parse_Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
  10164.  
  10165.     if Parse_Stack_Element.gram_sym_val = Token then
  10166.         Stack_Element := McCabe_Stack.Get_Stack_Element(i);
  10167.         Position := i;
  10168.         Return;
  10169.     end if;
  10170.  
  10171.     end loop;
  10172.  
  10173. end Backup_Thru_Stack;
  10174.  
  10175. procedure Backup_Thru_Stack_Twice(
  10176.     Stack_Element: in out MD.McCabe_Stack_Element;
  10177.     Token: in GrammarSymbolRange
  10178.     )
  10179. is
  10180.     Parse_Stack_Element : PD.ParseStackElement;
  10181.     First_Time : boolean := TRUE;
  10182.  
  10183. begin
  10184.  
  10185.     for i in 1..(mcc_StateStack.Length - 1) loop
  10186.  
  10187.     Parse_Stack_Element := mcc_ParseStack.Get_Stack_Element(i);
  10188.  
  10189.     if Parse_Stack_Element.gram_sym_val = Token then
  10190.  
  10191.         if not First_Time then
  10192.             Stack_Element := McCabe_Stack.Get_Stack_Element(i);
  10193.             Return;
  10194.         else
  10195.             First_Time := False;
  10196.         end if;
  10197.  
  10198.     end if;
  10199.  
  10200.     end loop;
  10201.  
  10202. end Backup_Thru_Stack_Twice;
  10203.  
  10204.  
  10205. function Get_Id(
  10206.     Stack_Element : PD.ParseStackElement
  10207.     ) return PD.Source_Text
  10208. is
  10209.     Index   : Natural;
  10210.     Text    : PD.Source_Text;
  10211.     Text_String : constant String 
  10212.                      := PD.Get_Source_Text(Stack_Element.lexed_token.text);
  10213. begin
  10214.  
  10215.     Index := 0;
  10216.  
  10217.     for i in 1..Text_String'Length loop
  10218.     if Text_String(i) = '.' then
  10219.         Index := i;
  10220.     end if;
  10221.     end loop;
  10222.     
  10223.     PD.Put_Source_Text(Text_String((index + 1)..Text_String'Length), Text);
  10224.     Return Text;
  10225.  
  10226. end Get_Id;
  10227.  
  10228.  
  10229. procedure Exit_Statement(
  10230.     Stack_Element: in out MD.McCabe_Stack_Element;
  10231.     Conditional: in     boolean;
  10232.     Position: in PD.StateParseStacksIndex
  10233.     ) is
  10234.  
  10235. --|    This procedure is called by Labeled_Exit, and UnLabeled_Exit
  10236.  
  10237. --| Algorithm
  10238. --|+
  10239. --|    The Stack_Element parameter contains the ParseStackElement 
  10240. --| which refers to the enclosing loop (or select) statement.  If
  10241. --| the first and last values are null, new nodes are made.  A node
  10242. --| is made to hold the exit (or terminate) statement itself. An
  10243. --| edge is made from the exit node to the last node for the loop
  10244. --| statement, and if the exit is conditional (ie. exit when), then
  10245. --| an edge is also made to the first node of the loop statement.
  10246. --|-
  10247.  
  10248. begin
  10249.  
  10250.     MD.First_Node := FG.Make_Node;
  10251.     MD.Last_Node  := MD.First_Node;
  10252.  
  10253.     if Stack_Element.first = NULL then
  10254.  
  10255.     Stack_Element.first := FG.Make_Node;
  10256.     Stack_Element.last  := FG.Make_Node;
  10257.     McCabe_Stack.Put_Element_Value(Stack_Element.first, 
  10258.                                    Stack_Element.last,
  10259.                                    Position);
  10260.  
  10261.     end if;
  10262.  
  10263.     FG.Make_Edge(MD.Last_Node, Stack_Element.last);
  10264.     
  10265.     if not Conditional then
  10266.     MD.Last_Node := NULL;
  10267.     end if;
  10268.             
  10269. end Exit_Statement;
  10270.  
  10271.  
  10272. procedure Conditional_Statement(
  10273.     Seq_Element: MD.McCabe_Stack_Element;
  10274.     Conditional_Node: in out MD.Node_Type;
  10275.     End_Node: in out MD.Node_Type
  10276.     ) is
  10277.  
  10278. --| Overview
  10279. --| {ELSIF__condition__THEN__sequence_of_statements}   ::= 
  10280. --|          empty 
  10281. --|
  10282. --|     |   {ELSIF__condition__THEN__sequence_of_statements} 
  10283. --|            ELSIF__condition__THEN sequence_of_statements
  10284. --|
  10285. --| case_statement_alternative   ::= 
  10286. --|         WHEN_choice_=> sequence_of_statements 
  10287. --|
  10288. --|? select_alternative   ::= 
  10289. --|?         {pragma_stm} WHEN condition => selective_wait_alternative
  10290. --|?     |   {pragma_stm} selective_wait_alternative
  10291. --|
  10292. --|? {OR__select_alternative}   ::= 
  10293. --|?          empty 
  10294. --|?     |   {OR__select_alternative} OR select_alternative
  10295.  
  10296. --| Algorithm
  10297. --|+
  10298. --|     Make a node for the conditional, and make an edge to the following
  10299. --| sequence of statements.  Then set the last value of the conditional
  10300. --| stack element to the last value of the sequence of statements.
  10301. --|-
  10302.  
  10303. begin
  10304.  
  10305.  
  10306.     Conditional_Node := FG.Make_Node;        
  10307.     End_Node  := FG.Make_Node;
  10308.     Conditional_Node.End_Node := End_Node;
  10309.     FG.Make_Edge(Conditional_Node, Seq_Element.first, MD.Right);
  10310.     FG.Make_Edge(Seq_Element.last, End_Node);
  10311.  
  10312. end Conditional_Statement;
  10313.  
  10314.  
  10315. procedure Conditional_Statement_List(
  10316.     List_Element: MD.McCabe_Stack_Element;
  10317.     Conditional_Node: MD.Node_Type
  10318.     ) is
  10319.  
  10320. --| Overview
  10321. --| {ELSIF__condition__THEN__sequence_of_statements}   ::= 
  10322. --|          empty 
  10323. --|
  10324. --|     |   {ELSIF__condition__THEN__sequence_of_statements} 
  10325. --|            ELSIF__condition__THEN sequence_of_statements
  10326.  
  10327.     Top              : MD.Node_Type;
  10328.     Bottom           : MD.Node_Type;
  10329.  
  10330. begin
  10331.  
  10332.     MD.First_Node := List_Element.first;
  10333.     MD.Last_Node  := List_Element.last;
  10334.     Top := FG.Find_Top_Node(MD.First_Node);
  10335.     Bottom := Top.End_Node;
  10336.     FG.Make_Edge(Top, Conditional_Node);
  10337.     FG.Make_Edge(Conditional_Node.End_Node, Bottom);
  10338.  
  10339. end Conditional_Statement_List;
  10340.  
  10341. --------------------------------------------------------------------------
  10342. --  Procedures providing operations for producing reports
  10343. --------------------------------------------------------------------------
  10344.  
  10345. procedure Put_Fully_Qualified_Name is
  10346.  
  10347.     stk: ST.Stack;
  10348.     x: Integer := 0;
  10349.  
  10350. begin
  10351.     stk := ST.Copy(Subunit);
  10352.     declare
  10353.     Names: array (1 .. ST.Size(stk)) of Subprogram_ItemType;
  10354.     begin
  10355.     while not ST.Is_Empty(stk) loop
  10356.       X := x + 1;
  10357.       ST.Pop(stk, Names(x));
  10358.     end loop;
  10359.     ST.Destroy(stk);
  10360.  
  10361.     for i in reverse 1 .. x - 1 loop
  10362.         PO.Put(PD.Get_Source_Text(Names(i).Unit_Name));
  10363.         PO.Put('.');
  10364.     end loop;
  10365.     end;
  10366.     PO.Put(PD.Get_Source_Text(Subprogram_Info.Unit_Name));
  10367.  
  10368. end Put_Fully_Qualified_Name;
  10369.  
  10370.  
  10371.  
  10372. procedure Report_Complexities is
  10373. --| determines cyclomatic and essential complexities and produces a report
  10374.  
  10375.     Cyclomatic_Complexity : INTEGER;  --| value of cyclomatic complexity
  10376.     Int_String            : String(1..5);
  10377.  
  10378. begin
  10379.  
  10380.     Total_Edges := Total_Edges + Subprogram_Info.Edge_Count;
  10381.     Total_Nodes := Total_Nodes + Subprogram_Info.Node_Count;
  10382.     Total_Units := Total_Units + 1;
  10383.  
  10384.     Cyclomatic_Complexity  :=         -- determine cyclomatic complexity
  10385.         Subprogram_Info.Edge_Count - Subprogram_Info.Node_Count + 2;
  10386.  
  10387.     if Cyclomatic_Complexity < 1 then 
  10388.     PO.Space(7);
  10389.     PO.Put("unreachable code");
  10390.     PO.Space(8); 
  10391.     else
  10392.     PO.Space(5);
  10393.     Int_IO.Put(Int_String, Cyclomatic_Complexity);
  10394.     PO.Put(Int_String);
  10395.  
  10396.     PO.Space(9);
  10397.     Int_IO.Put(Int_String, Subprogram_Info.Edge_Count);
  10398.     PO.Put(Int_String);
  10399.       
  10400.     PO.Space(2);       
  10401.     Int_IO.Put(Int_String, Subprogram_Info.Node_Count);
  10402.     PO.Put(Int_String);
  10403.  
  10404.     end if;
  10405.  
  10406.     If Cyclomatic_Complexity > MD.Max_Complexity then
  10407.     PO.Put("     ***");
  10408.     else
  10409.     PO.Space(8);
  10410.     end if;
  10411.  
  10412.     Put_Fully_Qualified_Name;         -- put subprogram name
  10413.     PO.Skip_Line(2);
  10414.  
  10415. end Report_Complexities;
  10416.  
  10417.  
  10418. procedure Report_Total_Complexity is
  10419. --| determines cyclomatic and essential complexities and produces a report
  10420.  
  10421.     Cyclomatic_Complexity : INTEGER;  --| value of cyclomatic complexity
  10422.     Int_String            : String(1..5);
  10423.  
  10424. begin
  10425.  
  10426.     Cyclomatic_Complexity  :=         -- determine cyclomatic complexity
  10427.         Total_Edges - Total_Nodes + 2*Total_Units ;
  10428.  
  10429.     PO.Space(5);
  10430.     Int_IO.Put(Int_String, Cyclomatic_Complexity);
  10431.     PO.Put(Int_String);
  10432.     PO.Space(9);
  10433.     Int_IO.Put(Int_String, Total_Edges);
  10434.     PO.Put(Int_String);
  10435.     PO.Space(2);       
  10436.     Int_IO.Put(Int_String, Total_Nodes);
  10437.     PO.Put(Int_String);
  10438.     PO.Space(8);
  10439.     PO.Put("Total for");
  10440.     PO.Put(integer'Image(Total_Units) & " program units");
  10441.  
  10442. end Report_Total_Complexity;
  10443.  
  10444. end Statements_Pkg;
  10445. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10446. --mccstk.bdy
  10447. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10448. -- $Source: /nosc/work/parser/RCS/ParseStk.bdy,v $
  10449. -- $Revision: 4.0 $ -- $Date: 85/02/19 11:34:13 $ -- $Author: carol $
  10450.  
  10451. ----------------------------------------------------------------------
  10452.  
  10453. with mcc_ParseTables;    -- state tables generated by parser
  10454.                 -- generator
  10455. use mcc_ParseTables;
  10456.  
  10457. with mcc_Grammar_Constants;
  10458. use mcc_Grammar_Constants;    -- to have visibility on operations
  10459.                 -- on type ParserInteger declared there.
  10460.  
  10461. with mcc_StateStack;
  10462.  
  10463. package body McCabe_Stack is
  10464.  
  10465. --| Overview
  10466. --|
  10467. --| The data structure is implemented as an array.
  10468. --|
  10469.  
  10470.     ------------------------------------------------------------------
  10471.     -- Declarations Global to Package Body ParseStack
  10472.     ------------------------------------------------------------------
  10473.  
  10474.     Index       : PD.StateParseStacksIndex := 0;
  10475.         --| top element in stack.
  10476.  
  10477.     Space : array (PD.StateParseStacksRange) of MD.McCabe_Stack_Element;
  10478.         --| Storage used to hold stack elements
  10479.  
  10480.     ------------------------------------------------------------------
  10481.     -- Subprogram Bodies Global to Package ParseStack
  10482.         -- (declared in package specification).
  10483.     ------------------------------------------------------------------
  10484.  
  10485.     procedure Push(Element : in MD.McCabe_Stack_Element) is
  10486.  
  10487.     begin
  10488.  
  10489.         if (Index >= PD.StateParseStacksRange'Last) then
  10490.             raise OverFlow;
  10491.         end if;
  10492.  
  10493.         Index := Index + 1;
  10494.         Space (Index) := Element;
  10495.  
  10496.     end Push;
  10497.  
  10498.     ------------------------------------------------------------------
  10499.  
  10500.     procedure Pop is
  10501.  
  10502.     begin
  10503.  
  10504.         if (Index < PD.StateParseStacksRange'First) then
  10505.             raise UnderFlow;
  10506.         end if;
  10507.  
  10508.         Index := Index - 1;
  10509.  
  10510.     end Pop;
  10511.  
  10512.     ------------------------------------------------------------------
  10513.  
  10514.     function Length return PD.StateParseStacksIndex is
  10515.  
  10516.     begin
  10517.  
  10518.         return Index;
  10519.  
  10520.     end Length;
  10521.  
  10522.     ------------------------------------------------------------------
  10523.  
  10524.     procedure Initialize      --| Re-initializes the state to have no
  10525.                 --| elements.
  10526.         is
  10527.     begin
  10528.  
  10529.     Index := 0;
  10530.  
  10531.     end Initialize;
  10532.  
  10533.     --| Effects
  10534.     --| 
  10535.     --| Resets the top of the stack to the first element.
  10536.  
  10537.  
  10538.     ----------------------------------------------------------------------
  10539.     procedure Reduce(TopN : in PD.StateParseStacksIndex) is
  10540.  
  10541.     begin
  10542.         if (TopN > Index) then
  10543.             raise UnderFlow;
  10544.         end if;
  10545.  
  10546.         Index := Index - TopN;
  10547.  
  10548.     end Reduce; -- procedure
  10549.  
  10550.     ------------------------------------------------------------------
  10551.     function Get_Stack_Element(position : PD.StateParseStacksIndex)
  10552.         return MD.McCabe_Stack_Element is
  10553.  
  10554.     begin
  10555.         
  10556.         return Space(mcc_StateStack.Length - Position);
  10557.  
  10558.     end Get_Stack_Element; 
  10559.  
  10560.     ------------------------------------------------------------------
  10561.  
  10562.     procedure Put_Element_Value(First_Node : MD.Node_Type;
  10563.                                 Last_Node  : MD.Node_Type;
  10564.                                 position   : PD.StateParseStacksIndex
  10565.                                ) is
  10566.  
  10567.         begin
  10568.  
  10569.             Space(mcc_StateStack.Length - position).first := First_Node;
  10570.             Space(mcc_StateStack.Length - position).last  := Last_Node;
  10571.  
  10572.         end Put_Element_Value;
  10573.  
  10574.  
  10575.     ------------------------------------------------------------------
  10576.  
  10577. end McCabe_Stack;
  10578.  
  10579. ----------------------------------------------------------------------
  10580. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10581. --flowgraph.bdy
  10582. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10583. package body Flow_Graph_Pkg is
  10584.  
  10585.     complaint : exception;
  10586.  
  10587.  
  10588. --------------------------------------------------------------------------
  10589. --  Procedures providing operations for producing graph
  10590. --------------------------------------------------------------------------
  10591.  
  10592. procedure Make_Edge
  10593.          (From_Node : MD.Node_Type;
  10594.           To_Node   : MD.Node_Type;
  10595.           Which_Out : MD.Edges_Out_Type := MD.Left) is
  10596.  
  10597.         --| Algorithm
  10598.         --|+
  10599.         --| Creates an edge between two nodes on the graph, and
  10600.         --| increments the edge count.
  10601.  
  10602.     begin
  10603.        
  10604.         if (From_Node = NULL) or (To_Node = NULL) then
  10605.             NULL;
  10606.         else
  10607.  
  10608.             Subprogram_Info.Edge_Count := Subprogram_Info.Edge_Count + 1;
  10609.                                                        --| increment edge count
  10610.             From_Node.Edges_Out(Which_Out) := To_Node; --| add to edges out
  10611.             MD.Node_List.Attach(To_Node,From_Node.Edges_In); -- add to edges in
  10612.  
  10613.         end if;
  10614.  
  10615.  
  10616.     end Make_Edge;
  10617.  
  10618.  
  10619.  
  10620. function Make_Node return MD.Node_Type is
  10621.  
  10622.     N : MD.Node_Type;
  10623.  
  10624.     begin
  10625.   
  10626.         N := new MD.Node_Record;
  10627.         N.Edges_In := MD.Node_List.Create;
  10628.         Subprogram_Info.Node_Count := Subprogram_Info.Node_Count + 1;
  10629.         N.Node_Number := Subprogram_Info.Node_Count;
  10630.         return N;
  10631.  
  10632.     end Make_Node;
  10633.  
  10634. ----------------------------------------------------------------------------
  10635. --  subprograms providing operations for reading flow graph
  10636. ----------------------------------------------------------------------------
  10637.  
  10638. function Find_Top_Node(N : MD.Node_Type) return MD.Node_Type is
  10639.  
  10640. -- this reads thru a given graph for the first node with
  10641. -- no false case attached
  10642.  
  10643.         Top_Node : MD.Node_Type := N;
  10644.         
  10645.     begin
  10646.  
  10647.         loop
  10648.             if Top_Node.Edges_Out(left) = NULL then
  10649.                 return Top_Node;
  10650.             else
  10651.                 Top_Node := Top_Node.Edges_Out(left);
  10652.             end if;
  10653.         end loop;
  10654.  
  10655.     end Find_Top_Node;
  10656.  
  10657.  
  10658.  
  10659. end Flow_Graph_Pkg;
  10660.  
  10661.  
  10662.  
  10663.  
  10664.  
  10665. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10666. --mccabe.ada
  10667. --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10668. --------- SPEC ----------------------------------------------------------
  10669.  
  10670. function MCCABE return INTEGER;
  10671.  
  10672. --------- BODY ----------------------------------------------------------
  10673.  
  10674. with Text_Io;
  10675. with mcc_ParserDeclarations;
  10676. with Standard_Interface;        use Standard_Interface;
  10677. with Paginated_Output;
  10678. with String_Pkg;
  10679. with Host_Lib;
  10680. -- with Lex;
  10681. with mcc_Parser;        use mcc_Parser;
  10682. with Statements_Pkg;        use Statements_Pkg;
  10683. with McCabe_Definitions;
  10684.  
  10685. function MCCABE return INTEGER is
  10686.  
  10687.     package PO renames Paginated_Output;
  10688.     package SP renames String_Pkg;
  10689.     package MD renames McCabe_Definitions;
  10690.  
  10691.     package File is new String_Argument(    -- instantiate with
  10692.     String_Type_Name => "file_name");    -- name : file_name
  10693.  
  10694.     package Max is new Integer_Argument(    -- instantiate with
  10695.     Integer_Type      => MD.Max_Value,    -- max unflagged
  10696.     Integer_Type_Name => "max_value");    -- integer
  10697.  
  10698.  
  10699.     Mc_Cabe      : Process_Handle;    -- handle to process structure
  10700.     Source_File  : SP.String_Type;    -- string type
  10701.     Output_File  : SP.String_Type;    -- string type
  10702.  
  10703. begin
  10704.  
  10705.     Set_Tool_Identifier(Identifier => "1.1");
  10706.  
  10707.     Define_Process(            -- define this process
  10708.     Name    => "mccabe",        -- name of the process
  10709.     Help    => "Calculate the McCabe complexity measure.",
  10710.     Proc    => Mc_Cabe);        -- handle to be returned
  10711.  
  10712.     File.Define_Argument(               -- define the first argument
  10713.     Proc => Mc_Cabe,        -- process 
  10714.     Name => "source_file",        -- name of the argument
  10715.     Help => "Input file name.");
  10716.  
  10717.     File.Define_Argument(        -- define the second argument
  10718.     Proc    => Mc_Cabe,        -- process
  10719.     Name    => "output_file",    -- name of the argument
  10720.     Default => "",            -- default value
  10721.     Help    => "Name of the report file (default is standard output)"); 
  10722.  
  10723.     Max.Define_Argument(        -- define the last argument
  10724.     Proc    => Mc_Cabe,        -- process
  10725.     Name    => "max_complexity",    -- name of the argument
  10726.     Default => 20,                   -- default limit value
  10727.     Help    => "Greatest complexity not flagged in output listing");
  10728.     Max.Append_Argument_Help(        -- append help to this argument
  10729.     Proc => Mc_Cabe,        -- process
  10730.     Name => "max_complexity",    -- name of the argument
  10731.     Help => "(range: 1 .. 99, default: 20).");
  10732.  
  10733.     Parse_Line(Mc_Cabe);        -- parse the command line
  10734.  
  10735.     Source_File := File.Get_Argument(    -- get the first argument
  10736.             Proc => Mc_Cabe,
  10737.             Name => "source_file");
  10738.  
  10739.     Output_File := File.Get_Argument(    -- get the second argument
  10740.             Proc => Mc_Cabe,
  10741.             Name => "output_file");
  10742.    
  10743.     MD.Max_Complexity := Max.Get_Argument( -- get the last argument
  10744.                                          Proc => Mc_Cabe,
  10745.                               Name => "max_complexity");
  10746.  
  10747.     Define_Output(                -- define paginated output
  10748.     Proc        => Mc_Cabe,            -- process
  10749.     File_Name   => SP.Value(Output_File),    -- file name 
  10750.         Header_Size => 5
  10751.         );
  10752.  
  10753.     Define_Header(
  10754.         Line => 2,
  10755.         Text => "MCCABE CYCLOMATIC COMPLEXITY:  SOURCE_FILE "
  10756.                 & SP.Value (Source_File)
  10757.         & " - with MAX_COMPLEXITY "
  10758.         & integer'image (MD.Max_Complexity)
  10759.         );
  10760.  
  10761.     Define_Header(
  10762.         Line => 4,
  10763.         Text => "      COMPLEXITY      NUMBER OF"
  10764.         );
  10765.  
  10766.     Define_Header(
  10767.         Line => 5,
  10768.         Text => "      CYCLOMATIC     EDGES  NODES   SUBPROGRAM NAME"
  10769.         );
  10770.  
  10771. declare
  10772.         -- determines cyclomatic and essential complexities and
  10773.         -- produces a report
  10774.  
  10775.     Units      : mcc_ParserDeclarations.ParseStackElement;
  10776.     Input_File : Text_io.File_Type;
  10777.  
  10778.     begin
  10779.  
  10780.  
  10781.     -- initialize global variables
  10782.  
  10783.     Label_Stack := STL.Create;
  10784.     Subunit     := ST.Create;
  10785.  
  10786.     -- run parser
  10787.  
  10788.     --    Lex.Initilization;
  10789.  
  10790.     Text_io.Open(Input_File, Text_io.In_File, SP.Value(Source_File));
  10791.     Text_io.Set_Input(Input_File);
  10792.  
  10793.     Units := mcc_Parser.Parse;
  10794.     Report_Total_Complexity;
  10795.  
  10796.   end;
  10797.  
  10798.  
  10799.   PO.Close_Paginated_File;
  10800.  
  10801.   return HOST_LIB.RETURN_CODE(HOST_LIB.SUCCESS); -- Return successfully
  10802.  
  10803. exception
  10804.  
  10805.     when Process_Help =>
  10806.     --
  10807.     -- Help message was printed
  10808.     --
  10809.     return Host_Lib.Return_Code(Host_Lib.INFORMATION);
  10810.  
  10811.     when Abort_Process =>
  10812.     --
  10813.     -- Parse error
  10814.     --
  10815.     return Host_Lib.Return_Code(Host_Lib.ERROR);
  10816.  
  10817.     when Paginated_Output.File_Already_Open =>
  10818.     --
  10819.     -- Process output file error
  10820.     --
  10821.     return Host_Lib.Return_Code(Host_Lib.ERROR);
  10822.  
  10823.     when Paginated_Output.File_Error =>
  10824.     --
  10825.     -- Process output file error
  10826.     --
  10827.     return Host_Lib.Return_Code(Host_Lib.ERROR);
  10828.  
  10829.     when TEXT_IO.STATUS_ERROR | TEXT_IO.NAME_ERROR | TEXT_IO.USE_ERROR =>
  10830.         HOST_LIB.SET_ERROR;
  10831.         TEXT_IO.PUT_LINE("Error opening input file " &
  10832.                          SP.Value(Source_File));
  10833.     return Host_Lib.Return_Code(Host_Lib.ERROR);
  10834.  
  10835. end MCCABE;
  10836.