
-- ***********************************************************
-- *                                                         *
-- * Ada95_Parser                                            * BODY
-- *                                                         *
-- ***********************************************************
with Ada95_Lexer;               use Ada95_Lexer;
with Ada95_Parser_Goto;         use Ada95_Parser_Goto;
with Ada95_Parser_Shift_Reduce; use Ada95_Parser_Shift_Reduce;
with Ada95_Parser_Tokens;       use Ada95_Parser_Tokens;
with Ada.Text_IO;               use Ada.Text_IO;
with Text_IO;
with AdaDoc_Tree;               use AdaDoc_Tree;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Finalization;
package body Ada95_Parser is

------------------------------------------------------------------
-- Local types and objects
------------------------------------------------------------------

  Echo             : BOOLEAN := FALSE;
  Number_of_Errors : NATURAL := 0;

------------------------------------------------------------------
-- Local routines
------------------------------------------------------------------

  -- ***********************************************************
  -- *                                                         *
  -- * Ada95_Parser.YYError                                    *
  -- *                                                         *
  -- ***********************************************************
  procedure YYError(S: in STRING := "Syntax Error") is
  --| PURPOSE:
  --| Output error message and increment Number_of_Errors
  begin -- YYError
    Put_Line(S & " line : " & Integer'Image(Get_Current_Line));
    Number_of_Errors := Number_of_Errors + 1;
    raise Syntax_Error;
  end YYError;

------------------------------------------------------------------
-- Local routines to manipulate YYSTYPE objects
------------------------------------------------------------------

  -- ***********************************************************
  -- *                                                         *
  -- * Ada95_Parser.Set                                        *
  -- *                                                         *
  -- ***********************************************************
  procedure Set (Result       : out STRING_BUFFER;
		 Input_String : in STRING) is
    Temp_Result : STRING_BUFFER;
  begin -- Set
    if Input_String'LENGTH <= Maximum_String_Length then
      Temp_Result.Last := Input_String'LENGTH;
      Temp_Result.Text(1..Temp_Result.Last) := Input_String;
    else
      Temp_Result.Last := Maximum_String_Length;
      Temp_Result.Text(1..Temp_Result.Last) :=
        Input_String(Input_String'FIRST .. Input_String'FIRST - 1 +
                     Maximum_String_Length);
    end if;
    Result := Temp_Result;
  end Set;

------------------------------------------------------------------
-- Local routines to handle action rules in the grammar
------------------------------------------------------------------

------------------------------------------------------------------
-- Local routines for performing the parse
------------------------------------------------------------------

  -- ***********************************************************
  -- *                                                         *
  -- * Ada95_Parser.YYParse                                    *
  -- *                                                         *
  -- ***********************************************************
  --| PURPOSE:
  --| Perform the parse of a file.
  --| YYParse is inserted below

procedure YYParse is

   -- Rename User Defined Packages to Internal Names.
    package yy_goto_tables         renames
      Ada95_Parser_Goto;
    package yy_shift_reduce_tables renames
      Ada95_Parser_Shift_Reduce;
    package yy_tokens              renames
      Ada95_Parser_Tokens;

   use yy_tokens, yy_goto_tables, yy_shift_reduce_tables;

   procedure yyerrok;
   procedure yyclearin;


   package yy is

       -- the size of the value and state stacks
       stack_size : constant Natural := 300;

       -- subtype rule         is natural;
       subtype parse_state  is natural;
       -- subtype nonterminal  is integer;

       -- encryption constants
       default           : constant := -1;
       first_shift_entry : constant :=  0;
       accept_code       : constant := -3001;
       error_code        : constant := -3000;

       -- stack data used by the parser
       tos                : natural := 0;
       value_stack        : array(0..stack_size) of yy_tokens.yystype;
       state_stack        : array(0..stack_size) of parse_state;

       -- current input symbol and action the parser is on
       action             : integer;
       rule_id            : rule;
       input_symbol       : yy_tokens.token;


       -- error recovery flag
       error_flag : natural := 0;
          -- indicates  3 - (number of valid shifts after an error occurs)

       look_ahead : boolean := true;
       index      : integer;

       -- Is Debugging option on or off
        DEBUG : constant boolean := FALSE;

    end yy;


    function goto_state
      (state : yy.parse_state;
       sym   : nonterminal) return yy.parse_state;

    function parse_action
      (state : yy.parse_state;
       t     : yy_tokens.token) return integer;

    pragma inline(goto_state, parse_action);


    function goto_state(state : yy.parse_state;
                        sym   : nonterminal) return yy.parse_state is
        index : integer;
    begin
        index := goto_offset(state);
        while  integer(goto_matrix(index).nonterm) /= sym loop
            index := index + 1;
        end loop;
        return integer(goto_matrix(index).newstate);
    end goto_state;


    function parse_action(state : yy.parse_state;
                          t     : yy_tokens.token) return integer is
        index      : integer;
        tok_pos    : integer;
        default    : constant integer := -1;
    begin
        tok_pos := yy_tokens.token'pos(t);
        index   := shift_reduce_offset(state);
        while integer(shift_reduce_matrix(index).t) /= tok_pos and then
              integer(shift_reduce_matrix(index).t) /= default
        loop
            index := index + 1;
        end loop;
        return integer(shift_reduce_matrix(index).act);
    end parse_action;

-- error recovery stuff

    procedure handle_error is
      temp_action : integer;
    begin

      if yy.error_flag = 3 then -- no shift yet, clobber input.
      if yy.debug then
          text_io.put_line("Ayacc.YYParse: Error Recovery Clobbers " &
                   yy_tokens.token'image(yy.input_symbol));
      end if;
        if yy.input_symbol = yy_tokens.end_of_input then  -- don't discard,
        if yy.debug then
            text_io.put_line("Ayacc.YYParse: Can't discard END_OF_INPUT, quiting...");
        end if;
        raise yy_tokens.syntax_error;
        end if;

            yy.look_ahead := true;   -- get next token
        return;                  -- and try again...
    end if;

    if yy.error_flag = 0 then -- brand new error
        yyerror("Syntax Error");
    end if;

    yy.error_flag := 3;

    -- find state on stack where error is a valid shift --

    if yy.debug then
        text_io.put_line("Ayacc.YYParse: Looking for state with error as valid shift");
    end if;

    loop
        if yy.debug then
          text_io.put_line("Ayacc.YYParse: Examining State " &
               yy.parse_state'image(yy.state_stack(yy.tos)));
        end if;
        temp_action := parse_action(yy.state_stack(yy.tos), error);

            if temp_action >= yy.first_shift_entry then
                if yy.tos = yy.stack_size then
                    text_io.put_line(" Stack size exceeded on state_stack");
                    raise yy_Tokens.syntax_error;
                end if;
                yy.tos := yy.tos + 1;
                yy.state_stack(yy.tos) := temp_action;
                exit;
            end if;

        Decrement_Stack_Pointer :
        begin
          yy.tos := yy.tos - 1;
        exception
          when Constraint_Error =>
            yy.tos := 0;
        end Decrement_Stack_Pointer;

        if yy.tos = 0 then
          if yy.debug then
            text_io.put_line("Ayacc.YYParse: Error recovery popped entire stack, aborting...");
          end if;
          raise yy_tokens.syntax_error;
        end if;
    end loop;

    if yy.debug then
        text_io.put_line("Ayacc.YYParse: Shifted error token in state " &
              yy.parse_state'image(yy.state_stack(yy.tos)));
    end if;

    end handle_error;

   -- print debugging information for a shift operation
   procedure shift_debug(state_id: yy.parse_state; lexeme: yy_tokens.token) is
   begin
       text_io.put_line("Ayacc.YYParse: Shift "& yy.parse_state'image(state_id)&" on input symbol "&
               yy_tokens.token'image(lexeme) );
   end;

   -- print debugging information for a reduce operation
   procedure reduce_debug(rule_id: rule; state_id: yy.parse_state) is
   begin
       text_io.put_line("Ayacc.YYParse: Reduce by rule "&rule'image(rule_id)&" goto state "&
               yy.parse_state'image(state_id));
   end;

   -- make the parser believe that 3 valid shifts have occured.
   -- used for error recovery.
   procedure yyerrok is
   begin
       yy.error_flag := 0;
   end yyerrok;

   -- called to clear input symbol that caused an error.
   procedure yyclearin is
   begin
       -- yy.input_symbol := yylex;
       yy.look_ahead := true;
   end yyclearin;


begin
    -- initialize by pushing state 0 and getting the first input symbol
    yy.state_stack(yy.tos) := 0;


    loop

        yy.index := shift_reduce_offset(yy.state_stack(yy.tos));
        if integer(shift_reduce_matrix(yy.index).t) = yy.default then
            yy.action := integer(shift_reduce_matrix(yy.index).act);
        else
            if yy.look_ahead then
                yy.look_ahead   := false;

                yy.input_symbol := yylex;
            end if;
            yy.action :=
             parse_action(yy.state_stack(yy.tos), yy.input_symbol);
        end if;


        if yy.action >= yy.first_shift_entry then  -- SHIFT

            if yy.debug then
                shift_debug(yy.action, yy.input_symbol);
            end if;

            -- Enter new state
            if yy.tos = yy.stack_size then
                text_io.put_line(" Stack size exceeded on state_stack");
                raise yy_Tokens.syntax_error;
            end if;
            yy.tos := yy.tos + 1;
            yy.state_stack(yy.tos) := yy.action;
              yy.value_stack(yy.tos) := yylval;

        if yy.error_flag > 0 then  -- indicate a valid shift
            yy.error_flag := yy.error_flag - 1;
        end if;

            -- Advance lookahead
            yy.look_ahead := true;

        elsif yy.action = yy.error_code then       -- ERROR

            handle_error;

        elsif yy.action = yy.accept_code then
            if yy.debug then
                text_io.put_line("Ayacc.YYParse: Accepting Grammar...");
            end if;
            exit;

        else -- Reduce Action

            -- Convert action into a rule
            yy.rule_id  := -1 * yy.action;

            -- Execute User Action
            -- user_action(yy.rule_id);


                case yy.rule_id is

when  2 =>
--#line  108

               
yyval := new Dummy_String_Token;
               Dummy_String_Token(
yyval.all).Str :=
               To_Unbounded_String(Get_Token_Value);
            

when  3 =>
--#line  114

               
yyval := new Dummy_String_Token;
               Dummy_String_Token(
yyval.all).Str :=
               To_Unbounded_String(Get_Token_Value);
            

when  4 =>
--#line  122

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  10 =>
--#line  144

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  12 =>
--#line  154

      
yyval := new Pragma_Decl_Token;
      Pragma_Decl_Token(
yyval.all).Line_Number := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Line_Number;
      Pragma_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  13 =>
--#line  167

	   
yyval := new Pragma_Decl_Token;
	   Pragma_Decl_Token(
yyval.all).Line_Number := Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Line_Number;
      Pragma_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str;
      Pragma_Decl_Token(
yyval.all).Decl := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ')';

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  14 =>
--#line  182

      
yyval := 
yy.value_stack(yy.tos);
   

when  15 =>
--#line  186

	   
yyval := 
yy.value_stack(yy.tos);
	   Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ", " &
	                                     Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

	

when  16 =>
--#line  195

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  17 =>
--#line  200

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & " => " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  33 =>
--#line  227

      
yyval := new Object_Declaration_Token;
      Object_Declaration_Token(
yyval.all).Line_Number := Get_Current_Line;
      Object_Declaration_Token(
yyval.all).Def_ID_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-5));
      Object_Declaration_Token(
yyval.all).Qualifier := Object_Qualifier_Token_Ptr(
yy.value_stack(yy.tos-3));
      Object_Declaration_Token(
yyval.all).Subtype_Def := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Object_Declaration_Token(
yyval.all).Init := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
	

when  34 =>
--#line  244

      
yyval := new Def_ID_S_Token;
      Def_ID_S_Token(
yyval.all).Line_Number := Get_Current_Line;
      Def_ID_S_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  35 =>
--#line  250

	   
yyval := new Def_ID_S_Token;
	   Def_ID_S_Token(
yyval.all).Line_Number := Get_Current_Line;
	   Def_ID_S_Token(
yyval.all).Next_ID := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-2));
	   Def_ID_S_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  36 =>
--#line  260

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Line_Number := Get_Current_Line;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  37 =>
--#line  267

      
yyval := new Object_Qualifier_Token;
      Object_Qualifier_Token(
yyval.all).Qualifier := (others => False);
   

when  38 =>
--#line  272

      
yyval := new Object_Qualifier_Token;
      Object_Qualifier_Token(
yyval.all).Qualifier := (Aliased_Qualifier => True,
                                                   Constant_Qualifier => False);
   

when  39 =>
--#line  278

      
yyval := new Object_Qualifier_Token;
      Object_Qualifier_Token(
yyval.all).Qualifier := (Aliased_Qualifier => False,
                                                   Constant_Qualifier => True);
   

when  40 =>
--#line  284

      
yyval := new Object_Qualifier_Token;
      Object_Qualifier_Token(
yyval.all).Qualifier := (Aliased_Qualifier => True,
                                                   Constant_Qualifier => True);
   

when  41 =>
--#line  292

      
yyval := 
yy.value_stack(yy.tos);
   

when  42 =>
--#line  297

      
yyval := 
yy.value_stack(yy.tos);
   

when  43 =>
--#line  304

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;
   

when  44 =>
--#line  310

      
yyval := 
yy.value_stack(yy.tos);
   

when  45 =>
--#line  316

      
yyval := new Object_Declaration_Token;
      Object_Declaration_Token(
yyval.all).Line_Number := Get_Current_Line;
      Object_Declaration_Token(
yyval.all).Def_ID_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-5));
      Object_Declaration_Token(
yyval.all).Qualifier :=
      new Object_Qualifier_Token'(Ada.Finalization.Controlled with
      Line_Number => 0,
      Qualifier =>
      (Aliased_Qualifier => False,
      Constant_Qualifier => True));
      Object_Declaration_Token(
yyval.all).Subtype_Def := Null_Unbounded_String;
      Object_Declaration_Token(
yyval.all).Init := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  46 =>
--#line  338

      if 
