|
|
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: 14336 (0x3800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Scanner, seg_0381ee
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Bounded_String;
with Fichier_Io;
with Reserved_Word;
package body Scanner is
procedure Open (Name : in Standard.String) is
begin
Fichier_Io.Open (Fichier_Source, Name);
Scanner.Next;
end Open;
procedure Close is
begin
Fichier_Io.Close (Fichier_Source);
end Close;
function At_End return Boolean is
begin
return Fichier_Io.At_End (Fichier_Source);
end At_End;
function At_Line return Boolean is
begin
return Fichier_Io.At_Line (Fichier_Source);
end At_Line;
procedure Next is
C : Character;
State : Etat;
begin
Bounded_String.Free (Current_Value);
if Fichier_Io.At_End (Fichier_Source) then
Current_Token := Token'(Eof);
else
State := Etat'(Normal);
loop
if Fichier_Io.At_End (Fichier_Source) then
C := Ascii.Eot;
else
C := Fichier_Io.Get (Fichier_Source);
end if;
case State is
when Normal =>
case C is
when Ascii.Eot =>
Current_Token := Token'(Eof);
State := Etat'(Found);
when ' ' | Ascii.Cr | Ascii.Ht =>
null;
when '<' =>
Bounded_String.Copy (Current_Value, "Inf");
Current_Token := Token'(Binary);
State := Etat'(Less);
when '>' =>
Bounded_String.Copy (Current_Value, "Sup");
Current_Token := Token'(Binary);
State := Etat'(Greater);
when '=' =>
Bounded_String.Copy (Current_Value, "Egal");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '{' =>
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(Open_Brace);
State := Etat'(Found);
when '}' =>
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(Close_Brace);
State := Etat'(Found);
when '(' =>
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(Open_Parenthesis);
State := Etat'(Found);
when ')' =>
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(Close_Parenthesis);
State := Etat'(Found);
when '.' =>
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(Point);
State := Etat'(Found);
when '+' =>
Bounded_String.Copy (Current_Value, "Plus");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '-' =>
Bounded_String.Copy (Current_Value, "Moins");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '*' =>
Bounded_String.Copy (Current_Value, "Mul");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '/' =>
Bounded_String.Copy (Current_Value, "Div");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '&' =>
Bounded_String.Copy (Current_Value, "Et");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '|' =>
Bounded_String.Copy (Current_Value, "Ou");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '#' =>
Bounded_String.Copy (Current_Value, "Eou");
Current_Token := Token'(Binary);
State := Etat'(Found);
when '"' =>
State := Etat'(String);
when '[' =>
State := Etat'(Comment);
when others =>
if C in 'a' .. 'z' or else
C in 'A' .. 'Z' or else C = '_' then
Bounded_String.Append (Current_Value, C);
State := Etat'(Identifier);
elsif C in '0' .. '9' then
Bounded_String.Append (Current_Value, C);
State := Etat'(Number);
else
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(Unknown);
State := Etat'(Found);
end if;
end case;
when Number =>
if C in '0' .. '9' then
Bounded_String.Append (Current_Value, C);
else
Fichier_Io.Unget (Fichier_Source);
Current_Token := Token'(Integer);
State := Etat'(Found);
end if;
when Identifier =>
if C in 'a' .. 'z' or else
C in 'A' .. 'Z' or else C in '0' .. '9' then
Bounded_String.Append (Current_Value, C);
elsif C = '_' then
null;
elsif C = ':' then
Current_Token := Token'(Keyword);
State := Etat'(Found);
else
Fichier_Io.Unget (Fichier_Source);
Current_Token := Token'(Identifier);
Current_Token := Reserved_Word.Reserved_To_Token
(Bounded_String.Image
(Current_Value));
State := Etat'(Found);
end if;
when String =>
if C /= '"' then
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(String);
else
State := Etat'(Found_String);
end if;
when Found_String =>
if C /= '"' then
Current_Token := Token'(String);
State := Etat'(Found);
Fichier_Io.Unget (Fichier_Source);
else
Bounded_String.Append (Current_Value, C);
Current_Token := Token'(String);
State := Etat'(String);
end if;
when Greater =>
if C = '=' then
Bounded_String.Copy (Current_Value, "Sup_Egal");
Current_Token := Token'(Binary);
State := Etat'(Found);
else
Fichier_Io.Unget (Fichier_Source);
State := Etat'(Found);
end if;
when Less =>
if C = '=' then
Bounded_String.Copy (Current_Value, "Inf_Egal");
Current_Token := Token'(Binary);
State := Etat'(Found);
elsif C = '>' then
Bounded_String.Copy (Current_Value, "Diff");
Current_Token := Token'(Binary);
State := Etat'(Found);
else
Fichier_Io.Unget (Fichier_Source);
State := Etat'(Found);
end if;
when Comment =>
if C = ']' then
State := Etat'(Normal);
end if;
when Found =>
null;
end case;
exit when (State = Found);
end loop;
end if;
end Next;
function Get_Value return Object.Tiny_String is
begin
return Scanner.Current_Value;
end Get_Value;
function Get_Token return Token is
begin
-- Next;
return Scanner.Current_Token;
end Get_Token;
function Get_Line_Number return Object.Index is
begin
return Fichier_Io.Get_Line_Number;
end Get_Line_Number;
procedure Put_Line_Number (Value : Object.Index) is
begin
Fichier_Io.Put_Line_Number (Value);
end Put_Line_Number;
end Scanner;
nblk1=d
nid=b
hdr6=18
[0x00] rec0=28 rec1=00 rec2=01 rec3=046
[0x01] rec0=19 rec1=00 rec2=05 rec3=034
[0x02] rec0=00 rec1=00 rec2=0d rec3=00a
[0x03] rec0=15 rec1=00 rec2=04 rec3=008
[0x04] rec0=11 rec1=00 rec2=02 rec3=064
[0x05] rec0=16 rec1=00 rec2=08 rec3=02a
[0x06] rec0=14 rec1=00 rec2=03 rec3=01c
[0x07] rec0=16 rec1=00 rec2=07 rec3=008
[0x08] rec0=14 rec1=00 rec2=06 rec3=04c
[0x09] rec0=16 rec1=00 rec2=09 rec3=026
[0x0a] rec0=1a rec1=00 rec2=0a rec3=008
[0x0b] rec0=16 rec1=00 rec2=0c rec3=000
[0x0c] rec0=24 rec1=00 rec2=0c rec3=444
tail 0x2153164a284e67e3615b1 0x42a00088462060003
Free Block Chain:
0xb: 0000 00 00 00 4f 80 11 20 20 20 20 20 20 20 20 20 20 ┆ O ┆