DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: B T

⟦a42b343ba⟧ TextFile

    Length: 94673 (0x171d1)
    Types: TextFile
    Names: »B«

Derivation

└─⟦180fe333a⟧ Bits:30000405 8mm tape, Rational 1000, SW CATALOG, 10_20_0
└─⟦180fe333a⟧ Bits:30000537 8mm tape, Rational 1000, SW Catalog 10_20_0
    └─⟦5cb1d1d7f⟧ »DATA« 
        └─⟦3b1ee7bd8⟧ 
            └─⟦this⟧ 

TextFile

with Text_Io; -- to output error messages
with Halstead_Operator;
with Halstead_Operand;
with Halstead_Vocabulary_Size;
with Halstead_Program_Length;
with Halstead_Program_Volume;
with Halstead_Potential_Operator;
with Halstead_Potential_Operand;
with Halstead_Potential_Program_Volume;
with Halstead_Program_Level;
with Halstead_Difficulty_Level;
with Halstead_Effort;
with Halstead_Delivered_Bugs;
with Halstead_Error_Proneness;
with Halstead_Time;
with Halstead_Fault_Rate;
with Halstead_List;

with Loc_Blank_Lines;
with Loc_Comments;
with Loc_Executable_Statements;
with Loc_Physical_Lines;
with Loc_Data_Declarations;

with Mccabe_Predicates;
with Mccabe_Cyclomatic_Complexity;

