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 - download
Index: ┃ B T

⟦28a47c3a3⟧ TextFile

    Length: 39553 (0x9a81)
    Types: TextFile
    Names: »B«

Derivation

└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
    └─ ⟦d65440be7⟧ »DATA« 
        └─⟦this⟧ 

TextFile

with Text_Io;

with Pile_Lex;  
use Pile_Lex;

with Pile_Controle;

with Synt_Sem_Cal;
use Synt_Sem_Cal;

with Table_Symbole;
use Table_Symbole;

with Arbre_Abstrait_Types;
use Arbre_Abstrait_Types;


with Les_Types;  
use Les_Types;
with Flot_Controle;
with Message_Error;

package body Synt_Sem_Dds is

    Indice_Debut_Spectacle : Natural;




    function Parse_Declaration_Parametres
                (Afile : Text_Io.File_Type) return Boolean is





        Nom_Station_Type : Les_Types.Ptr_String;
        Synthetised_Number : Natural;
        Synthetised_Type : Les_Enumere_Des_Types;

        Bool : Table_Symbole.Pobject;
        Ok : Boolean := True;
        I : Natural := 1;

        Ptr1, Ptr2 : L_Arbre_Abstrait.Pnoeud;


        procedure Parse_Type_Number (Afile : Text_Io.File_Type;
                                     The_Type : in out Les_Enumere_Des_Types;
                                     Ok : in out Boolean) is
        begin
            Text_Io.Put_Line (" Dans type_number");


            case Lex_Get_Token is
                when L_Registre =>
                    Text_Io.Put_Line (" le type est registre");


                    The_Type := Les_Types.Registre;
                    Ptr2 := L_Arbre_Abstrait.Creer_Noeud
                               (Produit_Cartesien,
                                L_Arbre_Abstrait.Creer_Feuille (Registre, null),
                                Ptr1);

                when L_Fugitif =>
                    The_Type := Fugitif;
                    Ptr2 := L_Arbre_Abstrait.Creer_Noeud
                               (Produit_Cartesien,
                                L_Arbre_Abstrait.Creer_Feuille (The_Type, null),
                                Ptr1);

                when L_Discret =>
                    The_Type := Discret;
                    Ptr2 := L_Arbre_Abstrait.Creer_Noeud
                               (Produit_Cartesien,
                                L_Arbre_Abstrait.Creer_Feuille (The_Type, null),
                                Ptr1);

                when L_Temporel =>
                    The_Type := Temporel;
                    Ptr2 := L_Arbre_Abstrait.Creer_Noeud
                               (Produit_Cartesien,
                                L_Arbre_Abstrait.Creer_Feuille (The_Type, null),
                                Ptr1);

                when L_Binaire =>
                    The_Type := Binaire;
                    Ptr2 := L_Arbre_Abstrait.Creer_Noeud
                               (Produit_Cartesien,
                                L_Arbre_Abstrait.Creer_Feuille (The_Type, null),
                                Ptr1);

                when L_Reg =>
                    The_Type := Structure;

                    Nom_Station_Type := new String'(Lex_Get_Value.all);
                    Object_Inconnu := new Table_Symbole.Object (Structure);
                    Table_Symbole.Rechercher
                       (Nom_Station_Type, Object_Inconnu, Ok);
                    Ptr2 := L_Arbre_Abstrait.Creer_Noeud
                               (Produit_Cartesien,
                                Object_Inconnu.L_Arbre_Abstrait, Ptr1);
                    Message_Error.Affiche (L_Reg);
                    Message_Error.Affiche (6);



                when others =>
                    Text_Io.Put_Line (" Dans parametre error ");


                    Ok := False;
            end case;

            Lex_Next_Token (Afile);
            Text_Io.Put_Line (" on sort de Type_number ");



        end Parse_Type_Number;


        procedure Parse_Liste (Afile : Text_Io.File_Type;
                               The_Type : in out Les_Enumere_Des_Types;
                               Ok : in out Boolean) is
            Nom_Param1 : Les_Types.Ptr_String;
        begin
            Text_Io.Put_Line (" Dans la liste ");


            case Lex_Get_Token is

                when L_Virg =>
                    Lex_Next_Token (Afile);
                    if Lex_Get_Token = L_Reg then
                        Nom_Param1 := new String'(Lex_Get_Value.all);

                        Lex_Next_Token (Afile);
                        Parse_Liste (Afile, Synthetised_Type, Ok);
                        if Ok then

                            Object_Effet.Parametre (I) :=
                               new Object (Synthetised_Type);
                            Object_Effet.Parametre (I).Nom :=
                               new String'(Nom_Param1.all);


                            Object_Effet.Parametre (I).Le_Type :=
                               Synthetised_Type;

                            case Synthetised_Type is
                                when Registre =>
                                    Object_Effet.Parametre (I).Valeur := 0.0;
                                when Binaire =>
                                    Object_Effet.Parametre (I).Valeurb := True;
                                when Discret =>
                                    Object_Effet.Parametre (I).Valeurd := 0;
                                when Fugitif =>
                                    Object_Effet.Parametre (I).Valeurf := 0;
                                when Structure =>
                                    Table_Symbole.Rechercher
                                       (Nom_Param1, Object_Inconnu, Ok);
                                    Object_Effet.Parametre (I) :=
                                       Object_Inconnu;
                                    Object_Effet.Parametre (I).Nom :=
                                       new String'(Nom_Param1.all);
                                    Object_Effet.Parametre (I).Le_Type :=
                                       Synthetised_Type;


                                when others =>
                                    null;
                                    Message_Error.Affiche (4);
                            end case;

                            I := I + 1;
                        else
                            Message_Error.Affiche (4);
                            Ok := False;
                        end if;
                    else
                        Message_Error.Affiche (L_Reg);
                        Ok := False;
                    end if;

                when L_Dp =>
                    Lex_Next_Token (Afile);  
                    Text_Io.Put_Line (" Dans liste param Dp ");


                    Parse_Type_Number (Afile, Synthetised_Type, Ok);
                    --Synthetised_Number, Ok);
                    Text_Io.Put_Line (" fin parse Type param ");


                    The_Type := Synthetised_Type;
                    -- Numero := Synthetised_Number;


                when others =>
                    Text_Io.Put_Line (" Dans liste type autre ");


                    Ok := False;
                    Message_Error.Affiche (L_Dp);
            end case;

            Object_Effet.Nombre_Parametre := I - 1;

        end Parse_Liste;

        function Parse_Descript_Parametres
                    (Afile : Text_Io.File_Type) return Boolean is
            Nom_Param2 : Les_Types.Ptr_String;
        begin
            if (Lex_Get_Token = L_Reg) then  
                Nom_Param2 := new String'(Lex_Get_Value.all);
                Lex_Next_Token (Afile);  
                Text_Io.Put_Line (" dans param On va passer la liste ");



                Parse_Liste (Afile, Synthetised_Type, Ok);
                Text_Io.Put_Line (" Liste param est passe ");


                if Ok then
                    Text_Io.Put_Line (" liste Ok");


                    Object_Effet.Parametre (I) := new Object (Synthetised_Type);
                    Object_Effet.Parametre (I).Nom :=
                       new String'(Nom_Param2.all);


                    Object_Effet.Parametre (I).Le_Type := Synthetised_Type;
                    Text_Io.Put_Line (" enreg valeurs ");


                    case Synthetised_Type is
                        when Registre =>
                            Object_Effet.Parametre (I).Valeur := 0.0;
                            Text_Io.Put_Line (" enreg val reg ");


                        when Binaire =>
                            Object_Effet.Parametre (I).Valeurb := True;
                        when Discret =>
                            Object_Effet.Parametre (I).Valeurd := 0;
                        when Fugitif =>
                            Object_Effet.Parametre (I).Valeurf := 0;
                        when Structure =>
                            Object_Effet.Parametre (I) :=
                               new Object (Structure);
                            Object_Effet.Parametre (I).Nom :=
                               new String'(Nom_Param2.all);
                            Object_Effet.Parametre (I).Le_Type := Structure;

                        when others =>
                            null;
                            Message_Error.Affiche (4);

                    end case;
                    I := I + 1;
                else
                    Message_Error.Affiche (4);
                    Ok := False;
                end if;
            else
                Message_Error.Affiche (L_Reg);
                Ok := False;
            end if;

            Object_Effet.Nombre_Parametre := I - 1;
            return Ok;
        end Parse_Descript_Parametres;

    begin
        if Lex_Get_Token = L_Open then
            Lex_Next_Token (Afile);
            Ptr1 := L_Arbre_Abstrait.Creer_Feuille (Vide, null);

            while (Lex_Get_Token /= L_Close) loop

                Text_Io.Put_Line (" Dans parametre ");
                if (Parse_Descript_Parametres (Afile)) then
                    null;
                else
                    Ok := False;
                    Text_Io.Put_Line (" Dans parametre error ");

                    Parse_Error (Afile);

                end if;
                Text_Io.Put_Line
                   (" Dans parametre passe un parametre et son type ");


                Ptr1 := Ptr2;
                if Lex_Get_Token /= L_Close then
                    Lex_Next_Token (Afile);
                    Text_Io.Put_Line (" Dans parametre on avance ");

                end if;

            end loop;  
            Text_Io.Put_Line (" Dans parametre on sort du While ");


            Lex_Next_Token (Afile);

        else
            Message_Error.Affiche (L_Open);
            Ok := False;
            Parse_Error (Afile);
        end if;

        Object_Effet.L_Arbre_Abstrait := Ptr1;

        Object_Effet.Valeur_Retour := new Object (Registre);
        Object_Effet.Valeur_Retour.Valeur := 187.0;

        return Ok;

    end Parse_Declaration_Parametres;


    function Parse_Liste (Afile : Text_Io.File_Type; Atime : in Duration)
                         return Boolean is
    begin
        Lex_Next_Token (Afile);
        while (Lex_Get_Token /= L_Separ) loop


            null;
        end loop;

        return True;
    end Parse_Liste;








    function Parse_Descript_Stations
                (Afile : Text_Io.File_Type) return Boolean is

        Nom_Station_Type, Nom_Acteur : Les_Types.Ptr_String;
        Synthetised_Number : Natural;
        Synthetised_Type : Les_Enumere_Des_Types;

        Etiq_Debut : Natural := 0;  
        Object_Station : Table_Symbole.Pobject (Structure);
        Bool : Table_Symbole.Pobject;
        Ok : Boolean := True;
        I : Natural := 1;


        procedure Parse_Type_Number (Afile : Text_Io.File_Type;
                                     The_Type : in out Les_Enumere_Des_Types;
                                     Number : in out Natural;
                                     Ok : in out Boolean) is
        begin
            case Lex_Get_Token is
                when L_Fugitif =>
                    The_Type := Fugitif;
                when L_Discret =>
                    The_Type := Discret;
                when L_Temporel =>
                    The_Type := Temporel;
                when L_Binaire =>
                    The_Type := Binaire;
                when others =>
                    Message_Error.Affiche (4);
                    Ok := False;
            end case;

            Lex_Next_Token (Afile);

            if Lex_Get_Token = L_Virg then
                Lex_Next_Token (Afile);
                if Lex_Get_Token = L_Digit then
                    Number := Natural'Value (Lex_Get_Value.all);
                    Lex_Next_Token (Afile);
                else
                    Message_Error.Affiche (L_Digit);
                    Ok := False;
                end if;
            else
                Message_Error.Affiche (L_Virg);
                Ok := False;
            end if;
        end Parse_Type_Number;


        procedure Parse_Liste (Afile : Text_Io.File_Type;
                               The_Type : in out Les_Enumere_Des_Types;
                               Numero : in out Natural;
                               Ok : in out Boolean) is
        begin
            if Lex_Get_Token = L_Virg or Lex_Get_Token = L_Dp then

                case Lex_Get_Token is

                    when L_Virg =>
                        Lex_Next_Token (Afile);
                        if Lex_Get_Token = L_Reg then
                            Nom_Acteur := new String'(Lex_Get_Value.all);

                            Lex_Next_Token (Afile);
                            Parse_Liste (Afile, Synthetised_Type,
                                         Synthetised_Number, Ok);
                            if Ok then

                                Object_Station.Parametre (I) :=
                                   new Object (Synthetised_Type);
                                Object_Station.Parametre (I).Nom :=
                                   new String'(Nom_Acteur.all);
                                Object_Station.Parametre (I).Addresse :=
                                   Synthetised_Number;

                                Object_Station.Parametre (I).Le_Type :=
                                   Synthetised_Type;

                                case Synthetised_Type is
                                    when Binaire =>
                                        Object_Station.Parametre (I).Valeurb :=
                                           True;
                                    when Discret =>
                                        Object_Station.Parametre (I).Valeurd :=
                                           0;
                                    when Fugitif =>
                                        Object_Station.Parametre (I).Valeurf :=
                                           0;
                                    when Temporel =>
                                        Object_Station.Parametre (I).Valeurt :=
                                           0;
                                    when others =>
                                        null;
                                end case;

                                I := I + 1;
                            else
                                Message_Error.Affiche (4);
                                Ok := False;
                            end if;
                        else
                            Message_Error.Affiche (L_Reg);
                            Ok := False;
                        end if;

                    when L_Dp =>
                        Lex_Next_Token (Afile);
                        if Lex_Get_Token = L_Acteur then
                            Lex_Next_Token (Afile);
                            if Lex_Get_Token = L_Open then
                                Lex_Next_Token (Afile);
                                Parse_Type_Number (Afile, Synthetised_Type,
                                                   Synthetised_Number, Ok);
                                The_Type := Synthetised_Type;
                                Numero := Synthetised_Number;
                                if Ok then

                                    if Lex_Get_Token = L_Close then
                                        Lex_Next_Token (Afile);




                                    else
                                        Message_Error.Affiche (L_Close);
                                        Ok := False;
                                    end if;
                                else
                                    Message_Error.Affiche (4);
                                    Ok := False;
                                end if;
                            else
                                Message_Error.Affiche (L_Open);
                                Ok := False;
                            end if;
                        else
                            Message_Error.Affiche (L_Acteur);
                            Ok := False;
                        end if;

                    when others =>
                        Message_Error.Affiche (L_Dp);
                        Ok := False;
                end case;

            else
                Ok := False;
            end if;

            Object_Station.Nombre_Parametre := I - 1;

        end Parse_Liste;

        function Parse_Descript_Acteurs
                    (Afile : Text_Io.File_Type) return Boolean is
            Ptr1, Ptr2 : L_Arbre_Abstrait.Pnoeud;
        begin
            Ptr1 := L_Arbre_Abstrait.Creer_Feuille (Vide, null);

            while (Lex_Get_Token /= L_Fin) loop
                if (Lex_Get_Token = L_Reg) then  
                    Nom_Acteur := new String'(Lex_Get_Value.all);
                    Lex_Next_Token (Afile);
                    Ptr1 := Ptr2;
                    Parse_Liste (Afile, Synthetised_Type,
                                 Synthetised_Number, Ok);



                    if Ok then




                        Ptr2 := L_Arbre_Abstrait.Creer_Noeud
                                   (Produit_Cartesien,
                                    L_Arbre_Abstrait.Creer_Feuille
                                       (Synthetised_Type, Nom_Acteur), Ptr1);

                        Object_Station.Parametre (I) :=
                           new Object (Synthetised_Type);
                        Object_Station.Parametre (I).Nom :=
                           new String'(Nom_Acteur.all);
                        Object_Station.Parametre (I).Addresse :=
                           Synthetised_Number;

                        Object_Station.Parametre (I).Le_Type :=
                           Synthetised_Type;

                        case Synthetised_Type is
                            when Binaire =>
                                Object_Station.Parametre (I).Valeurb := True;

                            when Discret =>
                                Object_Station.Parametre (I).Valeurd := 0;
                            when Fugitif =>
                                Object_Station.Parametre (I).Valeurf := 0;
                            when Temporel =>
                                Object_Station.Parametre (I).Valeurt := 0;
                            when others =>
                                null;  
                        end case;
                        I := I + 1;
                    else
                        Message_Error.Affiche (4);
                        Ok := False;
                        Parse_Error (Afile);
                    end if;
                else
                    Message_Error.Affiche (L_Reg);
                    Ok := False;
                    Parse_Error (Afile);
                end if;

            end loop;

            Object_Station.Nombre_Parametre := I - 1;
            Object_Station.L_Arbre_Abstrait := Ptr2;



            return Ok;
        end Parse_Descript_Acteurs;

    begin
        while (Lex_Get_Token /= L_Fin) loop
            if (Lex_Get_Token = L_Reg) then
                Nom_Station_Type := new String'(Lex_Get_Value.all);

                Lex_Next_Token (Afile);
                if (Lex_Get_Token = L_Est) then  
                    Lex_Next_Token (Afile);
                    if (Lex_Get_Token = L_Collection) then
                        Lex_Next_Token (Afile);

                        Object_Station := new Table_Symbole.Object (Structure);
                        Object_Station.Nom := new String'(Nom_Station_Type.all);
                        Object_Station.Le_Type := Structure;

                        if (Parse_Descript_Acteurs (Afile)) then
                            if (Lex_Get_Token = L_Fin) then
                                Lex_Next_Token (Afile);
                                if (Lex_Get_Token = L_Reg) then  
                                    Lex_Next_Token (Afile);
                                    I := 1;


                                    Table_Symbole.Inserer
                                       (Nom_Station_Type, Object_Station, Ok);

                                    Bool := new Table_Symbole.Object (Binaire);

                                    Nom_Acteur := new String'("connexion");

                                    Table_Symbole.Recherche_Si_Parametre_De
                                       (Nom_Station_Type, Nom_Acteur, Bool, Ok);


                                    if Ok then
                                        null;
                                    else
                                        null;
                                    end if;

                                    Table_Symbole.Lire_Parametre_De
                                       (Nom_Station_Type, Nom_Acteur, Bool, Ok);
                                    if Ok then
                                        null;
                                    else
                                        Message_Error.Affiche (L_Reg);
                                        Message_Error.Affiche (6);
                                        null;
                                        Parse_Error (Afile);
                                    end if;

                                else
                                    Message_Error.Affiche (L_Reg);
                                    Ok := True;
                                    Parse_Error (Afile);
                                end if;
                            else
                                Message_Error.Affiche (L_Fin);
                                Ok := True;
                                Parse_Error (Afile);
                            end if;
                        else
                            Ok := True;
                        end if;
                    else
                        Message_Error.Affiche (L_Collection);
                        Ok := True;
                        Parse_Error (Afile);
                    end if;

                else
                    Message_Error.Affiche (L_Est);
                    Ok := False;
                    Parse_Error (Afile);
                end if;
            else
                Message_Error.Affiche (L_Reg);
                Ok := False;
                Parse_Error (Afile);
            end if;
        end loop;

        return Ok;

    end Parse_Descript_Stations;







    function Parse_Identif_Stations
                (Afile : Text_Io.File_Type) return Boolean is

        Nom_Station, Nom_Station_Type : Les_Types.Ptr_String;

        Synthetised_Number : Natural;
        Synthetised_Type : Table_Symbole.Pobject;

        Object_Station : Table_Symbole.Pobject (Structure);

        Ok : Boolean := True;



        procedure Dupliquer_Station
                     (Nom_Station : Les_Types.Ptr_String;
                      Object_Station_Type : in out Table_Symbole.Pobject;
                      Numero : Natural;
                      Ok : in out Boolean) is
            Val, Object_Stat, Object_Station : Table_Symbole.Pobject;
            Un_Acteur : Les_Types.Ptr_String := new String'("connexion");
        begin


            Object_Station := new Object (Structure);

            Object_Station.Nom := new String'(Nom_Station.all);
            Object_Station.Le_Type := Structure;  
            Object_Station.Addresse := Numero;  
            Object_Station.Nombre_Parametre :=
               Object_Station_Type.Nombre_Parametre;


            for I in 1 .. Object_Station_Type.Nombre_Parametre loop
                Object_Station.Parametre (I) :=
                   new Object (Object_Station_Type.Parametre (I).Le_Type);
                Object_Station.Parametre (I).Nom :=
                   new String'(Object_Station_Type.Parametre (I).Nom.all);

                Object_Station.Parametre (I).Le_Type :=
                   Object_Station_Type.Parametre (I).Le_Type;
                Object_Station.Parametre (I).Addresse :=
                   Object_Station_Type.Parametre (I).Addresse;
            end loop;

            Object_Station.L_Arbre_Abstrait :=
               Object_Station_Type.L_Arbre_Abstrait;
            Table_Symbole.Inserer (Nom_Station, Object_Station, Ok);
            Table_Symbole.Rechercher (Nom_Station, Object_Stat, Ok);

        end Dupliquer_Station;





        procedure Parse_Type_Number (Afile : Text_Io.File_Type;
                                     The_Type : in out Table_Symbole.Pobject;
                                     Number : in out Natural;
                                     Ok : in out Boolean) is
        begin
            case Lex_Get_Token is
                when L_Reg =>
                    Table_Symbole.Rechercher (Nom_Station_Type, The_Type, Ok);
                when others =>
                    Ok := False;
                    Message_Error.Affiche (L_Reg);
            end case;

            Lex_Next_Token (Afile);

            if Lex_Get_Token = L_Virg then
                Lex_Next_Token (Afile);
                if Lex_Get_Token = L_Digit then
                    Number := Natural'Value (Lex_Get_Value.all);
                    Lex_Next_Token (Afile);
                else
                    Message_Error.Affiche (L_Digit);
                    Ok := False;
                end if;
            else
                Message_Error.Affiche (L_Virg);
                Ok := False;
            end if;
        end Parse_Type_Number;


        procedure Parse_Liste (Afile : Text_Io.File_Type;
                               The_Type : in out Table_Symbole.Pobject;
                               Numero : in out Natural;
                               Ok : in out Boolean) is

        begin
            if Lex_Get_Token = L_Virg or Lex_Get_Token = L_Dp then

                case Lex_Get_Token is

                    when L_Virg =>
                        Lex_Next_Token (Afile);
                        if Lex_Get_Token = L_Reg then

                            Nom_Station := new String'(Lex_Get_Value.all);
                            Lex_Next_Token (Afile);  
                            Parse_Liste (Afile, Synthetised_Type,
                                         Synthetised_Number, Ok);
                            if Ok then

                                Dupliquer_Station
                                   (Nom_Station, Synthetised_Type,
                                    Synthetised_Number, Ok);




                            else
                                Message_Error.Affiche (3);
                                Ok := False;
                            end if;
                        else
                            Message_Error.Affiche (L_Reg);
                            Ok := False;
                        end if;

                    when L_Dp =>

                        Lex_Next_Token (Afile);
                        if Lex_Get_Token = L_Station then
                            Lex_Next_Token (Afile);
                            if Lex_Get_Token = L_Open then
                                Lex_Next_Token (Afile);
                                Nom_Station_Type :=
                                   new String'(Lex_Get_Value.all);
                                Parse_Type_Number (Afile, Synthetised_Type,
                                                   Synthetised_Number, Ok);
                                The_Type := Synthetised_Type;
                                Numero := Synthetised_Number;





                                if Ok then

                                    if Lex_Get_Token = L_Close then
                                        Lex_Next_Token (Afile);  
                                    else
                                        Message_Error.Affiche (L_Close);
                                        Ok := False;
                                    end if;

                                else
                                    Message_Error.Affiche (4);
                                    Ok := False;
                                end if;
                            else
                                Message_Error.Affiche (L_Open);
                                Ok := False;
                            end if;
                        else
                            Message_Error.Affiche (L_Station);
                            Ok := False;
                        end if;

                    when others =>
                        Ok := False;
                        Message_Error.Affiche (L_Dp);
                end case;

            else
                Ok := False;
            end if;
        end Parse_Liste;

    begin

        while (Lex_Get_Token /= L_Fin) loop
            if (Lex_Get_Token = L_Reg) then

                Nom_Station := new String'(Lex_Get_Value.all);
                Lex_Next_Token (Afile);
                Parse_Liste (Afile, Synthetised_Type, Synthetised_Number, Ok);
                Dupliquer_Station (Nom_Station, Synthetised_Type,
                                   Synthetised_Number, Ok);


                if Ok then
                    null;
                else
                    Message_Error.Affiche (4);
                    Ok := False;
                    Parse_Error (Afile);
                end if;

            else
                Message_Error.Affiche (L_Reg);
                Ok := False;
                Parse_Error (Afile);
            end if;

        end loop;
        return Ok;

    end Parse_Identif_Stations;







    procedure Parse_Materiel (Afile : Text_Io.File_Type) is

    begin
        if (Lex_Get_Token = L_Materiel) then
            Lex_Next_Token (Afile);
            if (Lex_Get_Token = L_Est) then
                Lex_Next_Token (Afile);
                if (Lex_Get_Token = L_Collection) then
                    Lex_Next_Token (Afile);
                    if (Parse_Descript_Stations (Afile)) then
                        if (Lex_Get_Token = L_Fin) then
                            Lex_Next_Token (Afile);
                            if (Lex_Get_Token = L_Materiel) then
                                Lex_Next_Token (Afile);
                            else
                                Message_Error.Affiche (L_Materiel);
                                Parse_Error (Afile);
                            end if;
                        else
                            Message_Error.Affiche (L_Fin);
                            Parse_Error (Afile);
                        end if;
                    else
                        Parse_Error (Afile);
                    end if;
                else
                    Message_Error.Affiche (L_Collection);
                    Parse_Error (Afile);
                end if;
            else
                Message_Error.Affiche (L_Est);
                Parse_Error (Afile);
            end if;
        else
            Message_Error.Affiche (L_Materiel);
            Parse_Error (Afile);
        end if;

    end Parse_Materiel;





    procedure Parse_Theatre (Afile : Text_Io.File_Type) is


    begin
        if (Lex_Get_Token = L_Theatre) then
            Lex_Next_Token (Afile);
            if (Lex_Get_Token = L_Est) then
                Lex_Next_Token (Afile);
                if (Lex_Get_Token = L_Collection) then
                    Lex_Next_Token (Afile);
                    if (Parse_Identif_Stations (Afile)) then
                        if (Lex_Get_Token = L_Fin) then
                            Lex_Next_Token (Afile);
                            if (Lex_Get_Token = L_Theatre) then
                                Lex_Next_Token (Afile);
                            else
                                Message_Error.Affiche (L_Theatre);
                                Parse_Error (Afile);
                            end if;
                        else
                            Message_Error.Affiche (L_Fin);
                            Parse_Error (Afile);
                        end if;
                    else
                        Parse_Error (Afile);
                    end if;
                else
                    Message_Error.Affiche (L_Collection);
                    Parse_Error (Afile);
                end if;
            else
                Message_Error.Affiche (L_Est);
                Parse_Error (Afile);
            end if;
        else
            Message_Error.Affiche (L_Theatre);
            Parse_Error (Afile);
        end if;


    end Parse_Theatre;












    function Parse_Identif_Effets (Afile : Text_Io.File_Type) return Boolean is

        Etiq_Debut : Natural := 0;  
        Element1 : Table_Symbole.Pobject (Effet);
        Element : Table_Symbole.Pobject (Fonction);
        Ok : Boolean := True;
    begin

        while (Lex_Get_Token /= L_Fin) loop

            if (Lex_Get_Token = L_Effet) then

                Lex_Next_Token (Afile);
                if (Lex_Get_Token = L_Reg) then


                    Nom := new String'(Lex_Get_Value.all);

                    Addresseur.Empiler (Stacka, Nom);



                    Object_Effet := new Table_Symbole.Object (Effet);
                    Object_Effet.Nom := new String'(Nom.all);
                    Object_Effet.Le_Type := Effet;

                    Lex_Next_Token (Afile);

                    if (Parse_Declaration_Parametres (Afile)) then
                        null;
                    else
                        Ok := False;
                        Parse_Error (Afile);

                    end if;

                    Text_Io.Put_Line
                       (" Fin passe declarartion des  parametres ");

                    Pile_Lex.Prg_Lire_Posi_Iterateur (Etiq_Debut);
                    Object_Effet.Etiquette := Etiq_Debut - 1;

                    Table_Symbole.Inserer (Nom, Object_Effet, Ok);
                    Pile_Controle.B.Empiler (Nom, Ok);
                    if Ok = False then -- si probleme au niveau de la table
                        Ok := True;  
                    end if;

                    Text_Io.Put_Line (" debut passe corps effet ");


                    if (Parse_Inst (Afile, 0.0)) then
                        null;
                    else
                        Message_Error.Affiche (3);
                        Ok := False;
                        Parse_Error (Afile);
                    end if;
                    Text_Io.Put_Line (" fin passe corps effet ");



                    Addresseur.Depiler (Stacka, Nom);
                    Pile_Controle.B.Depiler;


                else
                    Message_Error.Affiche (L_Reg);
                    Ok := False;
                    Parse_Error (Afile);
                end if;


            else
                Message_Error.Affiche (L_Effet);
                Ok := False;

            end if;

        end loop;



        return Ok;

    end Parse_Identif_Effets;









    procedure Parse_Experience (Afile : Text_Io.File_Type) is

    begin

        if (Lex_Get_Token = L_Experience) then
            Lex_Next_Token (Afile);
            if (Lex_Get_Token = L_Est) then
                Lex_Next_Token (Afile);
                if (Lex_Get_Token = L_Collection) then
                    Lex_Next_Token (Afile);
                    if (Parse_Identif_Effets (Afile)) then
                        if (Lex_Get_Token = L_Fin) then
                            Lex_Next_Token (Afile);
                            if (Lex_Get_Token = L_Experience) then
                                null;
                                Lex_Next_Token (Afile);
                            else
                                Message_Error.Affiche (L_Experience);
                                Parse_Error (Afile);
                            end if;
                        else
                            Message_Error.Affiche (L_Fin);
                            Parse_Error (Afile);
                        end if;
                    else
                        Parse_Error (Afile);
                    end if;
                else
                    Message_Error.Affiche (L_Collection);
                    Parse_Error (Afile);
                end if;
            else
                Message_Error.Affiche (L_Est);
                Parse_Error (Afile);
            end if;
        else
            Message_Error.Affiche (L_Experience);
            Parse_Error (Afile);
        end if;

    end Parse_Experience;


    procedure Parse_Spectacle (Afile : Text_Io.File_Type) is

    begin
        if (Lex_Get_Token = L_Spectacle) then
            Lex_Next_Token (Afile);  
            if (Lex_Get_Token = L_Debut) then
                Lex_Next_Token (Afile);

                Pile_Lex.Prg_Lire_Posi_Iterateur (Indice_Debut_Spectacle);

                if Parse_Inst (Afile, 0.0) = False then
                    Message_Error.Affiche (3);
                    Parse_Error (Afile);
                end if;

                if (Lex_Get_Token = L_Fin) then
                    Lex_Next_Token (Afile);  
                    if (Lex_Get_Token = L_Spectacle) then
                        Lex_Next_Token (Afile);  
                    else
                        Message_Error.Affiche (L_Spectacle);
                        Parse_Error (Afile);
                    end if;
                else
                    Message_Error.Affiche (L_Fin);
                    Parse_Error (Afile);
                end if;

            else
                Message_Error.Affiche (L_Debut);
                Parse_Error (Afile);  
            end if;
        else
            Message_Error.Affiche (L_Spectacle);
            Parse_Error (Afile);  
        end if;

    end Parse_Spectacle;





    procedure Parse_Piece_Theatre (Afile : Text_Io.File_Type) is

        Nom : Les_Types.Ptr_String;
        I : Integer := 0;
        Ok1 : Boolean;

    begin

        if Lex_Get_Token = L_Representation then

            Lex_Next_Token (Afile);
            if (Lex_Get_Token = L_Reg) then

                Nom := new String'(Lex_Get_Value.all);

                Addresseur.Empiler (Stacka, Nom);

                Object_Fonct := new Table_Symbole.Object (Fonction);
                Object_Fonct.Nom := new String'(Nom.all);

                Lex_Next_Token (Afile);


                Parse_Materiel (Afile);
                Parse_Theatre (Afile);
                Parse_Experience (Afile);
                Parse_Spectacle (Afile);
            else
                Message_Error.Affiche (L_Reg);
                Parse_Error (Afile);  
            end if;
        else
            Message_Error.Affiche (L_Representation);
            Parse_Error (Afile);
        end if;

    end Parse_Piece_Theatre;



    function Le_Debut_Du_Spectacle return Natural is
    begin
        return Indice_Debut_Spectacle;
    end Le_Debut_Du_Spectacle;

end Synt_Sem_Dds;