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