separate (Compilation_Unit)
procedure Produce_Metrics
             (This_Compilation_Unit : in out Ada_Compilation_Unit) is

    --================================================================
    -- Produce_Metrics calculates the complexity of a given Ada     ==
    -- compilation unit and reports the results to the user. It     ==
    -- parses the given compilation unit and changes various        ==
    -- metrics based to one or more tokens. Once this is completed, ==
    -- the results will be reported. Exception SYNTAX_ERROR will be ==
    -- raised if a syntax error occurred.                           ==
    --================================================================

    package Halstead_Operator_List is
       new Halstead_List (Item => Halstead_Operator.Definition,
                          "<" => Halstead_Operator."<",
                          Is_Equal => Halstead_Operator.Is_Equal);

    package Halstead_Operand_List is
       new Halstead_List (Item => Halstead_Operand.Definition,
                          "<" => Halstead_Operand."<",
                          Is_Equal => Halstead_Operand."=");

    package Halstead_Lower_Case_N is new Halstead_Vocabulary_Size
                                            (Unique_Operand_Count => Natural,
                                             Unique_Operator_Count => Natural);

    package Halstead_Upper_Case_N is
       new Halstead_Program_Length (Total_Operands => Natural,
                                    Total_Operators => Natural);

    package Halstead_V is
       new Halstead_Program_Volume
              (Vocabulary_Size => Halstead_Lower_Case_N.Result,
               Program_Length => Halstead_Upper_Case_N.Result);

    package Halstead_V_Star is
       new Halstead_Potential_Program_Volume
              (Potential_Operator_Count => Halstead_Potential_Operator.Count,
               Potential_Operand_Count => Halstead_Potential_Operand.Count);

    package Halstead_L is new Halstead_Program_Level
                                 (Program_Volume => Halstead_V.Result,
                                  Potential_Program_Volume =>
                                     Halstead_V_Star.Result);

    package Halstead_D is new Halstead_Difficulty_Level
                                 (Program_Level => Halstead_L.Result);

    package Halstead_E is new Halstead_Effort
                                 (Program_Volume => Halstead_V.Result,
                                  Program_Level => Halstead_L.Result);

    package Halstead_B_Hat is new Halstead_Delivered_Bugs
                                     (Effort => Halstead_E.Result);

    package Halstead_D_Hat is
       new Halstead_Error_Proneness
              (Unique_Operator_Count => Halstead_Potential_Operator.Count,
               Unique_Operand_Count => Halstead_Potential_Operand.Count,
               Total_Operands => Natural);

    package Halstead_T is new Halstead_Time (Effort => Halstead_E.Result);

    package Halstead_B_Over_P is
       new Halstead_Fault_Rate (Physical_Lines_Count =>
                                   Loc_Physical_Lines.Count);

    package Mccabe_Vg is new Mccabe_Cyclomatic_Complexity
                                (Predicates_Count => Mccabe_Predicates.Count);

    --
    type Program_Unit_Kind is

       (Procedure_Specification, Procedure_Body, Procedure_Body_Stub,

        Function_Specification, Function_Body, Function_Body_Stub,

        Package_Specification, Package_Body, Package_Body_Stub,

        Task_Specification, Task_Type_Specification, Task_Body, Task_Body_Stub,

        Generic_Procedure_Specification,
        Generic_Function_Specification, Generic_Package_Specification,

        Generic_Procedure_Instantiation,
        Generic_Function_Instantiation, Generic_Package_Instantiation,

        Named_Block, Unnamed_Block,

        Undefined);

    task type Program_Unit_State_Machine is
        --=============================================================
        -- This task type gives the user the ability to either modify =
        -- or find out the present state of the program unit abstract =
        -- state machine. Entries are provided to change the present  =
        -- values of each type of program unit object located in the  =
        -- body of this task. Entries are also provided to give back  =
        -- each present value. The type and name of the program unit  =
        -- are stored in the body.                                    =
        --                                                            =
        -- written by GER with help from Brad and JM                  =
        --=============================================================

        -- Store the name of the program unit
        entry Store_Program_Unit_Name
                 (The_Program_Unit_Name : in Program_Unit_Name);

        -- Store the type of program unit (e.g., PACKAGE_BODY, etc.)
        entry Store_Kind_Of_Program_Unit
                 (The_Kind_Of_Program_Unit : in Program_Unit_Kind);

        -- Return the present program unit name
        entry Get_Program_Unit_Name
                 (The_Program_Unit_Name : out Program_Unit_Name);

        -- Return the present type of program unit
        entry Get_Kind_Of_Program_Unit
                 (The_Kind_Of_Program_Unit : out Program_Unit_Kind);

    end Program_Unit_State_Machine;


    --
    task type Halstead_State_Machine is
        --=============================================================
        -- This task type gives the user the ability to either modify =
        -- or find out the present state of the Hastead abstract      =
        -- state machine. Entries are provided to change the present  =
        -- values of each type of Halstead object located in the      =
        -- body of this task. Entries are also provided to give back  =
        -- each present value.                                        =
        --                                                            =
        -- written by GER with help from Brad and JM                  =
        --=============================================================

        -- Store this operator in the list of operators
        entry Store_Operator (The_Operator : in Halstead_Operator.Definition);

        -- Store this operand in the list of operands
        entry Store_Operand (The_Operand : in Halstead_Operand.Definition);

        -- Change the count of compilation unit parameters
        entry Change_Parameters_Count (The_Amount_To_Change : in Positive := 1);

        -- Calculate the number of unique operators (n1)
        -- for this compilation unit
        entry Calculate_Number_Of_Unique_Operators;

        -- Calculate the number of unique operands (n2)
        -- for this compilation unit
        entry Calculate_Number_Of_Unique_Operands;

        -- Calculate the total operators (N1) for
        -- this compilation unit
        entry Calculate_Total_Number_Of_Operators;

        -- Calculate the total operands (N2) for
        -- this compilation unit
        entry Calculate_Total_Number_Of_Operands;

        -- Calculate the size of vocabulary (n) for
        -- this compilation unit
        entry Calculate_Size_Of_Vocabulary;

        -- Calculate the program length (N) for this
        -- compilation unit
        entry Calculate_Program_Length;

        -- Calculate the program volume (V) for
        -- this compilation unit
        entry Calculate_Program_Volume;

        -- Calculate the potential operator (n1*) for
        -- this compilation unit
        entry Calculate_Potential_Operator;

        -- Calculate the potential operand (n2*)  for
        -- this compilation unit
        entry Calculate_Potential_Operand;

        -- Make a running total of the potential program volume (V*)
        entry Calculate_Entry_Potential_Program_Volume;

        -- Calculate the potential program volume (V*)
        -- for this compilation unit
        entry Calculate_Potential_Program_Volume;

        -- Calculate the language level (L) for this compilation unit
        entry Calculate_Language_Level;

        -- Calculate the Difficulty level for this compilation unit
        entry Calculate_Difficulty_Level;

        -- Calculate the effort to implement for this compilation unit
        entry Calculate_Effort_To_Implement;

        -- Calculate the delivered bugs for this compilation unit
        entry Calculate_Delivered_Bugs;

        -- Calculate the error proneness for this compilation unit
        entry Calculate_Error_Proneness;

        -- Calculate the time to understand this compilation unit
        entry Calculate_Time_To_Understand;

        -- Calculate the fault rate for this compilation unit
        entry Calculate_Fault_Rate;

        -- Return the Number of unique operators for
        -- this compilation unit
        entry Get_Number_Of_Unique_Operators (Lower_Case_N_1 : out Natural);

        -- Return the Number of unique operands for
        -- this compilation unit
        entry Get_Number_Of_Unique_Operands (Lower_Case_N_2 : out Natural);

        -- Return the total Number of operators for
        -- this compilation unit
        entry Get_Total_Number_Of_Operators (Upper_Case_N_1 : out Natural);

        -- Return the total Number of operands for
        -- this compilation unit
        entry Get_Total_Number_Of_Operands (Upper_Case_N_2 : out Natural);

        -- Return the size of vocabulary for this compilation unit
        entry Get_Size_Of_Vocabulary (Lower_Case_N : out
                                         Halstead_Lower_Case_N.Result);

        -- Return the program length for this compilation unit
        entry Get_Program_Length (Upper_Case_N : out
                                     Halstead_Upper_Case_N.Result);

        -- Return the program volume for this compilation unit
        entry Get_Program_Volume (The_Program_Volume : out Halstead_V.Result);

        -- Return the potential program volume for
        -- this compilation unit
        entry Get_Potential_Program_Volume
                 (V_Star : out Halstead_V_Star.Result);

        -- Return the language level for this compilation unit
        entry Get_Language_Level (The_Language_Level : out Halstead_L.Result);

        -- Return the Difficulty level for this compilation unit
        entry Get_Difficulty_Level
                 (The_Difficulty_Level : out Halstead_D.Result);

        -- Return the effort to implement this compilation unit
        entry Get_Effort_To_Implement (The_Effort : out Halstead_E.Result);

        -- Return the delivered bugs for this compilation unit
        entry Get_Delivered_Bugs (B_Hat : out Halstead_B_Hat.Result);

        -- Return the error proneness for this compilation unit
        entry Get_Error_Proneness (D_Hat : out Halstead_D_Hat.Result);

        -- Return the Time To Understand for this compilation unit
        entry Get_Time_To_Understand (The_Time : out Halstead_T.Result);

        -- Return the fault rate for this compilation unit
        entry Get_Fault_Rate (B_Over_P : out Halstead_B_Over_P.Result);

        -- Return the list of operators
        entry Get_The_Operator_List (Operator_List : in out
                                        Halstead_Operator_List.List);

        -- Return the list of operands
        entry Get_The_Operand_List (Operand_List : in out
                                       Halstead_Operand_List.List);

    end Halstead_State_Machine;


    --
    task type Loc_State_Machine is
        --==============================================================
        -- This task type gives the user the ability to either modify  =
        -- or find out the present state of the lines of code abstract =
        -- state machine. Entries are provided to change the present   =
        -- values of each type of lines of code object located in the  =
        -- body of this task. Entries are also provided to give back   =
        -- the present value amount of each line of code.              =
        --                                                             =
        --  written by GER with help from Brad and JM                  =
        --==============================================================

        -- Modify the number of blank lines in this compilation unit
        entry Change_Blank_Lines_Count
                 (The_Amount_To_Change : in Positive := 1);

        -- Modify the number of comments in this compilation unit
        entry Change_Comments_Count (The_Amount_To_Change : in Positive := 1);

        -- Modify the number of physical lines in this compilation unit
        entry Change_Physical_Lines_Count
                 (The_Amount_To_Change : in Positive := 1);

        -- Modify the data declarations in this compilation unit
        entry Change_Data_Declarations_Count
                 (The_Amount_To_Change : in Positive := 1);

        -- Modify the executable lines in this compilation unit
        entry Change_Executable_Statements_Count
                 (The_Amount_To_Change : in Positive := 1);

        -- Return the present number of blank lines
        -- in this compilation unit
        entry Get_Blank_Lines_Count
                 (Blank_Line_Count : out Loc_Blank_Lines.Count);

        -- Return the present number of comments in
        -- this compilation unit
        entry Get_Comments_Count (Comments : out Loc_Comments.Count);

        -- Return the present number of physical lines in this
        -- compilation unit
        entry Get_Physical_Lines_Count
                 (Physical_Lines : out Loc_Physical_Lines.Count);

        -- Return the present number of data declarations in this
        -- compilation unit
        entry Get_Data_Declarations_Count
                 (Data_Declarations : out Loc_Data_Declarations.Count);

        -- Return the present number of executable statements in this
        -- compilation unit
        entry Get_Executable_Statements_Count
                 (Executable_Statements : out Loc_Executable_Statements.Count);

    end Loc_State_Machine;


    --
    task type Mccabe_State_Machine is
        --=============================================================
        -- This task type gives the user the ability to either modify =
        -- or find out the present state of McCabe's abstract         =
        -- state machine. Entries are provided to change the present  =
        -- value of the PI object (Used to calculate McCabe's         =
        -- cyclomatic complexity number) located in the body of this  =
        -- task. Entries are also provided to give back the present   =
        -- values of v(G) and PI.                                     =
        --                                                            =
        -- written by GER with help from Brad and JM                  =
        --=============================================================

        -- Modify the present value of the cyclomatic complexity
        entry Change_Pi (The_Amount_To_Change : in Integer := 1);

        -- Calculate McCabe's cyclomatic complexity number
        entry Calculate_Vg;

        -- Return the present value of PI
        entry Get_Pi (Pi : out Mccabe_Predicates.Count);

        -- Return the present value of the cyclomatic complexity
        entry Get_Cyclomatic_Complexity
                 (Cyclomatic_Complexity : out Mccabe_Vg.Number);

    end Mccabe_State_Machine;

    procedure Get_Next_Token (Out_Token : out Token_Package.Token;
                              From : in out Ada_Compilation_Unit;
                              Current_Loc : in Loc_State_Machine);
    -- This procedure gets the next SIGNIFICANT token from a given
    -- Ada_Compilation_Unit. It will update LOC blank-lines,
    -- comments, and new-lines counts. SIGNIFICANT tokens are
    -- those other than BLANK_LINEs, COMMENTs, or NEW_LINEs

    -- the following four variables function as state machines
    -- which keep track of various metric variables
    Halstead : Halstead_State_Machine;
    Loc : Loc_State_Machine;
    Mccabe : Mccabe_State_Machine;
    Program_Unit : Program_Unit_State_Machine;

    --**   -- copy of This_Compilation_Unit
    --**   Current_Compilation_Unit : Ada_Compilation_Unit ;

    -- The following is the implementation of the Ada grammar
    -- defined in the USERS MANUAL and in the OOD documents of
    -- PRODUCE_METRICS.

    -- NAME_KIND is used by productions whose one or more of their
    -- right sentential forms contain production ATTRIBUTE,
    -- INDEXED_COMPONENT, SLICE or SELECTED_COMPONENT. Instead of
    -- defining the above productions, we define a superset of
    -- all the above productions named NAME which will return
    -- SIMPLE_NAME, ATTRIBUTE, INDEXED_COMPONENT_OR_SLICE, or
    -- SELECTED_COMPONENT upon completion.
    type Name_Kind is (Attribute, Indexed_Component_Or_Slice,
                       Selected_Component, Simple_Name);

    -- SET_OF_TOKENS is used in production EXPRESSION and in
    -- productions that use EXPRESSION. EXPRESSION will continue
    -- reading tokens from a given Ada compilation unit until
    -- the next token is a member of SET_OF_TOKENS.
    type Set_Of_Tokens is array (Positive range <>) of
                             Token_Package.Token_Value;

    procedure Compilation_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Context_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure With_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Use_Clause (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine);

    procedure Pragma_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Extended_Program_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Procedure_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Procedure_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Unit_Name : out Program_Unit_Name;
                  Formal_Parameters_Count : out Natural);
    -- Unit_Name is the IDENTIFIER after the word "PROCEDURE".
    -- Formal_Paratemers_Count is the number of procedure formal
    -- parameters (ZERO if the procedure has no parameter).


    procedure Common_Body
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Begin_End_Block
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Exception_Handler
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Exception_Choice
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Last_Exception_Choice
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Declarative_Part
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Id_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Id_Type_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Constant_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Renaming_Or_Range_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Id_List_Type_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Type_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Enumeration_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Enumeration_Literal
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Real_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Record_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Component_List
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Component_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Variant_Part
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Variant (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                       Program_Unit : in Program_Unit_State_Machine;
                       Halstead : in Halstead_State_Machine;
                       Loc : in Loc_State_Machine;
                       Mccabe : in Mccabe_State_Machine);

    procedure Derived_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Subtype_Indication
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Constraint (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine);

    procedure Range_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Floating_Point_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Fixed_Point_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Aggregate (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine;
                         Number_Of_Components : out Positive);
    -- Number_Of_Components is the number of aggregate components
    -- (which are separated by commas).

    procedure Integer_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Array_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Access_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Private_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Subtype_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Renaming_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Renaming_Prefix
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Representation_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Simple_Or_Length_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Simple_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Simple_Clause_Continued
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Alignment_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Component_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Length_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Attribute (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine);

    procedure Sequence_Of_Statements
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Statement (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine);

    procedure Label (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                     Program_Unit : in Program_Unit_State_Machine;
                     Halstead : in Halstead_State_Machine;
                     Loc : in Loc_State_Machine;
                     Mccabe : in Mccabe_State_Machine);

    procedure Abort_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Delay_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Exit_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Goto_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Name_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Null_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Raise_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Return_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Accept_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Accept_Statement_Continued
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Case_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Case_Statement_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure If_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Loop_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Basic_Loop_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Select_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Selective_Wait
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Select_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Selective_Wait_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Conditional_Or_Timed_Entry_Call
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Accept_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Delay_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Function_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Function_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Unit_Name : out Program_Unit_Name;
                  Formal_Parameters_Count : out Natural);
    -- Unit_Name is the IDENTIFIER or OPERATOR SYMBOL after the
    -- word "FUNCTION".
    -- Formal_Parameters_Count is the number of function formal
    -- parameters (ZERO if function has no parameter).

    procedure Designator (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine;
                          Unit_Name : out Program_Unit_Name);
    -- Unit_Name is the IDENTIFIER or OPERATOR SYMBOL after the
    -- word "FUNCTION" or "END".

    procedure Package_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Package_Body
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Package_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Generic_Instantiation
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Generic_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Generic_Parameter_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Subprogram_Generic_Parameter
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Subprogram_Kind : out Program_Unit_Kind);
    -- The value of Subprogram_Kind will either be
    -- PROCEDURE_SPECIFICATION or FUNCTION_SPECIFICATION.

    procedure Box_Or_Name
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Generic_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Generic_Subprogram_Or_Package_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Task_Unit (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine);

    procedure Task_Body (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine);

    procedure Task_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Entry_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Entry_Declaration_Continued
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Proper_Body
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Named_Block
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Formal_Part
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Formal_Parameters_Count : out Natural);
    -- Formal_Parameters_Count is the number of parameters in the
    -- formal part.

    procedure Parameter_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Parameters_Count : out Natural);
    -- Parameters_Count is the number of IDENTIFIERs in this
    -- Parameter_Spefication.

    procedure Id_List (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                       Program_Unit : in Program_Unit_State_Machine;
                       Halstead : in Halstead_State_Machine;
                       Loc : in Loc_State_Machine;
                       Mccabe : in Mccabe_State_Machine;
                       Number_Of_Identifiers : out Natural);
    -- Number_Of_Identifiers is the number of IDENTIFIERs in an
    -- identifier list.

    procedure Name (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                    Program_Unit : in Program_Unit_State_Machine;
                    Halstead : in Halstead_State_Machine;
                    Loc : in Loc_State_Machine;
                    Mccabe : in Mccabe_State_Machine;
                    Out_Name_Kind : out Name_Kind);
    -- The value of Out_Name_Kind will be SIMPLE_NAME, ATTRIBUTE,
    -- INDEXED_COMPONENT_OR_SLICE, or SELECTED_COMPONENT.

    procedure Name_Prefix
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Name_Suffix
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Selector (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                        Program_Unit : in Program_Unit_State_Machine;
                        Halstead : in Halstead_State_Machine;
                        Loc : in Loc_State_Machine;
                        Mccabe : in Mccabe_State_Machine);

    procedure Expanded_Name
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);

    procedure Expression (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine;
                          Terminate_Tokens : in Set_Of_Tokens);
    -- When the next token is a member of Terminate_Tokens,
    -- Expression will transfer control back to the invoking
    -- program unit.

    procedure Expression_Token
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine);
    -- declare body stubs
    procedure Compilation_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Context_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure With_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Use_Clause (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine) is separate;

    procedure Pragma_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Extended_Program_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Procedure_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Procedure_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Unit_Name : out Program_Unit_Name;
                  Formal_Parameters_Count : out Natural) is separate;
    -- Unit_Name is the IDENTIFIER after the word "PROCEDURE".
    -- Formal_Paratemers_Count is the number of procedure formal
    -- parameters (ZERO if the procedure has no parameter).


    procedure Common_Body
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Begin_End_Block
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Exception_Handler
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Exception_Choice
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Last_Exception_Choice
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Declarative_Part
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Id_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Id_Type_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Constant_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Renaming_Or_Range_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Id_List_Type_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Type_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Enumeration_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Enumeration_Literal
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Real_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Record_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Component_List
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Component_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Variant_Part
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Variant (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                       Program_Unit : in Program_Unit_State_Machine;
                       Halstead : in Halstead_State_Machine;
                       Loc : in Loc_State_Machine;
                       Mccabe : in Mccabe_State_Machine) is separate;

    procedure Derived_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Subtype_Indication
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Constraint (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine) is separate;

    procedure Range_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Floating_Point_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Fixed_Point_Constraint
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Aggregate (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine;
                         Number_Of_Components : out Positive) is separate;
    -- Number_Of_Components is the number of aggregate components
    -- (which are separated by commas).

    procedure Integer_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Array_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Access_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Private_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Subtype_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Renaming_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Renaming_Prefix
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Representation_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Simple_Or_Length_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Simple_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Simple_Clause_Continued
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Alignment_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Component_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Length_Clause
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Attribute (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine) is separate;

    procedure Sequence_Of_Statements
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Statement (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine) is separate;

    procedure Label (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                     Program_Unit : in Program_Unit_State_Machine;
                     Halstead : in Halstead_State_Machine;
                     Loc : in Loc_State_Machine;
                     Mccabe : in Mccabe_State_Machine) is separate;

    procedure Abort_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Delay_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Exit_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Goto_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Name_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Null_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Raise_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Return_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Accept_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Accept_Statement_Continued
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Case_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Case_Statement_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure If_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Loop_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Basic_Loop_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Select_Statement
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Selective_Wait
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Select_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Selective_Wait_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Conditional_Or_Timed_Entry_Call
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Accept_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Delay_Alternative
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Function_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Function_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Unit_Name : out Program_Unit_Name;
                  Formal_Parameters_Count : out Natural) is separate;
    -- Unit_Name is the IDENTIFIER or OPERATOR SYMBOL after the
    -- word "FUNCTION".
    -- Formal_Parameters_Count is the number of function formal
    -- parameters (ZERO if function has no parameter).

    procedure Designator (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine;
                          Unit_Name : out Program_Unit_Name) is separate;
    -- Unit_Name is the IDENTIFIER or OPERATOR SYMBOL after the
    -- word "FUNCTION" or "END".

    procedure Package_Unit
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Package_Body
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Package_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Generic_Instantiation
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Generic_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Generic_Parameter_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Subprogram_Generic_Parameter
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Subprogram_Kind : out Program_Unit_Kind) is separate;
    -- The value of Subprogram_Kind will either be
    -- PROCEDURE_SPECIFICATION or FUNCTION_SPECIFICATION.

    procedure Box_Or_Name
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Generic_Type_Definition
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Generic_Subprogram_Or_Package_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Task_Unit (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine) is separate;

    procedure Task_Body (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                         Program_Unit : in Program_Unit_State_Machine;
                         Halstead : in Halstead_State_Machine;
                         Loc : in Loc_State_Machine;
                         Mccabe : in Mccabe_State_Machine) is separate;

    procedure Task_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Entry_Declaration
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Entry_Declaration_Continued
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Proper_Body
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Named_Block
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Formal_Part
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Formal_Parameters_Count : out Natural) is separate;
    -- Formal_Parameters_Count is the number of parameters in the
    -- formal part.

    procedure Parameter_Specification
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine;
                  Parameters_Count : out Natural) is separate;
    -- Parameters_Count is the number of IDENTIFIERs in this
    -- Parameter_Spefication.

    procedure Id_List (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                       Program_Unit : in Program_Unit_State_Machine;
                       Halstead : in Halstead_State_Machine;
                       Loc : in Loc_State_Machine;
                       Mccabe : in Mccabe_State_Machine;
                       Number_Of_Identifiers : out Natural) is separate;
    -- Number_Of_Identifiers is the number of IDENTIFIERs in an
    -- identifier list.

    procedure Name (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                    Program_Unit : in Program_Unit_State_Machine;
                    Halstead : in Halstead_State_Machine;
                    Loc : in Loc_State_Machine;
                    Mccabe : in Mccabe_State_Machine;
                    Out_Name_Kind : out Name_Kind) is separate;
    -- The value of Out_Name_Kind will be SIMPLE_NAME, ATTRIBUTE,
    -- INDEXED_COMPONENT_OR_SLICE, or SELECTED_COMPONENT.

    procedure Name_Prefix
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Name_Suffix
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Selector (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                        Program_Unit : in Program_Unit_State_Machine;
                        Halstead : in Halstead_State_Machine;
                        Loc : in Loc_State_Machine;
                        Mccabe : in Mccabe_State_Machine) is separate;

    procedure Expanded_Name
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Expression (Current_Compilation_Unit : in out
                             Ada_Compilation_Unit;
                          Program_Unit : in Program_Unit_State_Machine;
                          Halstead : in Halstead_State_Machine;
                          Loc : in Loc_State_Machine;
                          Mccabe : in Mccabe_State_Machine;
                          Terminate_Tokens : in Set_Of_Tokens) is separate;
    -- Terminate_Tokens contains a set of tokens which
    -- will prevent Expression from continuosly looping.

    procedure Expression_Token
                 (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                  Program_Unit : in Program_Unit_State_Machine;
                  Halstead : in Halstead_State_Machine;
                  Loc : in Loc_State_Machine;
                  Mccabe : in Mccabe_State_Machine) is separate;

    procedure Report_Metrics (Program_Unit : in Program_Unit_State_Machine;
                              Halstead : in Halstead_State_Machine;
                              Loc : in Loc_State_Machine;
                              Mccabe : in Mccabe_State_Machine) is separate;

    procedure Get_Next_Token (Out_Token : out Token_Package.Token;
                              From : in out Ada_Compilation_Unit;
                              Current_Loc : in Loc_State_Machine) is separate;

    task body Halstead_State_Machine is separate;
    task body Loc_State_Machine is separate;
    task body Mccabe_State_Machine is separate;
    task body Program_Unit_State_Machine is separate;