yy.value_stack(yy.tos-1) /= null then
         Generic_Type_Token(
yy.value_stack(yy.tos-1).all).Line_Number :=
         Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Line_Number;

         Generic_Type_Token(
yy.value_stack(yy.tos-1).all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str;

         if 
yy.value_stack(yy.tos-2) /= null then
            Generic_Discrimant_Type_Token(
yy.value_stack(yy.tos-1).all).Discriminant_Part :=
            Discriminant_Token_Ptr(
yy.value_stack(yy.tos-2));
         end if;

         if not In_Private then
            Insert(Tree, 
yy.value_stack(yy.tos-1));
         else
            Insert(Private_Tree, 
yy.value_stack(yy.tos-1));
         end if;
      end if;
   

when  47 =>
--#line  360

      
yyval := null;
   

when  48 =>
--#line  364

	   
yyval := 
yy.value_stack(yy.tos);
	

when  49 =>
--#line  368

      
yyval := new Discriminant_Token;
      Discriminant_Token(
yyval.all).Def_ID_S := new Def_ID_S_Token'(
      Ada.Finalization.Controlled with 0, To_Unbounded_String("<>"), null);
      Discriminant_Token(
yyval.all).Type_Def := Null_Unbounded_String;
      Discriminant_Token(
yyval.all).Init := Null_Unbounded_String;
	

