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: 2046 (0x7fe) Types: TextFile Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧
with Message; with Value, Block; with Bug_Report; package body Expression is type Node_Structure is record Rule : Natural range 0 .. 1 := 0; Val : Value.Node := Value.Empty_Node; Ident : Message.Unary; end record; procedure Parse (N : in out Node) is use Scanner; begin N := new Node_Structure; if Value.Is_First (Scanner.Get_Token) then N.Rule := 0; Value.Parse (N.Val); else if Scanner.Get_Token = Scanner.Pour then N.Rule := 1; Scanner.Next; if Scanner.Get_Token = Scanner.Identifier then Message.Put (This_Name => Scanner.Get_Value, Into => N.Ident); Scanner.Next; else raise Bug_Report.Identifier_Is_Missing; end if; if Scanner.Get_Token = Scanner.Prendre then Scanner.Next; Value.Parse (N.Val); else raise Bug_Report.Prendre_Is_Missing; end if; else raise Bug_Report.Unexpected_Token; end if; end if; end Parse; function Is_First (T : Scanner.Token) return Boolean is use Scanner; begin return T = Pour or else Value.Is_First (T); end Is_First; function Interpret (N : Node) return Object.Reference is Result : Object.Reference; Node : Block.Node := Block.Get_Current_Node; begin case N.Rule is when 0 => Result := Value.Interpret (N.Val); when 1 => Result := Value.Interpret (N.Val); Block.Put_Into_Table (This_Object => Result, Named => Message.Get (N.Ident), Into_Block => Node); end case; return Result; end Interpret; end Expression;