begin
    -- Produce_Metrics

    --**   -- make copy of This_Compilation_Unit
    --**   New_List.Share
    --**      (The_List      => New_List.List(This_Compilation_Unit),
    --**       With_The_List => New_List.List(Current_Compilation_Unit)) ;

    -- change metrics, invoke highest level production
    Compilation_Unit
--**
       (Current_Compilation_Unit => This_Compilation_Unit,
        Program_Unit => Program_Unit,
        Halstead => Halstead,
        Loc => Loc,
        Mccabe => Mccabe);

    -- report metrics
    Report_Metrics (Program_Unit => Program_Unit,
                    Halstead => Halstead,
                    Loc => Loc,
                    Mccabe => Mccabe);

    --exception
    --   when Syntax_Error =>
    --      Text_IO.New_Line ;
    --      Text_IO.Put ("********** ") ;
    --      Text_IO.Put_Line
    --         ("Syntax or semantic error in input compilation unit") ;
    --      Text_IO.New_Line ;
    --
    --      -- report metrics
    --      Report_Metrics
    --         (Program_Unit => Program_Unit,
    --          Halstead     => Halstead,
    --          LOC          => LOC,
    --          McCabe       => McCabe) ;
    --
    --      -- propagate Syntax_Error
    --      raise ;

end Produce_Metrics;