DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 38205 (0x953d) Types: TextFile Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧
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 => 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 => Ok := False; end case; Lex_Next_Token (Afile); 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 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); Parse_Type_Number (Afile, Synthetised_Type, Ok); --syntetised_number The_Type := Synthetised_Type; -- Numero := Synthetised_Number; when others => 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); 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_Param2.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 => 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 if (Parse_Descript_Parametres (Afile)) then null; else Ok := False; Parse_Error (Afile); end if; Ptr1 := Ptr2; if Lex_Get_Token /= L_Close then Lex_Next_Token (Afile); end if; end loop; 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; 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; if (Parse_Inst (Afile, 0.0)) then null; else Message_Error.Affiche (3); Ok := False; Parse_Error (Afile); end if; 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;