|
|
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: 7168 (0x1c00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Lexical, seg_04cc8e, seg_04cd74
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Text_Io;
package body Lexical is
procedure Init is
Le_Fichier : String (1 .. 40);
Dernier_Car : Natural;
begin
Matrice.Chargement_Matrice (La_Matrice);
Position.Set (Lexical.La_Position, 0, 1);
Text_Io.Put_Line ("Donnez le nom du fichier de configuration");
Text_Io.Get_Line (Le_Fichier, Dernier_Car);
Text_Io.Open (File_Config, Text_Io.In_File,
Le_Fichier (1 .. Dernier_Car));
if (Text_Io.Is_Open (File_Config)) then
Text_Io.Put_Line ("Lecture du fichier de configuration");
else
Text_Io.Put_Line
("Echec d'ouverture du fichier de configuration !");
end if;
end Init;
procedure Close is
begin
Text_Io.Close (File_Config);
Text_Io.Put_Line ("Fermeture du fichier de configuration");
end Close;
function Conversion return Matrice.Nature_Char is
begin
if (Dernier_Car < Position.Get_Colonne (La_Position)) then
return Matrice.Fin;
end if;
case La_String (Position.Get_Colonne (La_Position)) is
when 'A' .. 'Z' | 'a' .. 'z' | '_' =>
return Matrice.Lettre;
when '0' .. '9' =>
return Matrice.Chiffre;
when ' ' =>
return Matrice.Espace;
when ',' | '-' | '=' | ':' | ';' =>
return Matrice.Separateur;
when '#' =>
return Matrice.Fin;
when others =>
return Matrice.Autre;
end case;
end Conversion;
procedure Lex is
Etat : Integer;
begin
Etat := 0;
Indice_Unite := 1;
Outer:
loop
Etat := Matrice.Get_Etat (La_Matrice, Etat, Conversion);
if (Etat > 0) then
Unite (Indice_Unite) :=
La_String (Position.Get_Colonne (La_Position));
Position.Incremente_Colonne (La_Position);
Indice_Unite := Indice_Unite + 1;
end if;
if (Etat = 0) then
Position.Incremente_Colonne (La_Position);
end if;
if (Etat = -3) then
Unite (Indice_Unite) :=
La_String (Position.Get_Colonne (La_Position));
Position.Incremente_Colonne (La_Position);
Indice_Unite := Indice_Unite + 1;
end if;
if (Etat < 0) then
exit Outer;
end if;
end loop Outer;
-- recherche du type de l'unite lexicale
case (Etat) is
when -1 =>
Typ_Unite := Identificateur;
when -2 =>
Typ_Unite := Entier;
when -3 =>
Typ_Unite := Separator;
when -4 =>
Typ_Unite := Erreur;
when -5 =>
Typ_Unite := Termine;
when others =>
Typ_Unite := Erreur;
end case;
-- Recherche d'un mot cle
Typ_Mot_Cle := Typ_Inconnu;
if ((Typ_Unite = Identificateur) or (Typ_Unite = Separator)) then
if (Unite (1 .. (Indice_Unite - 1)) = "CODE_SITE") then
Typ_Mot_Cle := Typ_Code_Site;
elsif (Unite (1 .. (Indice_Unite - 1)) = "PLAGES_HORAIRES") then
Typ_Mot_Cle := Typ_Plages_Horaires;
elsif (Unite (1 .. (Indice_Unite - 1)) = "LECTEURS") then
Typ_Mot_Cle := Typ_Lecteurs;
elsif (Unite (1 .. (Indice_Unite - 1)) = "FIN") then
Typ_Mot_Cle := Typ_Fin;
elsif (Unite (1 .. (Indice_Unite - 1)) = "PORTES") then
Typ_Mot_Cle := Typ_Portes;
elsif (Unite (1 .. (Indice_Unite - 1)) = "ZONES") then
Typ_Mot_Cle := Typ_Zones;
elsif (Unite (1 .. (Indice_Unite - 1)) = "PORTEURS") then
Typ_Mot_Cle := Typ_Porteurs;
elsif (Unite (1 .. (Indice_Unite - 1)) = "GROUPES") then
Typ_Mot_Cle := Typ_Groupes;
elsif (Unite (1 .. (Indice_Unite - 1)) = "ACCES") then
Typ_Mot_Cle := Typ_Acces;
elsif (Unite (1 .. (Indice_Unite - 1)) = ":") then
Typ_Mot_Cle := Typ_Double_Point;
elsif (Unite (1 .. (Indice_Unite - 1)) = ";") then
Typ_Mot_Cle := Typ_Point_Virgule;
elsif (Unite (1 .. (Indice_Unite - 1)) = ",") then
Typ_Mot_Cle := Typ_Virgule;
elsif (Unite (1 .. (Indice_Unite - 1)) = "-") then
Typ_Mot_Cle := Typ_Tiret;
elsif (Unite (1 .. (Indice_Unite - 1)) = "=") then
Typ_Mot_Cle := Typ_Egal;
else
Typ_Mot_Cle := Typ_Inconnu;
end if;
end if;
end Lex;
procedure Lex_File is
begin
Lecture_Unite_Lexicale:
loop
if (Text_Io.End_Of_File (File_Config) and
(Typ_Unite = Termine)) then
Is_Eof := True;
exit Lecture_Unite_Lexicale;
end if;
if (Typ_Unite = Termine) then
Position.Incremente_Ligne (La_Position);
Position.Set_Colonne (La_Position, 1);
Text_Io.Get_Line (File_Config, La_String, Dernier_Car);
end if;
Lex;
if (Typ_Unite /= Termine) then
exit Lecture_Unite_Lexicale;
end if;
end loop Lecture_Unite_Lexicale;
end Lex_File;
end Lexical;
nblk1=6
nid=0
hdr6=c
[0x00] rec0=21 rec1=00 rec2=01 rec3=012
[0x01] rec0=1e rec1=00 rec2=02 rec3=024
[0x02] rec0=18 rec1=00 rec2=03 rec3=026
[0x03] rec0=15 rec1=00 rec2=04 rec3=042
[0x04] rec0=13 rec1=00 rec2=05 rec3=010
[0x05] rec0=1b rec1=00 rec2=06 rec3=000
tail 0x217540caa874f6e40c71d 0x42a00088462060003