|
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 - 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; ┆