|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 43008 (0xa800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Syntaxic, seg_04ccc2, seg_04cd9a
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Position;
with Lexical;
with Text_Io;
with Parametres;
with Lecteur;
with L_Lecteurs;
with Porte;
with L_Portes;
with L_Zones;
with Zone;
with L_Porteurs;
with Porteur;
with L_Groupes;
with Groupe;
with Date;
with Plage;
with L_Plages_Horaires;
with Plage_Horaire;
with P_Acces;
with L_P_Access;
package body Syntaxic is
Nom_Groupe_Non_Declare_Erreur : exception;
Nom_Zone_Non_Declaree_Erreur : exception;
Nombre_Maximum_De_Plage_Est_Atteint_Erreur : exception;
Semaine_Trop_Longue_Erreur : exception;
Semaine_Trop_Courte_Erreur : exception;
Trop_De_Plages_Declarees_Erreur : exception;
Nom_Du_Porteur_Non_Declare_Erreur : exception;
Double_Declaration_Numero_De_Carte_Erreur : exception;
Double_Declaration_Nom_De_Porteur_Erreur : exception;
Double_Declaration_Nom_Zone_Erreur : exception;
Double_Declaration_Nom_Porte_Erreur : exception;
Numero_Lecteur_Non_Declare_Erreur : exception;
Double_Declaration_Nom_Groupe_Erreur : exception;
Double_Declaration_Numero_Lecteur_Erreur : exception;
Porte_Non_Declaree_Erreur : exception;
Plage_Horaire_Label_Erreur : exception;
Lecteur_Label_Erreur : exception;
Code_Site_Label_Erreur : exception;
Zones_Label_Erreur : exception;
Porteurs_Label_Erreur : exception;
Egal_Erreur : exception;
Double_Point_Erreur : exception;
Identificateur_Erreur : exception;
Identificateur_Erreur_Ou_Fin_Erreur : exception;
Fin_Erreur : exception;
Portes_Label_Erreur : exception;
Virgule_Erreur : exception;
Point_Virgule_Erreur : exception;
Virgule_Ou_Point_Virgule_Erreur : exception;
Entier_Erreur : exception;
Apb_Erreur : exception;
Veille_Erreur : exception;
Entree_Tor_Erreur : exception;
Evenement_Erreur : exception;
Groupes_Label_Erreur : exception;
Acces_Label_Erreur : exception;
Tiret_Erreur : exception;
Banner : constant String (1 .. 80) := (1 .. 80 => '-');
type Bloc_Syntaxique is (Bloc_Lecteurs, Bloc_Code_Site, Bloc_Portes,
Bloc_Zones, Bloc_Porteurs, Bloc_Groupes,
Bloc_Acces, Bloc_Plage_Horaire);
Le_Bloc_Syntaxique : Bloc_Syntaxique;
procedure Affiche_Erreur is
begin
Text_Io.Put_Line (Banner);
Text_Io.Put_Line ("Contenu de la ligne : #" &
Lexical.La_String (1 .. Lexical.Dernier_Car) & "#");
Text_Io.Put_Line ("Contenu de l'unite lexicale : #" &
Lexical.Unite (1 .. Lexical.Indice_Unite - 1) & "#");
Text_Io.Put_Line (Position.Image (Lexical.La_Position));
if (Lexical.Is_Eof = True) then
Text_Io.Put_Line ("Unexpected End_Of_File");
end if;
if (Lexical.Is_In_Bloc = True) then
Text_Io.Put_Line ("On est dans un Bloc Syntaxique : " &
Bloc_Syntaxique'Image (Le_Bloc_Syntaxique));
end if;
Text_Io.Put_Line (Banner);
Lexical.Close;
end Affiche_Erreur;
procedure Verifier_Plage_Horaire is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Plages_Horaires) then
raise Plage_Horaire_Label_Erreur;
end if;
end Verifier_Plage_Horaire;
procedure Verifier_Lecteur is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Lecteurs) then
raise Lecteur_Label_Erreur;
end if;
end Verifier_Lecteur;
procedure Verifier_Double_Point is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Double_Point) then
raise Double_Point_Erreur;
end if;
end Verifier_Double_Point;
procedure Verifier_Identificateur_Ou_Fin is
use Lexical;
begin
if (Lexical.Typ_Unite /= Lexical.Identificateur) then
raise Identificateur_Erreur_Ou_Fin_Erreur;
end if;
end Verifier_Identificateur_Ou_Fin;
procedure Verifier_Virgule is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Virgule) then
raise Virgule_Erreur;
end if;
end Verifier_Virgule;
procedure Verifier_Entier is
use Lexical;
begin
if (Lexical.Typ_Unite /= Lexical.Entier) then
raise Entier_Erreur;
end if;
end Verifier_Entier;
procedure Verifier_Point_Virgule is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Point_Virgule) then
raise Point_Virgule_Erreur;
end if;
end Verifier_Point_Virgule;
procedure Verifier_Code_Site is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Code_Site) then
raise Code_Site_Label_Erreur;
end if;
end Verifier_Code_Site;
procedure Verifier_Fin is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Fin) then
raise Fin_Erreur;
end if;
end Verifier_Fin;
procedure Verifier_Portes is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Portes) then
raise Portes_Label_Erreur;
end if;
end Verifier_Portes;
procedure Verifier_Zones is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Zones) then
raise Zones_Label_Erreur;
end if;
end Verifier_Zones;
procedure Verifier_Groupes is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Groupes) then
raise Groupes_Label_Erreur;
end if;
end Verifier_Groupes;
procedure Verifier_Acces is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Acces) then
raise Acces_Label_Erreur;
end if;
end Verifier_Acces;
procedure Verifier_Egal is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Egal) then
raise Egal_Erreur;
end if;
end Verifier_Egal;
procedure Verifier_Identificateur is
use Lexical;
begin
if (Lexical.Typ_Unite /= Lexical.Identificateur) then
raise Identificateur_Erreur;
end if;
end Verifier_Identificateur;
procedure Verifier_Virgule_Ou_Point_Virgule is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Virgule) then
raise Virgule_Ou_Point_Virgule_Erreur;
end if;
end Verifier_Virgule_Ou_Point_Virgule;
procedure Verifier_Porteurs is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Porteurs) then
raise Porteurs_Label_Erreur;
end if;
end Verifier_Porteurs;
procedure Verifier_Tiret is
use Lexical;
begin
if (Lexical.Typ_Mot_Cle /= Lexical.Typ_Tiret) then
raise Tiret_Erreur;
end if;
end Verifier_Tiret;
procedure Verifier_Apb is
use Lexical;
use Parametres;
begin
if ((Lexical.Typ_Unite /= Lexical.Identificateur) and
((Parametres.Inactif /=
Parametres.Apb'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1)) or
(Parametres.Actif /=
Parametres.Apb'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1)))))) then
raise Apb_Erreur;
end if;
end Verifier_Apb;
procedure Verifier_Veille is
use Lexical;
use Parametres;
begin
if ((Lexical.Typ_Unite /= Lexical.Identificateur) and
((Parametres.En_Veille /=
Parametres.Veille'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1))) or
(Parametres.En_Service /=
Parametres.Veille'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1))))) then
raise Veille_Erreur;
end if;
end Verifier_Veille;
procedure Verifier_Entree_Tor is
use Lexical;
use Parametres;
begin
if ((Lexical.Typ_Unite /= Lexical.Identificateur) and
((Parametres.Contact /=
Parametres.Entree_Tor'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1))) or
(Parametres.Boucle /=
Parametres.Entree_Tor'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1))) or
(Parametres.Bp /=
Parametres.Entree_Tor'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1))))) then
raise Entree_Tor_Erreur;
end if;
end Verifier_Entree_Tor;
procedure Verifier_Evenement is
use Lexical;
use Parametres;
begin
if ((Lexical.Typ_Unite /= Lexical.Identificateur) and
((Parametres.Anomalies /=
Parametres.Evenement'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1))) or
(Parametres.Tous /=
Parametres.Evenement'Value
(Lexical.Unite (1 .. Lexical.Indice_Unite - 1))))) then
raise Evenement_Erreur;
end if;
end Verifier_Evenement;
procedure Get_Lecteurs is
Lect : Lecteur.Object;
Typ_Lect : String (1 .. 30);
Dern_Char : Natural;
Numero : Natural;
Les_P : Parametres.Object;
P_Tempo : Natural;
P_Apb : Parametres.Apb;
P_Veille : Parametres.Veille;
P_Entree_Tor : Parametres.Entree_Tor;
P_Evenements : Parametres.Evenement;
use Lexical;
begin
--
-- Lecture de "LECTEURS:"
--
Lexical.Lex_File;
Verifier_Lecteur;
Lexical.Lex_File;
Verifier_Double_Point;
--
--
-- Lecture des parametres d'un lecteur
--
Le_Bloc_Syntaxique := Bloc_Lecteurs;
Lexical.Is_In_Bloc := True;
Lecture_Parametres_Lecteur:
loop
--
-- Lecture du type de lecteur
--
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle = Typ_Fin) then
exit Lecture_Parametres_Lecteur;
end if;
Verifier_Identificateur_Ou_Fin;
Typ_Lect (1 .. Lexical.Indice_Unite - 1) :=
Lexical.Unite (1 .. Lexical.Indice_Unite - 1);
Dern_Char := Lexical.Indice_Unite - 1;
Lexical.Lex_File;
Verifier_Virgule;
--
--Lecture du numero de lecteur
--
Lexical.Lex_File;
Verifier_Entier;
Numero := Natural'Value (Lexical.Unite
(1 .. Lexical.Indice_Unite - 1));
if (L_Lecteurs.Search (Liste_Lect, Numero)) then
raise Double_Declaration_Numero_Lecteur_Erreur;
end if;
Lexical.Lex_File;
Verifier_Virgule;
--
-- lecture du Tempo du lecteur
--
Lexical.Lex_File;
Verifier_Entier;
P_Tempo := Natural'Value (Unite (1 .. Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Virgule;
--
--Lecture APB du lecteur
--
Lexical.Lex_File;
Verifier_Apb;
P_Apb := Parametres.Apb'Value (Unite (1 .. Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Virgule;
--
--Lecture Veille du lecteur
--
Lexical.Lex_File;
Verifier_Veille;
P_Veille := Parametres.Veille'Value
(Unite (1 .. Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Virgule;
--
--Lecture Entree_Tor du lecteur
--
Lexical.Lex_File;
Verifier_Entree_Tor;
P_Entree_Tor := Parametres.Entree_Tor'Value
(Unite (1 .. Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Virgule;
--
-- Lecture Evenement du Lecteur
--
Lexical.Lex_File;
Verifier_Evenement;
P_Evenements := Parametres.Evenement'Value
(Unite (1 .. Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Point_Virgule;
--
-- Mise a jour de la liste
--
Les_P := Parametres.Set (P_Tempo, P_Apb, P_Veille,
P_Entree_Tor, P_Evenements);
Lecteur.Set (Lect, Typ_Lect (1 .. Dern_Char), Numero, Les_P);
L_Lecteurs.Insert_Element (Lect, Liste_Lect);
end loop Lecture_Parametres_Lecteur;
Lexical.Is_In_Bloc := False;
end Get_Lecteurs;
procedure Get_Code_Site is
begin
--
-- Lecture de "CODE_SITE:"
--
Lexical.Lex_File;
Verifier_Code_Site;
Lexical.Lex_File;
Verifier_Double_Point;
Le_Bloc_Syntaxique := Bloc_Code_Site;
--
-- Lecture du code site
--
Lexical.Lex_File;
Verifier_Entier;
Le_Site := Natural'Value (Lexical.Unite
(1 .. Lexical.Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Point_Virgule;
--
-- Lecture de "FIN"
--
Lexical.Lex_File;
Verifier_Fin;
end Get_Code_Site;
procedure Get_Portes is
Une_Porte : Porte.Object;
Nom_Porte : String (1 .. 30);
Dernier_Car, Number : Natural;
use Lexical;
begin
--
-- Lecture de "PORTES:"
--
Lexical.Lex_File;
Verifier_Portes;
Lexical.Lex_File;
Verifier_Double_Point;
--
-- Lecture des couples (porte , lecteur)
--
Le_Bloc_Syntaxique := Bloc_Portes;
Lexical.Is_In_Bloc := True;
Lecture_Porte_Lecteur:
loop
--
-- Lecture du nom de la porte
--
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle = Lexical.Typ_Fin) then
exit Lecture_Porte_Lecteur;
end if;
Verifier_Identificateur_Ou_Fin;
Dernier_Car := Indice_Unite - 1;
Nom_Porte (1 .. Dernier_Car) := Unite (1 .. Dernier_Car);
if (L_Portes.Search (Liste_Port,
Nom_Porte (1 .. Dernier_Car))) then
raise Double_Declaration_Nom_Porte_Erreur;
end if;
Lexical.Lex_File;
Verifier_Virgule;
--
--Lecture du numero de lecteur
--
Lexical.Lex_File;
Verifier_Entier;
Number := Natural'Value (Unite (1 .. Indice_Unite - 1));
if (L_Lecteurs.Search (Liste_Lect, Number) = False) then
raise Numero_Lecteur_Non_Declare_Erreur;
end if;
Lexical.Lex_File;
Verifier_Point_Virgule;
Porte.Set (Une_Porte, Nom_Porte (1 .. Dernier_Car), Number);
L_Portes.Insert_Element (Une_Porte, Liste_Port);
end loop Lecture_Porte_Lecteur;
Lexical.Is_In_Bloc := False;
end Get_Portes;
procedure Get_Zones is
Nom_Zone : String (1 .. 30);
Dernier_Car_Zone : Natural;
Nom_Porte : String (1 .. 30);
Dernier_Car_Porte : Natural;
Une_Zone : Zone.Object;
Une_Porte : Porte.Object;
use Lexical;
begin
--
-- Lecture de "ZONES:"
--
Lexical.Lex_File;
Verifier_Zones;
Lexical.Lex_File;
Verifier_Double_Point;
--
-- Lecture des zones
--
Le_Bloc_Syntaxique := Bloc_Zones;
Lexical.Is_In_Bloc := True;
Lecture_Zones:
loop
--
-- lecture nom de la zone
--
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle = Lexical.Typ_Fin) then
exit Lecture_Zones;
end if;
Verifier_Identificateur_Ou_Fin;
Dernier_Car_Zone := (Indice_Unite - 1);
Nom_Zone (1 .. Dernier_Car_Zone) :=
Unite (1 .. Dernier_Car_Zone);
Lexical.Lex_File;
Verifier_Egal;
--
-- Lecture des portes affectees a la zone
--
Lecture_Des_Portes:
loop
--
-- lecture du nom d'une porte
--
Lexical.Lex_File;
Verifier_Identificateur;
Dernier_Car_Porte := (Indice_Unite - 1);
Nom_Porte (1 .. Dernier_Car_Porte) :=
Unite (1 .. Dernier_Car_Porte);
L_Portes.Search
(Liste_Port, Nom_Porte (1 .. Dernier_Car_Porte),
Une_Porte);
if ("" = Porte.Get (Une_Porte)) then
raise Porte_Non_Declaree_Erreur;
else
Zone.Insert_Element (Une_Porte, Une_Zone);
end if;
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle =
Lexical.Typ_Point_Virgule) then
exit Lecture_Des_Portes;
end if;
Verifier_Virgule_Ou_Point_Virgule;
end loop Lecture_Des_Portes;
Zone.Set_Name (Une_Zone, Nom_Zone (1 .. Dernier_Car_Zone));
if (L_Zones.Search
(Liste_Zone, Nom_Zone (1 .. Dernier_Car_Zone)) =
False) then
L_Zones.Insert_Element (Une_Zone, Liste_Zone);
Zone.Vide_List (Une_Zone);
else
raise Double_Declaration_Nom_Zone_Erreur;
end if;
end loop Lecture_Zones;
Lexical.Is_In_Bloc := False;
end Get_Zones;
procedure Get_Porteurs is
Un_Porteur : Porteur.Object;
Dernier_Car_Porteur : Natural;
Nom_Du_Porteur : String (1 .. 30);
Numero : Natural;
use Lexical;
begin
--
-- Lecture de "PORTEURS:"
--
Lexical.Lex_File;
Verifier_Porteurs;
Lexical.Lex_File;
Verifier_Double_Point;
--
-- Lecture des couples (nom porteurs , numero carte)
--
Le_Bloc_Syntaxique := Bloc_Porteurs;
Lexical.Is_In_Bloc := True;
Lecture_Porteur_Carte:
loop
--
-- Lecture du nom du porteur
--
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle = Typ_Fin) then
exit Lecture_Porteur_Carte;
end if;
Verifier_Identificateur_Ou_Fin;
Dernier_Car_Porteur := (Indice_Unite - 1);
Nom_Du_Porteur (1 .. Dernier_Car_Porteur) :=
Unite (1 .. Dernier_Car_Porteur);
if (L_Porteurs.Search
(Liste_Porteur, Nom_Du_Porteur
(1 .. Dernier_Car_Porteur))) then
raise Double_Declaration_Nom_De_Porteur_Erreur;
end if;
Lexical.Lex_File;
Verifier_Virgule;
--
--Lecture du numero de carte
--
Lexical.Lex_File;
Verifier_Entier;
Numero := Natural'Value (Unite (1 .. Indice_Unite - 1));
if (L_Porteurs.Search (Liste_Porteur, Numero)) then
raise Double_Declaration_Numero_De_Carte_Erreur;
end if;
Lexical.Lex_File;
Verifier_Point_Virgule;
Porteur.Set (Un_Porteur, Nom_Du_Porteur
(1 .. Dernier_Car_Porteur), Numero);
L_Porteurs.Insert_Element (Un_Porteur, Liste_Porteur);
end loop Lecture_Porteur_Carte;
Lexical.Is_In_Bloc := False;
end Get_Porteurs;
procedure Get_Groupes is
Un_Groupe : Groupe.Object;
Un_Porteur : Porteur.Object;
Dernier_Car_Groupe : Natural;
Dernier_Car_Porteur : Natural;
use Lexical;
begin
--
-- Lecture de "GROUPES:"
--
Lexical.Lex_File;
Verifier_Groupes;
Lexical.Lex_File;
Verifier_Double_Point;
--
-- Lecture des noms de groupe
--
Le_Bloc_Syntaxique := Bloc_Groupes;
Lexical.Is_In_Bloc := True;
Lecture_Groupes:
loop
--
-- lecture nom du groupe
--
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle = Lexical.Typ_Fin) then
exit Lecture_Groupes;
end if;
Verifier_Identificateur_Ou_Fin;
Dernier_Car_Groupe := Indice_Unite - 1;
Groupe.Set (Un_Groupe, Unite (1 .. Dernier_Car_Groupe));
if (L_Groupes.Search
(L_G => Liste_G,
Nom_Groupe => Unite (1 .. Dernier_Car_Groupe))) then
raise Double_Declaration_Nom_Groupe_Erreur;
end if;
Lexical.Lex_File;
Verifier_Egal;
--
-- Lecture des portes affectees a la zone
--
Lecture_Des_Porteurs:
loop
--
-- lecture du nom d'un porteur
--
Lexical.Lex_File;
Verifier_Identificateur;
Dernier_Car_Porteur := Indice_Unite - 1;
Un_Porteur := L_Porteurs.Search
(Liste_Porteur,
Unite (1 .. Dernier_Car_Porteur));
if (Porteur.Get (Un_Porteur) = "") then
raise Nom_Du_Porteur_Non_Declare_Erreur;
end if;
Groupe.Insert_Element (Un_Porteur, Un_Groupe);
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle =
Lexical.Typ_Point_Virgule) then
exit Lecture_Des_Porteurs;
end if;
Verifier_Virgule_Ou_Point_Virgule;
end loop Lecture_Des_Porteurs;
L_Groupes.Insert_Element (Un_Groupe, Liste_G);
Groupe.Vide_List (Un_Groupe);
end loop Lecture_Groupes;
Lexical.Is_In_Bloc := False;
end Get_Groupes;
procedure Get_Horaire (A_Date : in out Date.Horaire) is
Deb, Fin : Natural;
begin
Lexical.Lex_File;
Verifier_Entier;
Deb := Natural'Value (Lexical.Unite (1 .. Lexical.Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Double_Point;
Lexical.Lex_File;
Verifier_Entier;
Fin := Natural'Value (Lexical.Unite (1 .. Lexical.Indice_Unite - 1));
A_Date := Date.Set (Deb, Fin);
end Get_Horaire;
procedure Get_Plage_Horaire is
Une_Plage : Plage.Object;
Une_Plage_Horaire : Plage_Horaire.Object;
Der_Car_Zone : Natural;
N_Zone : String (1 .. 30);
Numero_Plage : Natural range 1 .. 7;
Max_Plage_Horaire_Counter :
Natural range 0 .. 3; -- 3 declenche une exception
Deb1, Fin1, Deb2, Fin2 : Date.Horaire;
S_Zone1, S_Zone2, S_Zone3 : Plage.Sous_Zone;
Jours_Valides : Plage.Semaine;
use Lexical;
begin
--
-- Lecture de "PLAGE_HORAIRE:"
--
Lexical.Lex_File;
Verifier_Plage_Horaire;
Lexical.Lex_File;
Verifier_Double_Point;
--
-- Lecture du nom de zone + groupe + plage horaire
--
Le_Bloc_Syntaxique := Bloc_Plage_Horaire;
Lexical.Is_In_Bloc := True;
Lexical.Lex_File;
-- utilise pour la lecture de la 1ere zone uniquement !
Lecture_Zone_Numero:
loop
--
-- Lecture de la zone avant la boucle ou avant la fin de boucle !
--
if (Lexical.Typ_Mot_Cle = Lexical.Typ_Fin) then
exit Lecture_Zone_Numero;
end if;
Verifier_Identificateur_Ou_Fin;
Der_Car_Zone := Indice_Unite - 1;
N_Zone (1 .. Der_Car_Zone) := Unite (1 .. Der_Car_Zone);
if (L_Zones.Search (Liste_Zone, N_Zone (1 .. Der_Car_Zone)) =
False) then
raise Nom_Zone_Non_Declaree_Erreur;
end if;
Lexical.Lex_File;
Verifier_Egal;
--
-- Lecture du numero de plage associe a la zone
--
Lexical.Lex_File;
Verifier_Entier;
Numero_Plage :=
Natural'Value (Lexical.Unite
(1 .. Lexical.Indice_Unite - 1));
Lexical.Lex_File;
Verifier_Egal;
Max_Plage_Horaire_Counter := 0;
S_Zone1 := Plage.Zero;
S_Zone2 := Plage.Zero;
S_Zone3 := Plage.Zero;
Lecture_Plage_Horaire:
loop
if (Max_Plage_Horaire_Counter = 3) then
raise Trop_De_Plages_Declarees_Erreur;
end if;
Get_Horaire (Deb1); --1
Lexical.Lex_File;
Verifier_Tiret;
Get_Horaire (Fin1); --2
Lexical.Lex_File;
Verifier_Virgule;
Get_Horaire (Deb2); --3
Lexical.Lex_File;
Verifier_Tiret;
Get_Horaire (Fin2); --4
Lexical.Lex_File;
Verifier_Double_Point;
--
-- Lecture de la liste de jour associe a Zone + Numero de plage
--
Lexical.Lex_File;
Verifier_Identificateur;
if ((Indice_Unite - 1) > 7) then
raise Semaine_Trop_Longue_Erreur;
elsif ((Indice_Unite - 1) < 7) then
raise Semaine_Trop_Courte_Erreur;
end if;
Jours_Valides (1 .. 7) := Unite (1 .. 7);
--
-- Mise a jour d'une sous_zone
--
if (Max_Plage_Horaire_Counter = 0) then
S_Zone1 := Plage.Set (Deb1, Fin1, Deb2, Fin2,
Jours_Valides (1 .. 7));
elsif (Max_Plage_Horaire_Counter = 1) then
S_Zone2 := Plage.Set (Deb1, Fin1, Deb2, Fin2,
Jours_Valides (1 .. 7));
elsif (Max_Plage_Horaire_Counter = 2) then
S_Zone3 := Plage.Set (Deb1, Fin1, Deb2, Fin2,
Jours_Valides (1 .. 7));
end if;
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle =
Lexical.Typ_Point_Virgule) then
exit Lecture_Plage_Horaire;
end if;
Verifier_Virgule_Ou_Point_Virgule;
Max_Plage_Horaire_Counter :=
Max_Plage_Horaire_Counter + 1;
end loop Lecture_Plage_Horaire;
Une_Plage := Plage.Set
(Numero_Plage, S_Zone1, S_Zone2, S_Zone3);
Une_Plage_Horaire := Plage_Horaire.Set
(N_Zone (1 .. Der_Car_Zone),
Numero_Plage, Une_Plage);
L_Plages_Horaires.Insert_Element (Une_Plage_Horaire, List_P_H);
--
-- Lecture d'une nouvelle zone ou bien du mot FIN
--
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle = Lexical.Typ_Fin) then
exit Lecture_Zone_Numero;
end if;
end loop Lecture_Zone_Numero;
Lexical.Is_In_Bloc := False;
exception
when Constraint_Error =>
raise Nombre_Maximum_De_Plage_Est_Atteint_Erreur;
end Get_Plage_Horaire;
procedure Get_Acces is
Un_Acces : P_Acces.Object;
N_Zone : String (1 .. 30);
N_Groupe : String (1 .. 30);
Der_Car_Zone : Natural;
Der_Car_G : Natural;
Numero_P : Natural;
use Lexical;
begin
--
-- Lecture de "ACCES:"
--
Lexical.Lex_File;
Verifier_Acces;
Lexical.Lex_File;
Verifier_Double_Point;
--
-- Lecture (nom zone, nom groupe, numero plage)
--
Le_Bloc_Syntaxique := Bloc_Acces;
Lexical.Is_In_Bloc := True;
Lecture_Acces:
loop
--
-- Lecture du nom de zone
--
Lexical.Lex_File;
if (Lexical.Typ_Mot_Cle = Typ_Fin) then
exit Lecture_Acces;
end if;
Verifier_Identificateur_Ou_Fin;
Der_Car_Zone := Indice_Unite - 1;
N_Zone (1 .. Der_Car_Zone) := Unite (1 .. Der_Car_Zone);
if (L_Zones.Search (Liste_Zone, N_Zone (1 .. Der_Car_Zone)) =
False) then
raise Nom_Zone_Non_Declaree_Erreur;
end if;
Lexical.Lex_File;
Verifier_Egal;
--
--Lecture du nom de groupe
--
Lexical.Lex_File;
Verifier_Identificateur;
Der_Car_G := Indice_Unite - 1;
N_Groupe (1 .. Der_Car_G) := Unite (1 .. Der_Car_G);
if (L_Groupes.Search (Liste_G, N_Groupe (1 .. Der_Car_G)) =
False) then
raise Nom_Groupe_Non_Declare_Erreur;
end if;
Lexical.Lex_File;
Verifier_Egal;
--
-- Lecture du numero de plage
--
Lexical.Lex_File;
Verifier_Entier;
Numero_P := Natural'Value (Unite (1 .. (Indice_Unite - 1)));
if (L_Porteurs.Search (Liste_Porteur, Numero_P)) then
raise Double_Declaration_Numero_De_Carte_Erreur;
end if;
Lexical.Lex_File;
Verifier_Point_Virgule;
Un_Acces := P_Acces.Set (N_Zone (1 .. Der_Car_Zone),
N_Groupe (1 .. Der_Car_G),
Der_Car_G, Der_Car_Zone, Numero_P);
L_P_Access.Insert_Element (Un_Acces, Liste_L_A);
end loop Lecture_Acces;
Lexical.Is_In_Bloc := False;
end Get_Acces;
procedure Charge_Config is
begin
Lexical.Init;
Get_Lecteurs;
Get_Code_Site;
Get_Portes;
Get_Zones;
Get_Porteurs;
Get_Groupes;
Get_Plage_Horaire;
Get_Acces;
Lexical.Close;
exception
when Nom_Groupe_Non_Declare_Erreur =>
Text_Io.Put_Line ("Nom_Groupe_Non_Declare_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Nom_Zone_Non_Declaree_Erreur =>
Text_Io.Put_Line ("Nom_Zone_Non_Declaree_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Nombre_Maximum_De_Plage_Est_Atteint_Erreur =>
Text_Io.Put_Line ("Nombre_Maximum_De_Plage_Est_Atteint");
Affiche_Erreur;
raise Syntax_Error;
when Semaine_Trop_Longue_Erreur =>
Text_Io.Put_Line ("Semaine_Trop_Longue_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Semaine_Trop_Courte_Erreur =>
Text_Io.Put_Line ("Semaine_Trop_Courte_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Trop_De_Plages_Declarees_Erreur =>
Text_Io.Put_Line ("Trop_De_Plages_Declarees_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Nom_Du_Porteur_Non_Declare_Erreur =>
Text_Io.Put_Line ("Nom_Du_Porteur_Non_Declare_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Double_Declaration_Nom_De_Porteur_Erreur =>
Text_Io.Put_Line ("Double_Declaration_Nom_De_Porteur_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Double_Declaration_Numero_De_Carte_Erreur =>
Text_Io.Put_Line ("Double_Declaration_Numero_De_Carte_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Double_Declaration_Nom_Zone_Erreur =>
Text_Io.Put_Line ("Double_Declaration_Nom_Zone_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Double_Declaration_Nom_Porte_Erreur =>
Text_Io.Put_Line ("Double_declaration_Nom_Porte_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Double_Declaration_Nom_Groupe_Erreur =>
Text_Io.Put_Line ("Double_declaration_Nom_Groupe_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Numero_Lecteur_Non_Declare_Erreur =>
Text_Io.Put_Line ("Numero_Lecteur_non_declare_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Double_Declaration_Numero_Lecteur_Erreur =>
Text_Io.Put_Line ("double_declaration_numero_lecteur_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Porte_Non_Declaree_Erreur =>
Text_Io.Put_Line ("Porte_Non_Declaree_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Plage_Horaire_Label_Erreur =>
Text_Io.Put_Line ("Plage_Horaire_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Lecteur_Label_Erreur =>
Text_Io.Put_Line ("Lecteur_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Code_Site_Label_Erreur =>
Text_Io.Put_Line ("Code_Site_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Zones_Label_Erreur =>
Text_Io.Put_Line ("Zones_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Porteurs_Label_Erreur =>
Text_Io.Put_Line ("Porteurs_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Portes_Label_Erreur =>
Text_Io.Put_Line ("Portes_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Egal_Erreur =>
Text_Io.Put_Line ("Egal_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Double_Point_Erreur =>
Text_Io.Put_Line ("Double_Point_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Identificateur_Erreur =>
Text_Io.Put_Line ("Identificateur_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Identificateur_Erreur_Ou_Fin_Erreur =>
Text_Io.Put_Line ("Identificateur_Erreur_Ou_Fin_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Fin_Erreur =>
Text_Io.Put_Line ("Fin_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Virgule_Erreur =>
Text_Io.Put_Line ("Virgule_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Point_Virgule_Erreur =>
Text_Io.Put_Line ("Point_Virgule_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Virgule_Ou_Point_Virgule_Erreur =>
Text_Io.Put_Line ("Virgule_Or_Point_Virgule_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Entier_Erreur =>
Text_Io.Put_Line ("Entier_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Apb_Erreur =>
Text_Io.Put_Line ("Apb_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Veille_Erreur =>
Text_Io.Put_Line ("Veille_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Entree_Tor_Erreur =>
Text_Io.Put_Line ("Entree_Tor_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Evenement_Erreur =>
Text_Io.Put_Line ("Evenement_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Groupes_Label_Erreur =>
Text_Io.Put_Line ("Groupe_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Acces_Label_Erreur =>
Text_Io.Put_Line ("acces_Label_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when Constraint_Error =>
Text_Io.Put_Line ("Constraint_Error : Un mot cle est attendu");
Affiche_Erreur;
raise Syntax_Error;
when Tiret_Erreur =>
Text_Io.Put_Line ("Tiret_Erreur");
Affiche_Erreur;
raise Syntax_Error;
when others =>
raise Syntax_Error;
end Charge_Config;
end Syntaxic;
nblk1=29
nid=0
hdr6=52
[0x00] rec0=25 rec1=00 rec2=01 rec3=004
[0x01] rec0=1a rec1=00 rec2=02 rec3=012
[0x02] rec0=13 rec1=00 rec2=03 rec3=04c
[0x03] rec0=23 rec1=00 rec2=04 rec3=07a
[0x04] rec0=23 rec1=00 rec2=05 rec3=034
[0x05] rec0=26 rec1=00 rec2=06 rec3=01c
[0x06] rec0=23 rec1=00 rec2=07 rec3=000
[0x07] rec0=1f rec1=00 rec2=08 rec3=042
[0x08] rec0=1a rec1=00 rec2=09 rec3=034
[0x09] rec0=1e rec1=00 rec2=0a rec3=042
[0x0a] rec0=1e rec1=00 rec2=0b rec3=014
[0x0b] rec0=18 rec1=00 rec2=0c rec3=022
[0x0c] rec0=1a rec1=00 rec2=0d rec3=01a
[0x0d] rec0=1d rec1=00 rec2=0e rec3=030
[0x0e] rec0=25 rec1=00 rec2=0f rec3=038
[0x0f] rec0=16 rec1=00 rec2=10 rec3=000
[0x10] rec0=24 rec1=00 rec2=11 rec3=00c
[0x11] rec0=18 rec1=00 rec2=12 rec3=076
[0x12] rec0=13 rec1=00 rec2=13 rec3=066
[0x13] rec0=21 rec1=00 rec2=14 rec3=01a
[0x14] rec0=18 rec1=00 rec2=15 rec3=02a
[0x15] rec0=1c rec1=00 rec2=16 rec3=024
[0x16] rec0=1a rec1=00 rec2=17 rec3=030
[0x17] rec0=15 rec1=00 rec2=18 rec3=01e
[0x18] rec0=1c rec1=00 rec2=19 rec3=038
[0x19] rec0=1d rec1=00 rec2=1a rec3=070
[0x1a] rec0=17 rec1=00 rec2=1b rec3=018
[0x1b] rec0=1b rec1=00 rec2=1c rec3=048
[0x1c] rec0=13 rec1=00 rec2=1d rec3=00e
[0x1d] rec0=12 rec1=00 rec2=1e rec3=01c
[0x1e] rec0=1d rec1=00 rec2=1f rec3=01c
[0x1f] rec0=1d rec1=00 rec2=20 rec3=056
[0x20] rec0=1c rec1=00 rec2=21 rec3=03e
[0x21] rec0=1f rec1=00 rec2=22 rec3=03e
[0x22] rec0=16 rec1=00 rec2=23 rec3=084
[0x23] rec0=16 rec1=00 rec2=24 rec3=016
[0x24] rec0=17 rec1=00 rec2=25 rec3=00c
[0x25] rec0=1a rec1=00 rec2=26 rec3=02a
[0x26] rec0=19 rec1=00 rec2=27 rec3=056
[0x27] rec0=1b rec1=00 rec2=28 rec3=00a
[0x28] rec0=0a rec1=00 rec2=29 rec3=000
tail 0x217540d3a874f6eb229e1 0x42a00088462060003