DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

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 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ B T

⟦249202093⟧ TextFile

    Length: 4174 (0x104e)
    Types: TextFile
    Names: »B«

Derivation

└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
    └─ ⟦129cab021⟧ »DATA« 
        └─⟦this⟧ 

TextFile

separate (Parse)
procedure Parse_Evoluer (Ok : out Boolean;
                         The_Node : out Abstract_Tree.P_Node) is
    Ok1 : Boolean := True;
    Var_Node1, Var_Node2, Class_Node, Actor_Node : Abstract_Tree.P_Node;
    Success : Boolean;
    Table_Changed : Boolean := False;
begin
    Ok := True;
    Text_Io.Put_Line ("parse_evoluer");
    if Lex.Get_Token = L_Evoluer then
        Lex.Next;
        if Lex.Get_Token = L_Ouvrante then
            Lex.Next;
            if Lex.Get_Token = L_Id then
                if Symbol_Table.Is_Visible (Lex.Get_Value) then
                    declare
                        The_Class : Element.Class;
                    begin
                        Symbol_Table.Get_Class
                           (Lex.Get_Value, The_Class, Success);
                        Symbol_Table.Change_Current_Table (The_Class, Success);
                        Table_Changed := Success;
                    end;
                    Class_Node := Abstract_Tree.Make_Foliage
                                     (L_Id, Lex.Get_Value);
                else
                    Error.Found;
                    Class_Node := Abstract_Tree.Empty_Node;
                end if;
                Lex.Next;
                if Lex.Get_Token = L_Point then
                    Lex.Next;
                    if Lex.Get_Token = L_Id then
                        if Symbol_Table.Is_Visible_Local (Lex.Get_Value) then
                            Actor_Node := Abstract_Tree.Make_Foliage
                                             (L_Id, Lex.Get_Value);
                            Symbol_Table.Leave_Table (Success);
                            Table_Changed := False;
                        else
                            Error.Found;
                            Actor_Node := Abstract_Tree.Empty_Node;
                        end if;
                        Lex.Next;
                        if Lex.Get_Token = L_Virgule then
                            Lex.Next;
                            Parse_Variable (Ok1, Var_Node1);
                            if not Ok1 then
                                Parse_Error (Variable_Follow);
                            end if;
                            if Lex.Get_Token = L_Virgule then
                                Lex.Next;
                                Parse_Variable (Ok1, Var_Node2);
                                if not Ok1 then
                                    Parse_Error (Variable_Follow);
                                    The_Node := Abstract_Tree.Empty_Node;
                                else
                                    The_Node :=
                                       Abstract_Tree.Make_Node
                                          (L_Evoluer, Class_Node, Actor_Node,
                                           Var_Node1, Var_Node2);
                                end if;
                                if Lex.Get_Token = L_Fermante then
                                    Lex.Next;
                                else
                                    Ok := False;
                                end if;
                            else
                                Ok := False;
                                The_Node := Abstract_Tree.Empty_Node;
                            end if;
                        else
                            Ok := False;
                            The_Node := Abstract_Tree.Empty_Node;
                        end if;
                    else
                        Ok := False;
                        The_Node := Abstract_Tree.Empty_Node;
                    end if;
                else
                    Ok := False;
                    The_Node := Abstract_Tree.Empty_Node;
                end if;
            else
                Ok := False;
                The_Node := Abstract_Tree.Empty_Node;
            end if;
        else
            Ok := False;
            The_Node := Abstract_Tree.Empty_Node;
        end if;
    else
        Ok := False;
        The_Node := Abstract_Tree.Empty_Node;
    end if;
    if Table_Changed then
        Symbol_Table.Leave_Table (Success);
    end if;
end Parse_Evoluer;