when  50 =>
--#line  378

      
yyval := null;
   

when  51 =>
--#line  382

	   
yyval := 
yy.value_stack(yy.tos);
	

when  52 =>
--#line  388

	   
yyval := new Simple_Type_Token;
	   Simple_Type_Token(
yyval.all).Declaration_Part := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  53 =>
--#line  393

	   
yyval := new Simple_Type_Token;
	   Simple_Type_Token(
yyval.all).Declaration_Part := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  54 =>
--#line  398

	   
yyval := new Simple_Type_Token;
	   Simple_Type_Token(
yyval.all).Declaration_Part := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  55 =>
--#line  403

	   
yyval := new Simple_Type_Token;
	   Simple_Type_Token(
yyval.all).Declaration_Part := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  56 =>
--#line  408

	   
yyval := 
yy.value_stack(yy.tos);
	

when  57 =>
--#line  412

	   
yyval := new Simple_Type_Token;
	   Simple_Type_Token(
yyval.all).Declaration_Part := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  58 =>
--#line  417

	   
yyval := 
yy.value_stack(yy.tos);
	

when  59 =>
--#line  421

	   
yyval := 
yy.value_stack(yy.tos);
	

when  60 =>
--#line  427

      
yyval := new Subtype_Decl_Token;
      Subtype_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str;
      Subtype_Decl_Token(
yyval.all).Declaration_Part := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  61 =>
--#line  441

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  62 =>
--#line  447

      
yyval := 
yy.value_stack(yy.tos);
   

when  63 =>
--#line  453

      
yyval := 
yy.value_stack(yy.tos);
   

when  64 =>
--#line  457

      
yyval := 
yy.value_stack(yy.tos);
   

when  66 =>
--#line  466

      
yyval := new Simple_Type_Token;
      Simple_Type_Token(
yyval.all).Declaration_Part := "new " &
      Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  67 =>
--#line  472

      
yyval := new Derived_Type_Token;
      Derived_Type_Token(
yyval.all).Inheritance := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Derived_Type_Token(
yyval.all).Declaration_Part := "new " &
      Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & " with private";
   

when  68 =>
--#line  479

	   Record_Type_Token(
yy.value_stack(yy.tos).all).Poo_Part := new Poo_Record_Token'
	   (Ada.Finalization.Controlled with
       0,
       Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str,
       False,
       False);


	

when  69 =>
--#line  490

      
yyval := new Derived_Type_Token;
      Derived_Type_Token(
yyval.all).Inheritance := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Derived_Type_Token(
yyval.all).Declaration_Part := "abstract new " &
      Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & " with private";
   

when  70 =>
--#line  497

	   Record_Type_Token(
yy.value_stack(yy.tos).all).Poo_Part := new Poo_Record_Token'(
	   Ada.Finalization.Controlled with
      0,
      Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str,
      False,
      True);


	

when  71 =>
--#line  510

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "range " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  72 =>
--#line  518

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ".." &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  73 =>
--#line  524

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ''' & "Range";

   

when  74 =>
--#line  530

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-5).all).Str & ''' &
                                        "Range " &
                                        '(' & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';

   

when  75 =>
--#line  540

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';
   

when  76 =>
--#line  547

      
yyval := 
yy.value_stack(yy.tos);
   

when  77 =>
--#line  551

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ", " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  78 =>
--#line  559

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  79 =>
--#line  564

      
yyval := 
yy.value_stack(yy.tos);
   

when  80 =>
--#line  570

      
yyval := 
yy.value_stack(yy.tos);
   

when  81 =>
--#line  574

	   
yyval := new Dummy_String_Token;
	   Dummy_String_Token(
yyval.all).Str := "mod " &
	                                     Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  82 =>
--#line  583

      
yyval := 
yy.value_stack(yy.tos);
   

when  83 =>
--#line  589

      
yyval := null;
   

when  84 =>
--#line  593

	   
yyval := 
yy.value_stack(yy.tos);
	

when  85 =>
--#line  599

      
yyval := 
yy.value_stack(yy.tos);
   

when  86 =>
--#line  603

	   
yyval := 
yy.value_stack(yy.tos);
	

when  87 =>
--#line  609

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "digits " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
      if 
yy.value_stack(yy.tos) /= null then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                           Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
      end if;
   

when  88 =>
--#line  621

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "delta " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  89 =>
--#line  628

	   
yyval := new Dummy_String_Token;
	   Dummy_String_Token(
yyval.all).Str := "delta " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str &
                                        " digits " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if 
yy.value_stack(yy.tos) /= null then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                           Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
      end if;
   

when  90 =>
--#line  643

      
yyval := 
yy.value_stack(yy.tos);
   

when  91 =>
--#line  647

      
yyval := 
yy.value_stack(yy.tos);
   

when  92 =>
--#line  654

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "array (" &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str & ") of " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

   

when  93 =>
--#line  666

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "array " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str &
                                        " of " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  94 =>
--#line  676

      
yyval := 
yy.value_stack(yy.tos-1);
      if Dummy_String_Token(
yyval.all).Str /= Null_Unbounded_String then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                           Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
      else
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
      end if;
   

when  95 =>
--#line  688

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;
   

when  96 =>
--#line  693

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("aliased");
   

when  100 =>
--#line  707

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';
   

when  101 =>
--#line  714

      
yyval := 
yy.value_stack(yy.tos);
   

when  102 =>
--#line  718

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ',' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
    

when  103 =>
--#line  726


      
yyval := new Dummy_String_Token;

      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if Dummy_String_Token(
yy.value_stack(yy.tos).all).Str /= Null_Unbounded_String then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                           Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
      end if;
   

when  104 =>
--#line  738

      
yyval := 
yy.value_stack(yy.tos);
   

when  105 =>
--#line  744

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;
   

when  106 =>
--#line  749

	   
yyval := 
yy.value_stack(yy.tos);
	

when  107 =>
--#line  755

      
yyval := 
yy.value_stack(yy.tos);
      Record_Type_Token(
yyval.all).Poo_Part := Poo_Record_Token_Ptr(
yy.value_stack(yy.tos-2));
   

when  108 =>
--#line  762

      
yyval := new Record_Type_Token;
      Record_Type_Token(
yyval.all).Component_List := Component_List_Token_Ptr(
yy.value_stack(yy.tos-2));
   

when  109 =>
--#line  767

	   
yyval := new Record_Type_Token;
      Record_Type_Token(
yyval.all).Null_Record := True;
	

when  110 =>
--#line  774

      
yyval := null;
   

when  111 =>
--#line  778

	   
yyval := new Poo_Record_Token;
	

