DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 3971 (0xf83) Types: TextFile Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧
with Arguments; with Bounded_String; with Message; with Msg_Report; with Object; with Scanner; with String_Utilities; with Symbol_Table; with Unparse_Report; package body More_List2 is procedure Bs_Copy (A_String : in out Scanner.B_String; A_Value : String) renames Bounded_String.Copy; function Bs_Image (A_String : Scanner.B_String) return String renames Bounded_String.Image; function Is_Equal_String (Str1 : String; Str2 : String; Ignore_Case : Boolean := True) return Boolean renames String_Utilities.Equal; function Su_Capitalize (A_String : String) return String renames String_Utilities.Capitalize; type Node_Structure is record Info : Natural range 0 .. 1 := 0; Mol2 : More_List2.Node := More_List2.Empty_Node; Iden : Scanner.B_String; Keyw : Message.Selector := Message.Void_Selector; Lign : Integer; end record; procedure Parse (N : in out Node; Error : out Boolean) is Failed : Boolean := False; use Scanner; begin Msg_Report.Information ("I enter in more_list2's parse"); N := new Node_Structure; N.Lign := Scanner.Line_Number; Message.Copy (N.Keyw, Scanner.Value); Scanner.Next; if Scanner.Symbol = L_Identifier then Bs_Copy (N.Iden, Scanner.Value); Scanner.Next; if More_List2.Is_First (Scanner.Symbol) then N.Info := 1; More_List2.Parse (N.Mol2, Failed); end if; else Failed := True; Msg_Report.Syntax_Error ("identifier expected, not"); end if; Msg_Report.Information ("I leave more_list2's parse with failed = " & Boolean'Image (Failed)); Error := Failed; end Parse; procedure Unparse (N : Node) is begin Unparse_Report.Write (Su_Capitalize (Message.Image (N.Keyw))); Unparse_Report.Write (Su_Capitalize (Bs_Image (N.Iden)) & " "); if N.Info = 1 then More_List2.Unparse (N.Mol2); end if; end Unparse; function Is_First (T : Scanner.Token) return Boolean is use Scanner; begin return T = L_Key_Word; end Is_First; function Interpret (N : Node; A_Keyword_Mess : Message.Selector := Message.Void_Selector; A_List : Arguments.List := Arguments.Void_Arguments) return Object.Reference is Result : Object.Reference := Object.Void_Reference; Arg : Object.Reference; Arg_List : Arguments.List; Keyword_Mess, Msg : Message.Selector := Message.Void_Selector; begin Msg_Report.Information ("I enter in more_list2's interpret"); Msg_Report.Set_Line_Number (N.Lign); Keyword_Mess := A_Keyword_Mess; Message.Extract_Keyword (Keyword_Mess, Msg); if Is_Equal_String (Message.Image (Msg), Message.Format (N.Keyw)) then Arg_List := A_List; Arguments.Read (Arg_List, Arg); Symbol_Table.Insert (N.Iden, Arg); else Msg_Report.Interpret_Error ("Incorrect call parameter :" & Message.Image (Msg)); raise Incorrect_Call_Parameter; end if; if N.Info = 1 then Result := More_List2.Interpret (N.Mol2, A_Keyword_Mess => Keyword_Mess, A_List => Arg_List); end if; Msg_Report.Information ("I leave more_list2's interpret with result :"); Msg_Report.Continue ("class = " & Object.Class'Image (Object.The_Class (Result)) & " ident = " & Integer'Image (Object.Identificator (Result))); return Object.Void_Reference; end Interpret; end More_List2;