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

⟦afe0f17ee⟧ Ada Source

    Length: 9216 (0x2400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Parser, seg_038fcd, seg_0391ac, seg_03940b, seg_03955d

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 
└─⟦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 Block_Class;
with Custom;
with Errors;
with Scanner;

package body Parser is

    Error_Number : Natural;

    procedure Go (From_File : String;
                  The_Root : in out Statements.Node;
                  Terminal : String) is
    begin
        Scanner.Start (From_File);
        Scanner.Next_Token;
        case Scanner.Get_Token is
            when Scanner.L_Eof =>
                raise Errors.Empty_Source_File;
            when others =>
                Block_Class.Create_Program_Block;  
                Block_Class.New_Symbols_Table;
                Block_Class.Set_Predefined_Identifiers;
                Statements.Parse (The_Root);
                Scanner.Stop;
        end case;

    exception

        when Errors.Empty_Source_File =>
            Errors.Parse_Log
               ("Le fichier source que vous avez indique ne contient aucune instruction Tiny_Talk ! ",
                Terminal, False);
        when Errors.Expecting_Binary =>
            Errors.Parse_Log ("Expression binaire attendue !", Terminal);

        when Errors.Expecting_Binary_After_Keyword =>
            Errors.Parse_Log
               ("Expression binaire attendue apres un mot cle !", Terminal);

        when Errors.Expecting_Closing_Brace =>
            Errors.Parse_Log
               ("Accolade fermante attendue ('}') pour marquer la fin d'un bloc !",
                Terminal);

        when Errors.Expecting_Closing_Parenthesis =>
            Errors.Parse_Log
               ("Parenthese fermante attendue (')') pour delimiter une valeur !",
                Terminal);

        when Errors.Expecting_Dot =>
            Errors.Parse_Log
               ("Il manque un separateur d'instructions ('.') ! ", Terminal);

        when Errors.Expecting_Id_After_Keyword =>
            Errors.Parse_Log
               ("Identifificateur attendu apres un mot cle, dans la liste d'arguments d'un bloc !",
                Terminal);

        when Errors.Expecting_Id_After_Pour =>
            Errors.Parse_Log
               ("Identifificateur attendu apres le mot reserve 'Pour' !",
                Terminal);

        when Errors.Expecting_Id_Or_Keyword =>
            Errors.Parse_Log
               ("Identificateur ou mot cle attendu, dans la liste declarative des arguments d'un bloc !",
                Terminal);

        when Errors.Expecting_Opening_Brace =>
            Errors.Parse_Log
               ("Accolade ouvrante attendue ('{') pour marquer le debut d'un bloc !",
                Terminal);

        when Errors.Expecting_Other_Id_Or_Dot =>
            Errors.Parse_Log
               ("Attente d'un autre identificateur ou du separateur ('.'), dans la liste d'arguments d'un bloc !",
                Terminal);

        when Errors.Expecting_Other_Keyword_Or_Dot =>
            Errors.Parse_Log
               ("Attente d'un autre mot cle ou du separateur ('.'), dans la liste d'arguments d'un bloc !",
                Terminal);

        when Errors.Expecting_Pour_Or_Value =>
            Errors.Parse_Log
               ("Attente du mot reserve 'Pour' ou d'une valeur, en debut d'une expression !",
                Terminal);

        when Errors.Expecting_Prendre_After_Id =>
            Errors.Parse_Log
               ("Attente du mot reserve 'Prendre' apres un identificateur !",
                Terminal);

        when Errors.Expecting_Primary | Errors.Expecting_Primary_First =>
            Errors.Parse_Log
               ("Attente d'une expression primaire (identificateur, chaine, entier, '('Valeur')', ou bloc) !",
                Terminal);

        when Errors.Expecting_Unary =>
            Errors.Parse_Log ("Attente d'une expression unaire !", Terminal);

        when Errors.Expecting_Unary_After_Binary_Message =>
            Errors.Parse_Log
               ("Attente d'une expression unaire, apres un message binaire !",
                Terminal);

        when Errors.Expecting_Value =>
            Errors.Parse_Log
               ("Attente d'une valeur apres une parenthese ouvrante ('(') !",
                Terminal);

        when Errors.Expecting_Value_After_Prendre =>
            Errors.Parse_Log
               ("Attente d'une valeur apres le mot reserve 'Prendre' !",
                Terminal);

        when Errors.Unknown_Lexeme_Found =>
            Error_Number := Scanner.Get_Error_Number;
            case Error_Number is
                when 1 =>
                    Errors.Parse_Log
                       ("Caractere non reconnu par l'analyseur lexical !",
                        Terminal);
                when 2 =>
                    Errors.Parse_Log
                       ("Identificateur invalide !  (tout '_' doit etre precede ET suivi d'une lettre ou d'un chiffre)",
                        Terminal);
                when 3 =>
                    Errors.Parse_Log
                       ("Chaine trop longue !...  La longueur maximum autorisee pour une chaine est " &
                        Natural'Image (Custom.String_Max_Length),
                        Terminal);
                when 4 =>
                    Errors.Parse_Log
                       ("Identificateur trop long !...  La longueur maximum autorisee pour un identificateur est " &
                        Natural'Image (Custom.Id_Max_Length),
                        Terminal);
                when 5 =>
                    Errors.Parse_Log
                       ("Entier trop grand, au_dela des limites de la machine !",
                        Terminal);
                when others =>
                    Errors.Parse_Log
                       ("Erreur non identifiee detectee par l'analyseur lexical...",
                        Terminal);
            end case;

    end Go;

end Parser;





E3 Meta Data

    nblk1=8
    nid=7
    hdr6=c
        [0x00] rec0=22 rec1=00 rec2=01 rec3=028
        [0x01] rec0=18 rec1=00 rec2=06 rec3=012
        [0x02] rec0=18 rec1=00 rec2=08 rec3=088
        [0x03] rec0=17 rec1=00 rec2=04 rec3=08e
        [0x04] rec0=19 rec1=00 rec2=05 rec3=032
        [0x05] rec0=1a rec1=00 rec2=02 rec3=000
        [0x06] rec0=19 rec1=00 rec2=08 rec3=000
        [0x07] rec0=10 rec1=00 rec2=02 rec3=001
    tail 0x215320d1a84e961d1dc17 0x42a00088462060003
Free Block Chain:
  0x7: 0000  00 03 02 dd 80 06 69 73 20 22 20 26 06 00 4c 20  ┆      is " &  L ┆
  0x3: 0000  00 00 03 fc 80 08 54 6f 6b 65 6e 20 69 73 08 00  ┆      Token is  ┆