when  112 =>
--#line  782

	   
yyval := new Poo_Record_Token;
	   Poo_Record_Token(
yyval.all).Is_Abstract := True;
	

when  113 =>
--#line  790

      
yyval := new Component_List_Token;
      Component_List_Token(
yyval.all).Component_Part := Component_Token_Ptr(
yy.value_stack(yy.tos-1));
      Component_List_Token(
yyval.all).Variant_Part := Variant_Token_Ptr(
yy.value_stack(yy.tos));
   

when  114 =>
--#line  796

	   
yyval := new Component_List_Token;
      Component_List_Token(
yyval.all).Variant_Part := Variant_Token_Ptr(
yy.value_stack(yy.tos-1));
	

when  115 =>
--#line  801

	   
yyval := null;
	

when  116 =>
--#line  807

      
yyval := new Component_List_Token;
      Component_List_Token(
yyval.all).Component_Part := Component_Token_Ptr(
yy.value_stack(yy.tos-1));
      Component_List_Token(
yyval.all).Variant_Part := Variant_Token_Ptr(
yy.value_stack(yy.tos));
   

when  117 =>
--#line  813

	   
yyval := new Component_List_Token;
      Component_List_Token(
yyval.all).Variant_Part := Variant_Token_Ptr(
yy.value_stack(yy.tos-1));
	

when  118 =>
--#line  818

	   
yyval := null;
	

when  119 =>
--#line  824

      
yyval := 
yy.value_stack(yy.tos);
   

when  120 =>
--#line  828

	   
yyval := 
yy.value_stack(yy.tos);
	   Component_Token(
yyval.all).Next_Component := Component_Token_Ptr(
yy.value_stack(yy.tos-2));
	

when  121 =>
--#line  835

      
yyval := null;
   

when  122 =>
--#line  839

	   
yyval := 
yy.value_stack(yy.tos-1);
	

when  123 =>
--#line  845

      
yyval := new Component_Token;
      Component_Token(
yyval.all).Line_Number := Get_Current_Line;
      Component_Token(
yyval.all).Def_ID_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-4));
      Component_Token(
yyval.all).Type_Def := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Component_Token(
yyval.all).Init := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
   

when  125 =>
--#line  856

      
yyval := 
yy.value_stack(yy.tos-1);
   

when  126 =>
--#line  862

      
yyval := 
yy.value_stack(yy.tos);
   

when  127 =>
--#line  866

	   
yyval := new Discriminant_Token;
	   Discriminant_Token(
yyval.all) := Discriminant_Token(
yy.value_stack(yy.tos).all);
	   Discriminant_Token(
yyval.all).Next_Component := Component_Token_Ptr(
yy.value_stack(yy.tos-2));
	

when  128 =>
--#line  874

      
yyval := new Discriminant_Token;
      Discriminant_Token(
yyval.all).Line_Number := Get_Current_Line;
      Discriminant_Token(
yyval.all).Def_ID_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-4));
      Discriminant_Token(
yyval.all).Type_Def := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ' ' &
                                             Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
      Discriminant_Token(
yyval.all).Init :=  Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  130 =>
--#line  886

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;
   

when  131 =>
--#line  891

	   
yyval := new Dummy_String_Token;
	   Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("access");
	

when  132 =>
--#line  898

      
yyval := new Variant_Token;
      Variant_Token(
yyval.all).Discriminant := Dummy_String_Token(
yy.value_stack(yy.tos-6).all).Str;
      Variant_Token(
yyval.all).Choice := Variant_Choice_Token_Ptr(
yy.value_stack(yy.tos-3));
   

when  133 =>
--#line  906

      
yyval := 
yy.value_stack(yy.tos);
   

when  134 =>
--#line  910

	   
yyval := 
yy.value_stack(yy.tos-1);
	   Variant_Choice_Token(
yyval.all).Next_Variant_Choice := Variant_Choice_Token_Ptr(
yy.value_stack(yy.tos));
	

when  135 =>
--#line  917

      
yyval := new Variant_Choice_Token;
      Variant_Choice_Token(
yyval.all).Line_Number := Get_Current_Line;
      Variant_Choice_Token(
yyval.all).Choice := Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str;
      Variant_Choice_Token(
yyval.all).Component_List := Component_List_Token_Ptr(
yy.value_stack(yy.tos));
   

when  136 =>
--#line  926

      
yyval := 
yy.value_stack(yy.tos);
   

when  137 =>
--#line  930

	   
yyval := 
yy.value_stack(yy.tos);
	   Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & " | " &
	                                     Dummy_String_Token(
yyval.all).Str;
	

when  138 =>
--#line  938

      
yyval := 
yy.value_stack(yy.tos);
   

when  139 =>
--#line  942

	   
yyval := 
yy.value_stack(yy.tos);
	

when  140 =>
--#line  946

	   
yyval := new Dummy_String_Token;
	   Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("others");
	

when  143 =>
--#line  957

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "access " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  144 =>
--#line  963

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "access constant " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  145 =>
--#line  969

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "access all " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  146 =>
--#line  975

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("access ");

      if 
yy.value_stack(yy.tos-2) /= null then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str &
                                           Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ' ';
      end if;

      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str &
                                        "procedure";
      if 
yy.value_stack(yy.tos) /= null then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                           Concat(Parameters_Token_Ptr(
yy.value_stack(yy.tos)).all);
      end if;
   

when  147 =>
--#line  992

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("access ");

      if 
yy.value_stack(yy.tos-4) /= null then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str &
                                           Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str & ' ';
      end if;

      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str &
                                        "function";
      if 
yy.value_stack(yy.tos-2) /= null then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                           Concat(Parameters_Token_Ptr(
yy.value_stack(yy.tos-2)).all) & ' ';
      end if;

      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str &
                                        "return " & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  148 =>
--#line  1014

      
yyval := null;
   

when  149 =>
--#line  1018

	   
yyval := new Dummy_String_Token;
	   Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("protected");
	

when  168 =>
--#line  1057

      
yyval := 
yy.value_stack(yy.tos);
   

when  169 =>
--#line  1062

	   
yyval := 
yy.value_stack(yy.tos);
	

when  170 =>
--#line  1066

	   
yyval := 
yy.value_stack(yy.tos);
	

when  171 =>
--#line  1070

	   
yyval := 
yy.value_stack(yy.tos);
	

when  172 =>
--#line  1074

      
yyval := 
yy.value_stack(yy.tos);
   

when  173 =>
--#line  1080

      
yyval := 
yy.value_stack(yy.tos);
   

when  174 =>
--#line  1084

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ''' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  175 =>
--#line  1090

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & '.' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  176 =>
--#line  1098

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Line_Number := Get_Current_Line;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  177 =>
--#line  1106

      
yyval := 
yy.value_stack(yy.tos);
   

when  178 =>
--#line  1110

     
yyval := 
yy.value_stack(yy.tos);
     Dummy_String_Token(
yyval.all).Line_Number := Get_Current_Line;
     Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & '.' &
     Dummy_String_Token(
yyval.all).Str;
   

when  179 =>
--#line  1119

      
yyval := new Def_ID_S_Token;
      Def_ID_S_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  180 =>
--#line  1124

	   
yyval := new Def_ID_S_Token;
      Def_ID_S_Token(
yyval.all).Next_ID := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-2));
      Def_ID_S_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  182 =>
--#line  1135

      
yyval := 
yy.value_stack(yy.tos);
   

when  183 =>
--#line  1141

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str & " (" &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';
   

when  184 =>
--#line  1149

     
yyval := 
yy.value_stack(yy.tos);
   

when  185 =>
--#line  1153

	  
yyval := new Dummy_String_Token;
     Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ", "
                                       & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  186 =>
--#line  1161

     
yyval := 
yy.value_stack(yy.tos);
   

when  187 =>
--#line  1165

     
yyval := 
yy.value_stack(yy.tos);
   

when  188 =>
--#line  1169

     
yyval := 
yy.value_stack(yy.tos);
   

when  190 =>
--#line  1176

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & '.' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  191 =>
--#line  1182

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & '.' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  192 =>
--#line  1188

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & '.' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  193 =>
--#line  1194

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ".all";
   

when  194 =>
--#line  1201

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ''' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  195 =>
--#line  1209

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  196 =>
--#line  1214

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("digits");
   

