|
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: 8192 (0x2000) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Syn, seg_03eb06
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Text_Io, Lex, Error; use Text_Io, Lex, Error; package body Syn is type Token_To_Boolean_Array is array (Token) of Boolean; function Expression return Boolean; function Objet return Boolean is Ok : Boolean := True; begin case Lex.Get_Token is when Identifier => Lex.Next; when Heros => Lex.Next; when Lieu => Lex.Next; when others => Ok := False; Error.Objet (Lex.Get_Token); end case; return Ok; end Objet; function Facteur return Boolean is Ok : Boolean := True; begin case Lex.Get_Token is when Opening_Bracket => Lex.Next; Ok := Ok and Expression; if Lex.Get_Token = Closing_Bracket then Lex.Next; else Ok := False; Error.Facteur (Closing_Bracket); end if; when Identifier => Lex.Next; if Lex.Get_Token = De then Lex.Next; Ok := Ok and Objet; end if; when Number => Lex.Next; when others => Ok := False; Error.Facteur (Lex.Get_Token); end case; return Ok; end Facteur; function Terme return Boolean is First_Terme : constant Token_To_Boolean_Array := Token_To_Boolean_Array'(Multiply .. Divide => True, others => False); Ok : Boolean := True; begin Ok := Ok and Facteur; while First_Terme (Lex.Get_Token) loop case Lex.Get_Token is when Multiply => Lex.Next; Ok := Ok and Facteur; when Divide => Lex.Next; Ok := Ok and Facteur; when others => null; end case; end loop; return Ok; end Terme; function Expression return Boolean is First_Expression : constant Token_To_Boolean_Array := Token_To_Boolean_Array'(Substract .. Add => True, others => False); Ok : Boolean := True; begin Ok := Ok and Terme; while First_Expression (Lex.Get_Token) loop case Lex.Get_Token is when Add => Lex.Next; Ok := Ok and Terme; when Substract => Lex.Next; Ok := Ok and Terme; when others => null; end case; end loop; return Ok; end Expression; function Affectation return Boolean is Ok : Boolean := True; begin case Lex.Get_Token is when Identifier => Lex.Next; if Lex.Get_Token = De then Lex.Next; Ok := Ok and Objet; if Lex.Get_Token = Equal then Lex.Next; Ok := Ok and Expression; else Ok := False; Error.Affectation (Equal); end if; else Ok := False; Error.Affectation (De); end if; when Heros => Lex.Next; if Lex.Get_Token = Equal then Lex.Next; if Lex.Get_Token = Identifier then Lex.Next; else Ok := False; Error.Affectation (Lex.Get_Token); end if; else Ok := False; Error.Affectation (Equal); end if; when Lieu => Lex.Next; if Lex.Get_Token = Equal then Lex.Next; if Lex.Get_Token = Identifier then Lex.Next; else Ok := False; Error.Affectation (Lex.Get_Token); end if; else Ok := False; Error.Affectation (Equal); end if; when others => Ok := False; Error.Affectation (Lex.Get_Token); end case; return Ok; end Affectation; function Instructions_Simples return Boolean is Ok : Boolean := True; begin while not Lex.Is_At_End loop case Lex.Get_Token is when Identifier => Ok := Ok and Affectation; when Heros => Ok := Ok and Affectation; when Lieu => Ok := Ok and Affectation; when others => null; end case; end loop; return Ok; end Instructions_Simples; procedure Start is begin Lex.Initialize; if Instructions_Simples then Put_Line ("Sentence is Ok"); else Put_Line ("Sentence is false"); end if; end Start; end Syn;
nblk1=7 nid=7 hdr6=c [0x00] rec0=2a rec1=00 rec2=01 rec3=010 [0x01] rec0=1f rec1=00 rec2=02 rec3=04e [0x02] rec0=23 rec1=00 rec2=05 rec3=038 [0x03] rec0=1e rec1=00 rec2=06 rec3=02e [0x04] rec0=20 rec1=00 rec2=03 rec3=00c [0x05] rec0=1c rec1=00 rec2=04 rec3=000 [0x06] rec0=b0 rec1=ec rec2=00 rec3=026 tail 0x2173e4d4e86045c048f57 0x42a00088462060003 Free Block Chain: 0x7: 0000 00 00 01 75 80 06 20 6e 75 6c 6c 3b 06 00 15 20 ┆ u null; ┆