DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦284490829⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Syn, seg_03eb06

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



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;

E3 Meta Data

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