when  197 =>
--#line  1219

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("delta");
   

when  198 =>
--#line  1224

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("access");
   

when  199 =>
--#line  1231

      
yyval := 
yy.value_stack(yy.tos);
   

when  200 =>
--#line  1235

      
yyval := 
yy.value_stack(yy.tos);
   

when  201 =>
--#line  1239

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("null");
   

when  202 =>
--#line  1246

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';
   

when  203 =>
--#line  1251

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';
   

when  204 =>
--#line  1256

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str & " with " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';
   

when  205 =>
--#line  1262

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str &
                                        " with null record)";

   

when  206 =>
--#line  1269

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("(with null record)");

   

when  207 =>
--#line  1277

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str :=  Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ", " &
                                         Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  208 =>
--#line  1283

	   
yyval := new Dummy_String_Token;
	   Dummy_String_Token(
yyval.all).Str :=  Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ", " &
                                         Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  209 =>
--#line  1291

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & " => " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

   

when  210 =>
--#line  1300

      
yyval := 
yy.value_stack(yy.tos);
   

when  211 =>
--#line  1304

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  212 =>
--#line  1311

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  213 =>
--#line  1320

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("and");
   

when  214 =>
--#line  1325

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("or");
   

when  215 =>
--#line  1330

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("xor");
   

when  216 =>
--#line  1338

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("and then");
   

when  217 =>
--#line  1343

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("or else");
   

when  218 =>
--#line  1350

      
yyval := 
yy.value_stack(yy.tos);
   

when  219 =>
--#line  1354

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str
                                        & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str
                                        & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  220 =>
--#line  1361

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str
                                        & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str
                                        & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  221 =>
--#line  1368

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str
                                        & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str
                                        & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  222 =>
--#line  1377

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("=");
   

when  223 =>
--#line  1382

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  224 =>
--#line  1387

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("<");
   

when  225 =>
--#line  1392

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  226 =>
--#line  1397

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(">");
   

when  227 =>
--#line  1402

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String(Get_Token_Value);
   

when  228 =>
--#line  1409

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("in");
   

when  229 =>
--#line  1414

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("not in");
   

when  230 =>
--#line  1421

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  231 =>
--#line  1427

      
yyval := 
yy.value_stack(yy.tos);

   

when  232 =>
--#line  1432

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  233 =>
--#line  1441

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("+");
   

when  234 =>
--#line  1446

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("-");
   

when  235 =>
--#line  1453

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("+");
   

when  236 =>
--#line  1458

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("-");
   

when  237 =>
--#line  1463

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("&");
   

when  238 =>
--#line  1470

	   
yyval := 
yy.value_stack(yy.tos);
   

when  239 =>
--#line  1474

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  240 =>
--#line  1483

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("*");
   

when  241 =>
--#line  1488

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("/");
   

when  242 =>
--#line  1493

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("mod");
   

when  243 =>
--#line  1498

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("rem");
   

when  244 =>
--#line  1505

	   
yyval := 
yy.value_stack(yy.tos);
   

when  245 =>
--#line  1509

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "not " & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  246 =>
--#line  1514

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "abs " & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  247 =>
--#line  1519

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ' ' &
                                        " ** " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  248 =>
--#line  1528

	   
yyval := 
yy.value_stack(yy.tos);
   

when  249 =>
--#line  1532

	   
yyval := 
yy.value_stack(yy.tos);
   

when  250 =>
--#line  1536

	   
yyval := 
yy.value_stack(yy.tos);
   

when  251 =>
--#line  1540

	   
yyval := 
yy.value_stack(yy.tos);
   

when  252 =>
--#line  1544

	   
yyval := 
yy.value_stack(yy.tos);
   

when  253 =>
--#line  1550

	   
yyval := 
yy.value_stack(yy.tos);
   

when  254 =>
--#line  1554

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := '(' & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & ')';
   

