|
|
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 - metrics - downloadIndex: B T
Length: 39553 (0x9a81)
Types: TextFile
Names: »B«
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »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 =>
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;