|
|
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: 38912 (0x9800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Parser, seg_031030
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
-- !!!!
-- !!!!
-- version temporaire : declarer les function en separate
-- !!!!
-- !!!!
with Text_Io;
with Lexical;
use Lexical;
package body Parser is
function Parse_Corps_Scene
return Boolean; --prototype,declaration incomplete
function Parse_Prog_Principal return Boolean is
begin
if Lexical.Get = L_Debut then
Lexical.Next;
if Parse_Corps_Scene then
if Lexical.Get = L_Fin then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Prog_Principal;
function Parse_Terme return Boolean; --prototype,declaration incomplete
function Parse_Facteur return Boolean; --prototype,declaration incomplete
function Parse_Expression return Boolean is
The_Token : Lexical.Token;
Parse_Ok : Boolean := True;
begin
if Parse_Terme then
while Lexical.Get = L_Plus or else Lexical.Get = L_Minus loop
The_Token := Lexical.Get;
case The_Token is
when L_Plus =>
Lexical.Next;
Parse_Ok := Parse_Terme;
when L_Minus =>
Text_Io.Put_Line (Token'Image (Get));
Lexical.Next;
Text_Io.Put_Line (Token'Image (Get));
Parse_Ok := Parse_Terme;
when others =>
Parse_Ok := False;
end case;
exit when not Parse_Ok;
end loop;
return Parse_Ok;
else
return False;
end if;
end Parse_Expression;
function Parse_Terme return Boolean is
The_Token : Lexical.Token;
Parse_Ok : Boolean := True;
begin
if Parse_Facteur then
while Lexical.Get = L_Star or else
Lexical.Get = L_Slash or else Lexical.Get = L_Mod loop
The_Token := Lexical.Get;
case The_Token is
when L_Star =>
Lexical.Next;
Parse_Ok := Parse_Facteur;
when L_Slash =>
Lexical.Next;
Parse_Ok := Parse_Facteur;
when L_Mod =>
Lexical.Next;
Parse_Ok := Parse_Facteur;
when others =>
Parse_Ok := False;
end case;
exit when not Parse_Ok;
end loop;
return Parse_Ok;
else
return False;
end if;
end Parse_Terme;
function Parse_Facteur return Boolean is
The_Token : Lexical.Token;
begin
The_Token := Lexical.Get;
case The_Token is
when L_Open =>
Lexical.Next;
if Parse_Expression then
if Lexical.Get = L_Close then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
when L_Id =>
Lexical.Next;
return True;
when L_Nbr =>
Lexical.Next;
return True;
when others =>
return False;
end case;
end Parse_Facteur;
function Parse_Evoluer return Boolean is
begin
if Lexical.Get = L_Id then
Lexical.Next;
if Lexical.Get = L_Point then
Lexical.Next;
if Lexical.Get = L_Id then
Lexical.Next;
if Lexical.Get = L_Jusqua then
Lexical.Next;
if Parse_Expression then
if Lexical.Get = L_En then
Lexical.Next;
if Parse_Expression then
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Evoluer;
function Parse_Modifier return Boolean is
begin
if Lexical.Get = L_Id then
Lexical.Next;
if Lexical.Get = L_Point then
Lexical.Next;
if Lexical.Get = L_Id then
Lexical.Next;
-- if Lexical.Get = L_Avec then
-- Lexical.Next;
-- !!!! prevoir token l_avec dans itf lexical
if Parse_Expression then
return True;
else
return False;
end if;
-- else
-- return False;
-- end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Modifier;
function Parse_Desactiver return Boolean is
begin
if Lexical.Get = L_Id then
Lexical.Next;
if Lexical.Get = L_Point then
Lexical.Next;
if Lexical.Get = L_Id then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Desactiver;
function Parse_Activer return Boolean is
begin
if Lexical.Get = L_Id then
Lexical.Next;
if Lexical.Get = L_Point then
Lexical.Next;
if Lexical.Get = L_Id then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Activer;
function Parse_Corps_Effet return Boolean is
The_Token : Lexical.Token;
Parse_Ok : Boolean := False;
begin
while Lexical.Get = L_Activer or else Lexical.Get = L_Desactiver or else
Lexical.Get = L_Modifier or else Lexical.Get = L_Evoluer loop
-- !!!! prevoir table des first !!!!
The_Token := Lexical.Get;
case The_Token is
when L_Activer =>
Lexical.Next;
Parse_Ok := Parse_Activer;
when L_Desactiver =>
Lexical.Next;
Parse_Ok := Parse_Desactiver;
when L_Modifier =>
Lexical.Next;
Parse_Ok := Parse_Modifier;
when L_Evoluer =>
Lexical.Next;
Parse_Ok := Parse_Evoluer;
when others =>
Parse_Ok := False;
end case;
exit when not Parse_Ok;
end loop;
return Parse_Ok;
end Parse_Corps_Effet;
function Parse_Liste_Param return Boolean is
Parse_Ok : Boolean := True;
begin
if Lexical.Get = L_Id then
Lexical.Next;
while Lexical.Get = L_Comma loop
Lexical.Next;
if Lexical.Get = L_Id then
Lexical.Next;
Parse_Ok := True;
else
Parse_Ok := False;
exit;
end if;
end loop;
return Parse_Ok;
else
return False;
end if;
end Parse_Liste_Param;
function Parse_Bloc_Param return Boolean is
begin
if Lexical.Get = L_Open then
Lexical.Next;
if Parse_Liste_Param then
if Lexical.Get = L_Close then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return True; -- autorise aucun "param" declare
end if;
end Parse_Bloc_Param;
function Parse_Effet return Boolean is
begin
if Lexical.Get = L_Id then
Lexical.Next;
if Parse_Bloc_Param then
if Lexical.Get = L_Est then
Lexical.Next;
if Parse_Corps_Effet then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Effet then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Effet;
function Parse_Faire return Boolean is
begin
if Lexical.Get = L_Id then
Lexical.Next;
return Parse_Bloc_Param;
else
return False;
end if;
end Parse_Faire;
function Parse_Repeter return Boolean is
begin
if Parse_Expression then
if Lexical.Get = L_Fois then
Lexical.Next;
if Parse_Corps_Scene then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Repeter then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Repeter;
function Parse_Sinon return Boolean is
begin
if Lexical.Get = L_Sinon then
Lexical.Next;
if Lexical.Get = L_Faire then
Lexical.Next;
return Parse_Corps_Scene;
else
return False;
end if;
else
return True; -- autorise l absence d un "sinon"
end if;
end Parse_Sinon;
function Parse_Suite_Condition return Boolean is
The_Token : Lexical.Token;
begin
The_Token := Lexical.Get;
case The_Token is
when L_Equ =>
Lexical.Next;
return Parse_Expression;
when L_Neq =>
Lexical.Next;
return Parse_Expression;
when L_Gt =>
Lexical.Next;
return Parse_Expression;
when L_Lt =>
Lexical.Next;
return Parse_Expression;
when L_Geq =>
Lexical.Next;
return Parse_Expression;
when L_Leq =>
Lexical.Next;
return Parse_Expression;
when others =>
return False;
end case;
end Parse_Suite_Condition;
function Parse_Condition return Boolean is
begin
if Parse_Expression then
return Parse_Suite_Condition;
else
return False;
end if;
end Parse_Condition;
function Parse_Si return Boolean is
begin
if Parse_Condition then
if Lexical.Get = L_Alors then
Lexical.Next;
if Lexical.Get = L_Faire then
Lexical.Next;
if Parse_Corps_Scene then
if Parse_Sinon then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Si then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Si;
function Parse_Autemps return Boolean is
begin
if Parse_Expression then
if Lexical.Get = L_Faire then
Lexical.Next;
if Parse_Corps_Scene then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Autemps then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Autemps;
function Parse_Ensequence return Boolean is
begin
if Lexical.Get = L_Faire then
Lexical.Next;
if Parse_Corps_Scene then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Ensequence then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Ensequence;
function Parse_Pendant return Boolean is
begin
if Parse_Expression then
if Lexical.Get = L_Faire then
Lexical.Next;
if Parse_Corps_Scene then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Pendant then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Pendant;
function Parse_Attendre return Boolean is
begin
return Parse_Expression;
end Parse_Attendre;
function Parse_Corps_Scene return Boolean is
The_Token : Lexical.Token;
Parse_Ok : Boolean := False;
begin
while Lexical.Get = L_Activer or else Lexical.Get = L_Desactiver or else
Lexical.Get = L_Modifier or else
Lexical.Get = L_Faire or else Lexical.Get = L_Evoluer or else
Lexical.Get = L_Id or else Lexical.Get = L_Repeter or else
Lexical.Get = L_Si or else Lexical.Get = L_Autemps or else
Lexical.Get = L_Ensequence or else
Lexical.Get = L_Pendant or else Lexical.Get = L_Attendre loop
-- !!!! prevoir table des first !!!!
The_Token := Lexical.Get;
case The_Token is
when L_Activer =>
Lexical.Next;
Parse_Ok := Parse_Activer;
when L_Desactiver =>
Lexical.Next;
Parse_Ok := Parse_Desactiver;
when L_Modifier =>
Lexical.Next;
Parse_Ok := Parse_Modifier;
when L_Evoluer =>
Lexical.Next;
Parse_Ok := Parse_Evoluer;
when L_Id =>
Lexical.Next;
if Lexical.Get = L_Affect then
Lexical.Next;
if Parse_Expression then
Parse_Ok := True;
else
Parse_Ok := False;
end if;
else
Parse_Ok := False;
end if;
when L_Faire =>
Lexical.Next;
Parse_Ok := Parse_Faire;
when L_Repeter =>
Lexical.Next;
Parse_Ok := Parse_Repeter;
when L_Si =>
Lexical.Next;
Parse_Ok := Parse_Si;
when L_Autemps =>
Lexical.Next;
Parse_Ok := Parse_Autemps;
when L_Ensequence =>
Lexical.Next;
Parse_Ok := Parse_Ensequence;
when L_Pendant =>
Lexical.Next;
Parse_Ok := Parse_Pendant;
when L_Attendre =>
Lexical.Next;
Parse_Ok := Parse_Attendre;
when others =>
Parse_Ok := False;
end case;
exit when not Parse_Ok;
end loop;
return Parse_Ok;
end Parse_Corps_Scene;
function Parse_Scene return Boolean is
begin
if Lexical.Get = L_Id then
Lexical.Next;
if Parse_Bloc_Param then
if Lexical.Get = L_Est then
Lexical.Next;
if Parse_Corps_Scene then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Scene then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Scene;
function Parse_Corps_Experience return Boolean is
The_Token : Lexical.Token;
Parse_Ok : Boolean := True;
begin
while Lexical.Get = L_Effet or else Lexical.Get = L_Scene loop
The_Token := Lexical.Get;
case The_Token is
when L_Effet =>
Lexical.Next;
Parse_Ok := Parse_Effet;
when L_Scene =>
Lexical.Next;
Parse_Ok := Parse_Scene;
when others =>
Parse_Ok := False;
end case;
exit when not Parse_Ok;
end loop;
return Parse_Ok;
end Parse_Corps_Experience;
function Parse_Bloc_Experience return Boolean is
begin
if Lexical.Get = L_Experience then
Lexical.Next;
if Lexical.Get = L_Est then
Lexical.Next;
if Parse_Corps_Experience then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Experience then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return True; -- autorise aucun bloc "experience" declare
end if;
end Parse_Bloc_Experience;
function Parse_Corps_Implantation return Boolean is
Parse_Ok : Boolean := False;
begin
while Lexical.Get = L_Id loop
Lexical.Next;
if Lexical.Get = L_Est then
Lexical.Next;
if Lexical.Get = L_Id then
Lexical.Next;
if Lexical.Get = L_En then
Lexical.Next;
if Lexical.Get = L_Nbr then
Lexical.Next;
Parse_Ok := True;
else
Parse_Ok := False;
exit;
end if;
else
Parse_Ok := False;
exit;
end if;
else
Parse_Ok := False;
exit;
end if;
else
Parse_Ok := False;
exit;
end if;
end loop;
return Parse_Ok;
end Parse_Corps_Implantation;
function Parse_Bloc_Implantation return Boolean is
begin
if Lexical.Get = L_Implantation then
Lexical.Next;
if Lexical.Get = L_Est then
Lexical.Next;
if Parse_Corps_Implantation then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Implantation then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Bloc_Implantation;
function Parse_Type return Boolean is
The_Token : Lexical.Token;
Parse_Ok : Boolean;
begin
The_Token := Lexical.Get;
case The_Token is
when L_Binaire =>
Lexical.Next;
Parse_Ok := True;
when L_Temporel =>
Lexical.Next;
Parse_Ok := True;
when L_Fugitif =>
Lexical.Next;
Parse_Ok := True;
when L_Discret =>
Lexical.Next;
Parse_Ok := True;
when others =>
Parse_Ok := False;
end case;
return Parse_Ok;
end Parse_Type;
function Parse_Liste_D_Acteurs_Types return Boolean is
Parse_Ok : Boolean := False;
begin
while Lexical.Get = L_Id loop
Lexical.Next;
if Parse_Type then
Parse_Ok := True;
else
Parse_Ok := False;
exit;
end if;
end loop;
return Parse_Ok;
end Parse_Liste_D_Acteurs_Types;
function Parse_Corps_Materiel return Boolean is
Parse_Ok : Boolean := False;
begin
while Lexical.Get = L_Categorie loop
Lexical.Next;
if Lexical.Get = L_Id then
Lexical.Next;
if Lexical.Get = L_Est then
Lexical.Next;
if Parse_Liste_D_Acteurs_Types then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Categorie then
Lexical.Next;
Parse_Ok := True;
else
Parse_Ok := False;
exit;
end if;
else
Parse_Ok := False;
exit;
end if;
else
Parse_Ok := False;
exit;
end if;
else
Parse_Ok := False;
exit;
end if;
else
Parse_Ok := False;
exit;
end if;
end loop;
return Parse_Ok;
end Parse_Corps_Materiel;
function Parse_Bloc_Materiel return Boolean is
begin
if Lexical.Get = L_Materiel then
Lexical.Next;
if Lexical.Get = L_Est then
Lexical.Next;
if Parse_Corps_Materiel then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Materiel then
Lexical.Next;
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Bloc_Materiel;
function Parse_Corps_Spectacle return Boolean is
begin
if Parse_Bloc_Materiel then
if Parse_Bloc_Implantation then
if Parse_Bloc_Experience then
if Parse_Prog_Principal then
return True;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Corps_Spectacle;
function Parse_Show return Boolean is
begin
if Lexical.Get = L_Spectacle then
Lexical.Next;
if Lexical.Get = L_Est then
Lexical.Next;
if Parse_Corps_Spectacle then
if Lexical.Get = L_Fin then
Lexical.Next;
if Lexical.Get = L_Spectacle then
Lexical.Next;
return Lexical.Get = L_Eof;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
else
return False;
end if;
end Parse_Show;
procedure Parse (File_Name : in String) is
begin
Lexical.Open (File_Name);
Lexical.Next;
if Parse_Show then
Text_Io.Put_Line ("file is ok");
else
Text_Io.Put_Line ("file is not ok");
end if;
end Parse;
end Parser;
nblk1=25
nid=25
hdr6=48
[0x00] rec0=26 rec1=00 rec2=01 rec3=02a
[0x01] rec0=01 rec1=00 rec2=24 rec3=040
[0x02] rec0=1c rec1=00 rec2=14 rec3=004
[0x03] rec0=00 rec1=00 rec2=1b rec3=02c
[0x04] rec0=1d rec1=00 rec2=23 rec3=020
[0x05] rec0=21 rec1=00 rec2=13 rec3=00a
[0x06] rec0=19 rec1=00 rec2=10 rec3=024
[0x07] rec0=21 rec1=00 rec2=0f rec3=00a
[0x08] rec0=23 rec1=00 rec2=0a rec3=028
[0x09] rec0=1e rec1=00 rec2=0d rec3=048
[0x0a] rec0=22 rec1=00 rec2=19 rec3=03c
[0x0b] rec0=13 rec1=00 rec2=11 rec3=054
[0x0c] rec0=1d rec1=00 rec2=1d rec3=018
[0x0d] rec0=19 rec1=00 rec2=1c rec3=012
[0x0e] rec0=24 rec1=00 rec2=1e rec3=022
[0x0f] rec0=06 rec1=00 rec2=1f rec3=028
[0x10] rec0=21 rec1=00 rec2=16 rec3=04c
[0x11] rec0=00 rec1=00 rec2=20 rec3=006
[0x12] rec0=1a rec1=00 rec2=07 rec3=00c
[0x13] rec0=22 rec1=00 rec2=1a rec3=006
[0x14] rec0=1f rec1=00 rec2=22 rec3=02a
[0x15] rec0=20 rec1=00 rec2=21 rec3=062
[0x16] rec0=08 rec1=00 rec2=17 rec3=000
[0x17] rec0=19 rec1=00 rec2=04 rec3=054
[0x18] rec0=1b rec1=00 rec2=12 rec3=004
[0x19] rec0=16 rec1=00 rec2=15 rec3=00a
[0x1a] rec0=1f rec1=00 rec2=18 rec3=02c
[0x1b] rec0=1e rec1=00 rec2=0e rec3=03e
[0x1c] rec0=1c rec1=00 rec2=03 rec3=00c
[0x1d] rec0=1e rec1=00 rec2=08 rec3=00a
[0x1e] rec0=25 rec1=00 rec2=09 rec3=034
[0x1f] rec0=1e rec1=00 rec2=02 rec3=004
[0x20] rec0=1f rec1=00 rec2=05 rec3=010
[0x21] rec0=1f rec1=00 rec2=06 rec3=016
[0x22] rec0=1e rec1=00 rec2=0b rec3=032
[0x23] rec0=1a rec1=00 rec2=0c rec3=000
[0x24] rec0=62 rec1=0b rec2=42 rec3=600
tail 0x2172acb4884ba57e3f81b 0x42a00088462060003
Free Block Chain:
0x25: 0000 00 00 02 3d 80 02 66 3b 02 00 14 20 20 20 20 20 ┆ = f; ┆