when  255 =>
--#line  1561

	   
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & ''' &
      Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  326 =>
--#line  1711

      
yyval := 
yy.value_stack(yy.tos-1);

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  328 =>
--#line  1722

	   Subprog_Token(
yy.value_stack(yy.tos-2).all).Is_Abstract := True;

	   if not In_Private then
         Insert(Tree, 
yy.value_stack(yy.tos-2));
      else
         Insert(Private_Tree, 
yy.value_stack(yy.tos-2));
      end if;
	

when  329 =>
--#line  1734

      Dummy_String_Token(
yy.value_stack(yy.tos).all).Line_Number := Get_Current_Line;
      
yyval := 
yy.value_stack(yy.tos);
   

when  330 =>
--#line  1740

      
yyval := new Procedure_Decl_Token;
      Procedure_Decl_Token(
yyval.all).Line_Number := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Line_Number;
      Procedure_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
      Procedure_Decl_Token(
yyval.all).Parameters := Parameters_Token_Ptr(
yy.value_stack(yy.tos));
   

when  331 =>
--#line  1747

	   
yyval := new Function_Decl_Token;
      Function_Decl_Token(
yyval.all).Line_Number := Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Line_Number;
      Function_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str;
      Function_Decl_Token(
yyval.all).Parameters := Parameters_Token_Ptr(
yy.value_stack(yy.tos-2));
      Function_Decl_Token(
yyval.all).Return_Type := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
	

when  332 =>
--#line  1755

	   
yyval := new Function_Decl_Token;
      Function_Decl_Token(
yyval.all).Line_Number := Dummy_String_Token(
yy.value_stack(yy.tos).all).Line_Number;
      Function_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  333 =>
--#line  1763

      Dummy_String_Token(
yy.value_stack(yy.tos).all).Line_Number := Get_Current_Line;
      
yyval := 
yy.value_stack(yy.tos);
   

when  334 =>
--#line  1768

	   Dummy_String_Token(
yy.value_stack(yy.tos).all).Line_Number := Get_Current_Line;
	   
yyval := 
yy.value_stack(yy.tos);
	

when  335 =>
--#line  1775

      --No parameters return a null pointer
      
yyval := null;
   

when  336 =>
--#line  1780

	   
yyval := 
yy.value_stack(yy.tos);
	

when  337 =>
--#line  1786

	   
yyval := 
yy.value_stack(yy.tos-1);
	

when  338 =>
--#line  1792

	   
yyval := 
yy.value_stack(yy.tos);
	

when  339 =>
--#line  1796

     --Chain the parameters
	  
yyval := 
yy.value_stack(yy.tos-2);
	  Parameters_Token(
yyval.all).Next := Parameters_Token_Ptr(
yy.value_stack(yy.tos));
	

when  340 =>
--#line  1804

      
yyval := new Parameters_Token;
      Parameters_Token(
yyval.all).Line_Number := Get_Current_Line;
      Parameters_Token(
yyval.all).Def_ID_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-4));
      Parameters_Token(
yyval.all).Mode := Mode_Token_Ptr(
yy.value_stack(yy.tos-2));
      Parameters_Token(
yyval.all).Type_Param := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
      Parameters_Token(
yyval.all).Init := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  342 =>
--#line  1816

	   
yyval := new Mode_Token;
	   Mode_Token(
yyval.all).Mode := In_Mode;
	

when  343 =>
--#line  1821

	   
yyval := new Mode_Token;
	   Mode_Token(
yyval.all).Mode := In_Mode;
	

when  344 =>
--#line  1826

	   
yyval := new Mode_Token;
	   Mode_Token(
yyval.all).Mode := Out_Mode;
	

when  345 =>
--#line  1831

	   
yyval := new Mode_Token;
	   Mode_Token(
yyval.all).Mode := In_Out_Mode;
	

when  346 =>
--#line  1836

	   
yyval := new Mode_Token;
	   Mode_Token(
yyval.all).Mode := Access_Mode;
	

when  347 =>
--#line  1843

      
yyval := 
yy.value_stack(yy.tos-1);
   

when  352 =>
--#line  1861

      
yyval := new Package_Spec_Token;
      Package_Spec_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-5).all).Str;

      Insert(Tree, 
yyval);
   

when  355 =>
--#line  1873

      --We are in the private part of the package turn the flag
	   In_Private := True;
	

when  361 =>
--#line  1891

      
yyval := new Simple_Type_Token;

      if 
yy.value_stack(yy.tos-2) = null then
         Simple_Type_Token(
yyval.all).Declaration_Part :=
         Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & " private";
      else
         if Poo_Record_Token(
yy.value_stack(yy.tos-2).all).Is_Abstract then
            Simple_Type_Token(
yyval.all).Declaration_Part :=
            To_Unbounded_String("abstract tagged");
         else
            Simple_Type_Token(
yyval.all).Declaration_Part :=
            To_Unbounded_String("tagged");
         end if;
         Simple_Type_Token(
yyval.all).Declaration_Part :=
         Simple_Type_Token(
yyval.all).Declaration_Part & ' ' &
         Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str & " private";
      end if;
   

when  362 =>
--#line  1914

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;
   

when  363 =>
--#line  1919

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("limited");
   

when  364 =>
--#line  1926

      
yyval := new Use_Clause_Token;
      Use_Clause_Token(
yyval.all).Line_Number := Get_Current_Line;
      Use_Clause_Token(
yyval.all).Name_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-1));

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  365 =>
--#line  1938

      
yyval := new Use_Type_Clause_Token;
      Use_Type_Clause_Token(
yyval.all).Line_Number := Get_Current_Line;
      Use_Type_Clause_Token(
yyval.all).Name_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-1));

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  366 =>
--#line  1952

      
yyval := new Def_ID_S_Token;
      Def_ID_S_Token(
yyval.all).Line_Number := Get_Current_Line;
      Def_ID_S_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  367 =>
--#line  1958

      
yyval := new Def_ID_S_Token;
      Def_ID_S_Token(
yyval.all).Line_Number := Get_Current_Line;
      Def_ID_S_Token(
yyval.all).Next_ID := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-2));
      Def_ID_S_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  368 =>
--#line  1967

      
yyval := new Renames_Object_Token;
      Renames_Object_Token(
yyval.all).Line_Number := Def_ID_S_Token(
yy.value_stack(yy.tos-5).all).Line_Number;
      Renames_Object_Token(
yyval.all).Def_Id_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-5));
      Renames_Object_Token(
yyval.all).Qualifier := Object_Qualifier_Token_Ptr(
yy.value_stack(yy.tos-3));
      Renames_Object_Token(
yyval.all).Subtype_Ind := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Renames_Object_Token(
yyval.all).Rename := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;

   

when  369 =>
--#line  1983

	   
yyval := new Renames_Exception_Token;
	   Renames_Exception_Token(
yyval.all).Line_Number := Def_ID_S_Token(
yy.value_stack(yy.tos-4).all).Line_Number;
	   Renames_Exception_Token(
yyval.all).Def_Id_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-4));
	   Renames_Exception_Token(
yyval.all).Rename := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

	   if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;

	

when  371 =>
--#line  2000

      
yyval := new Renames_Package_Token;
      Renames_Package_Token(
yyval.all).Line_Number :=
      Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Line_Number;
      Renames_Package_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Renames_Package_Token(
yyval.all).Rename := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  372 =>
--#line  2014

      
yyval := new Renames_Subp_Token;
      Renames_Subp_Token(
yyval.all).Line_Number := Subprog_Token(
yy.value_stack(yy.tos-2).all).Line_Number;
      Renames_Subp_Token(
yyval.all).Subprog_Spec := Subprog_Token_Ptr(
yy.value_stack(yy.tos-2));
      Renames_Subp_Token(
yyval.all).Rename := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;

	

when  373 =>
--#line  2028

	   
yyval := new Renames_Generic_Package_Token;
	   Renames_Generic_Package_Token(
yyval.all).Line_Number :=
      Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Line_Number;
	   Renames_Generic_Package_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Renames_Generic_Package_Token(
yyval.all).Rename := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
	

when  374 =>
--#line  2042

      
yyval := new Renames_Generic_Subp_Token;
      Renames_Generic_Subp_Token(
yyval.all).Line_Number := Subprog_Token(
yy.value_stack(yy.tos-2).all).Line_Number;
      Renames_Generic_Subp_Token(
yyval.all).Subprog_Spec := Subprog_Token_Ptr(
yy.value_stack(yy.tos-2));
      Renames_Generic_Subp_Token(
yyval.all).Rename := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;

	

when  375 =>
--#line  2058

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  377 =>
--#line  2068

      Task_Decl_Token(
yy.value_stack(yy.tos).all).Line_Number:= Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Line_Number;
      Task_Decl_Token(
yy.value_stack(yy.tos).all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yy.value_stack(yy.tos));
      else
         Insert(Private_Tree, 
yy.value_stack(yy.tos));
      end if;

   

when  378 =>
--#line  2080

     
yyval := new Task_Type_Decl_Token'(Task_Decl_Token(
yy.value_stack(yy.tos).all) with null record);
	  Task_Type_Decl_Token(
yyval.all).Line_Number := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Line_Number;
     Task_Type_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
     Task_Type_Decl_Token(
yyval.all).Discriminant := Discriminant_Token_Ptr(
yy.value_stack(yy.tos-1));

	  if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
     end if;
	

when  379 =>
--#line  2095

	   
yyval := new Task_Decl_Token;
	

when  380 =>
--#line  2099

	   
yyval := new Task_Decl_Token;
	   Task_Decl_Token(
yyval.all).Entries := Entry_Decl_List_Ptr(
yy.value_stack(yy.tos-4));
	   Task_Decl_Token(
yyval.all).Private_Entries := Entry_Decl_List_Ptr(
yy.value_stack(yy.tos-2));
	

when  381 =>
--#line  2107

      
yyval := null;
   

when  382 =>
--#line  2111

	   
yyval := 
yy.value_stack(yy.tos-1);
	

when  385 =>
--#line  2124


      Protected_Decl_Token(
yy.value_stack(yy.tos).all).Line_Number := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Line_Number;
      Protected_Decl_Token(
yy.value_stack(yy.tos).all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

      if not In_Private then
         Insert(Tree, 
yy.value_stack(yy.tos));
      else
         Insert(Private_Tree, 
yy.value_stack(yy.tos));
      end if;

   

when  386 =>
--#line  2137

      
yyval := new Protected_Type_Decl_Token'(Protected_Decl_Token(
yy.value_stack(yy.tos).all) with null record);

	   Protected_Type_Decl_Token(
yyval.all).Line_Number :=
	   Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Line_Number;
      Protected_Type_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Protected_Type_Decl_Token(
yyval.all).Discriminant := Discriminant_Token_Ptr(
yy.value_stack(yy.tos-1));

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;

	

when  387 =>
--#line  2155

      
yyval := new Protected_Decl_Token;
      Protected_Decl_Token(
yyval.all).Prot_Op := Protected_Object_List_Ptr(
yy.value_stack(yy.tos-3));
      Protected_Decl_Token(
yyval.all).Prot_Op_Private :=
      Protected_Private_Object_List_Ptr(
yy.value_stack(yy.tos-2));

   

when  388 =>
--#line  2165

      
yyval := null;
   

when  389 =>
--#line  2169

	   
yyval := 
yy.value_stack(yy.tos);
	

when  390 =>
--#line  2175

      
yyval := null;
   

when  391 =>
--#line  2179

	   
yyval := new Protected_Object_List;
	   Protected_Object_List(
yyval.all).Item := Subprog_Token_Ptr(
yy.value_stack(yy.tos));
	   Protected_Object_List(
yyval.all).Next := Protected_Object_List_Ptr(
yy.value_stack(yy.tos-1));
	

when  392 =>
--#line  2187

      
yyval := 
yy.value_stack(yy.tos);
   

when  393 =>
--#line  2191

	   
yyval := 
yy.value_stack(yy.tos-1);
	

when  396 =>
--#line  2199

      
yyval := null;
   

when  397 =>
--#line  2203

	   
yyval := 
yy.value_stack(yy.tos);
	   Protected_Private_Object_List(
yyval.all).Next := Protected_Object_List_Ptr(
yy.value_stack(yy.tos-1));

	

when  398 =>
--#line  2211


      
yyval := new Protected_Private_Object_List;
      Protected_Private_Object_List(
yyval.all).Item := Subprog_Token_Ptr(
yy.value_stack(yy.tos));
   

when  399 =>
--#line  2217


      
yyval := new Protected_Private_Object_List;
      Protected_Private_Object_List(
yyval.all).Private_Comp := Component_Token_Ptr(
yy.value_stack(yy.tos));
   

when  406 =>
--#line  2238

      
yyval := null;
   

when  407 =>
--#line  2242

	   
yyval := new Entry_Decl_List'(Entry_Decl_Token(
yy.value_stack(yy.tos-1).all)
	         with next => Entry_Decl_List_Ptr(
yy.value_stack(yy.tos-2)));
	

when  408 =>
--#line  2250

      
yyval := new Entry_Decl_Token;
      Entry_Decl_Token(
yyval.all).Line_Number := Get_Current_Line;
      Entry_Decl_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
      Entry_Decl_Token(
yyval.all).Parameters := Parameters_Token_Ptr(
yy.value_stack(yy.tos-1));


   

when  453 =>
--#line  2374

      
yyval := new With_Clause_Token;
      With_Clause_Token(
yyval.all).Line_Number := Get_Current_Line;
      With_Clause_Token(
yyval.all).Name_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-1));

      Insert(Tree, 
yyval);
   

when  472 =>
--#line  2413

      
yyval := new Exception_Declaration_Token;
      Exception_Declaration_Token(
yyval.all).Def_ID_S := Def_ID_S_Token_Ptr(
yy.value_stack(yy.tos-3));

      if not In_Private then
         Insert(Tree , 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  484 =>
--#line  2449

      Subprog_Token(
yy.value_stack(yy.tos-1).all).Is_Generic := True;
      Subprog_Token(
yy.value_stack(yy.tos-1).all).Generic_Part := Generic_Para_Token_Ptr(
yy.value_stack(yy.tos-2));

      if not In_Private then
         Insert(Tree, 
yy.value_stack(yy.tos-1));
      else
         Insert(Private_Tree, 
yy.value_stack(yy.tos-1));
      end if;
   

when  485 =>
--#line  2460

	   Package_Spec_Token(
yy.value_stack(yy.tos-1).all).Is_Generic := True;
	   Package_Spec_Token(
yy.value_stack(yy.tos-1).all).Generic_Part := Generic_Para_Token_Ptr(
yy.value_stack(yy.tos-2));
	

when  486 =>
--#line  2467

      --No generic parameters
      
yyval := null;
   

when  487 =>
--#line  2472

	   
yyval := 
yy.value_stack(yy.tos);
	   Generic_Para_Token(
yyval.all).Next_Para := Generic_Para_Token_Ptr(
yy.value_stack(yy.tos-1));
	   Generic_Para_Token(
yyval.all).Line_Number := Get_Current_Line;
	

when  488 =>
--#line  2480

      
yyval := new Generic_Param_Token;
      Generic_Param_Token(
yyval.all).Line_Number := Get_Current_Line;
      Generic_Param_Token(
yyval.all).Def_ID_S := Parameters_Token(
yy.value_stack(yy.tos-1).all).Def_ID_S;
      Generic_Param_Token(
yyval.all).Mode := Parameters_Token(
yy.value_stack(yy.tos-1).all).Mode;
      Generic_Param_Token(
yyval.all).Type_Param := Parameters_Token(
yy.value_stack(yy.tos-1).all).Type_Param;
      Generic_Param_Token(
yyval.all).Init := Parameters_Token(
yy.value_stack(yy.tos-1).all).Init;

   

when  489 =>
--#line  2491

      
yyval := new Generic_Type_Para_Token;
      Generic_Type_Para_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str;
      Generic_Type_Para_Token(
yyval.all).Discriminant := Discriminant_Token_Ptr(
yy.value_stack(yy.tos-3));
      Generic_Type_Para_Token(
yyval.all).Type_Def := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
   

when  490 =>
--#line  2499

	   
yyval := new Generic_Proc_Para_Token;
	   Generic_Proc_Para_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str;
	   Generic_Proc_Para_Token(
yyval.all).Parameters := Parameters_Token_Ptr(
yy.value_stack(yy.tos-2));
	   Generic_Proc_Para_Token(
yyval.all).Subp_Default := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
   

when  491 =>
--#line  2507

	   
yyval := new Generic_Fun_Para_Token;
	   Generic_Fun_Para_Token(
yyval.all).Name := Dummy_String_Token(
yy.value_stack(yy.tos-5).all).Str;
	   Generic_Fun_Para_Token(
yyval.all).Parameters := Parameters_Token_Ptr(
yy.value_stack(yy.tos-4));
	   Generic_Fun_Para_Token(
yyval.all).Return_Type := Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str;
	   Generic_Fun_Para_Token(
yyval.all).Subp_Default := Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
   

when  492 =>
--#line  2517

      
yyval := new Generic_Package_Token;
      Generic_Package_Token(
yyval.all).Instanciation :=
      "with package " & Dummy_String_Token(
yy.value_stack(yy.tos-7).all).Str &
      " is new " & Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str &
      " (<>)";
   

when  493 =>
--#line  2525

	   
yyval := new Generic_Package_Token;
      Generic_Package_Token(
yyval.all).Instanciation :=
      "with package " & Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str &
      " is new " & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

   

when  495 =>
--#line  2536

      
yyval := null;
   

when  496 =>
--#line  2540

	   
yyval := 
yy.value_stack(yy.tos);
	

when  497 =>
--#line  2544

	   
yyval := new Discriminant_Token;
         Discriminant_Token(
yyval.all).Def_ID_S := new Def_ID_S_Token'(
         Ada.Finalization.Controlled with 0, To_Unbounded_String("<>"), null);
         Discriminant_Token(
yyval.all).Type_Def := Null_Unbounded_String;
         Discriminant_Token(
yyval.all).Init := Null_Unbounded_String;
   

when  498 =>
--#line  2554

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;
   

when  499 =>
--#line  2559

      
yyval := 
yy.value_stack(yy.tos);
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str;
   

when  500 =>
--#line  2564

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("(<>)");
   

when  501 =>
--#line  2571

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("(<>)");
   

when  502 =>
--#line  2576

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("range (<>)");
   

when  503 =>
--#line  2581

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("mod (<>)");
   

when  504 =>
--#line  2586

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("delta (<>)");
   

when  505 =>
--#line  2591

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("delta (<>) digits (<>)");
   

when  506 =>
--#line  2596

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := To_Unbounded_String("digits (<>)");
   

when  507 =>
--#line  2601

      
yyval := 
yy.value_stack(yy.tos);

   

when  508 =>
--#line  2606

      
yyval := 
yy.value_stack(yy.tos);
   

when  509 =>
--#line  2610

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Simple_Type_Token(
yy.value_stack(yy.tos).all).Declaration_Part;
   

when  510 =>
--#line  2615

	   
yyval := 
yy.value_stack(yy.tos);
	

when  511 =>
--#line  2621

      
yyval := 
yy.value_stack(yy.tos);
      Dummy_String_Token(
yyval.all).Str := "new " & Dummy_String_Token(
yyval.all).Str;
   

when  512 =>
--#line  2626

      
yyval := 
yy.value_stack(yy.tos-2);
      Dummy_String_Token(
yyval.all).Str := "new " & Dummy_String_Token(
yyval.all).Str &
      " with private";
   

when  513 =>
--#line  2632

      
yyval := 
yy.value_stack(yy.tos-2);
      Dummy_String_Token(
yyval.all).Str := "abstract new " & Dummy_String_Token(
yyval.all).Str
      & " with private";
   

when  514 =>
--#line  2640

      
yyval := new Generic_Subp_Inst_Token;
      Generic_Subp_Inst_Token(
yyval.all).Line_Number := Get_Current_Line;
      Generic_Subp_Inst_Token(
yyval.all).Subprog_Spec := Subprog_Token_Ptr(
yy.value_stack(yy.tos-2));
      Generic_Subp_Inst_Token(
yyval.all).Instanciation := "is " &
      Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  515 =>
--#line  2656

      
yyval := new Generic_Pkg_Inst_Token;
      Generic_Pkg_Inst_Token(
yyval.all).Line_Number := Get_Current_Line;
      Generic_Pkg_Inst_Token(
yyval.all).Instanciation := "package " &
      Dummy_String_Token(
yy.value_stack(yy.tos-2).all).Str & " is " &
      Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  516 =>
--#line  2672

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "new " & Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;
   

when  517 =>
--#line  2679

      
yyval := new Rep_Clause_Token;
      Rep_Clause_Token(
yyval.all).Line_Number := Get_Current_Line;
      Rep_Clause_Token(
yyval.all).Def := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  518 =>
--#line  2691

	   
yyval := new Rep_Clause_Token;
      Rep_Clause_Token(
yyval.all).Line_Number := Get_Current_Line;
      Rep_Clause_Token(
yyval.all).Def := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;
   

when  519 =>
--#line  2703

	   
yyval := new Rep_Clause_Token;
      Rep_Clause_Token(
yyval.all).Line_Number := Get_Current_Line;
      Rep_Clause_Token(
yyval.all).Def := Dummy_String_Token(
yy.value_stack(yy.tos).all).Str;

      if not In_Private then
         Insert(Tree, 
yyval);
      else
         Insert(Private_Tree, 
yyval);
      end if;

	

when  520 =>
--#line  2718

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "for " & Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str & " use "
                                        & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
   

when  521 =>
--#line  2727

      
yyval := new Dummy_String_Token;

      if Dummy_String_Token(
yy.value_stack(yy.tos-7).all).Str /= Null_Unbounded_String then
         Dummy_String_Token(
yyval.all).Str := "for " & Dummy_String_Token(
yy.value_stack(yy.tos-7).all).Str &
                                           " use record";
      end if;

      if Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str /= Null_Unbounded_String then
         Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                           Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str;
      end if;

      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str & " end record";

   

when  522 =>
--#line  2747

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;

   

when  523 =>
--#line  2753

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "at mod " & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

   

when  524 =>
--#line  2761

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := Null_Unbounded_String;

   

when  525 =>
--#line  2767

      
yyval := 
yy.value_stack(yy.tos-6);
      Dummy_String_Token(
yyval.all).Str := Dummy_String_Token(
yyval.all).Str & ' ' &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-5).all).Str & " at " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-3).all).Str & " range " &
                                        Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;

   

when  526 =>
--#line  2778

      
yyval := new Dummy_String_Token;
      Dummy_String_Token(
yyval.all).Str := "for " & Dummy_String_Token(
yy.value_stack(yy.tos-4).all).Str &
                                        " use at " & Dummy_String_Token(
yy.value_stack(yy.tos-1).all).Str;
   

                    when others => null;
                end case;


            -- Pop RHS states and goto next state
            yy.tos      := yy.tos - rule_length(yy.rule_id) + 1;
            if yy.tos > yy.stack_size then
                text_io.put_line(" Stack size exceeded on state_stack");
                raise yy_Tokens.syntax_error;
            end if;
            yy.state_stack(yy.tos) := goto_state(yy.state_stack(yy.tos-1) ,
                                 get_lhs_rule(yy.rule_id));

              yy.value_stack(yy.tos) := yyval;

            if yy.debug then
                reduce_debug(yy.rule_id,
                    goto_state(yy.state_stack(yy.tos - 1),
                               get_lhs_rule(yy.rule_id)));
            end if;

        end if;


    end loop;


end yyparse;

------------------------------------------------------------------
-- Routines exported by the specification
------------------------------------------------------------------

  -- ***********************************************************
  -- *                                                         *
  -- * Ada95_Parser.Run                                        *
  -- *                                                         *
  -- ***********************************************************
  procedure Run (File_Name : in STRING) is
  --| PURPOSE:
  --| Cause the Parser to execute.  This is simply a call to YYParse
  --| with a update of statistics.
  begin -- Run
    Ada95_Lexer.Reset (File_Name);
    Number_of_Errors := 0;
    begin
      YYParse;
    end;
    Ada95_Lexer.Close_Files;
  end Run;

  -- ***********************************************************
  -- *                                                         *
  -- * Ada95_Parser.Display_Results                            *
  -- *                                                         *
  -- ***********************************************************
  procedure Display_Results is
  --| PURPOSE:
  --| Display final results on all files processed so far.
  --| YOU HAVE TO FILL THIS IN
  begin -- Display_Results
    null;
  end Display_Results;

end Ada95_Parser;

