|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 32768 (0x8000) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Compiler_Action, seg_048a5c
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Text_Io, Error, Dynamic_Value, Unbounded_String; package body Compiler_Action is package Unlimited_String is new Unbounded_String (10); package Argument_List is new Queue_Generic (Dynamic_Value.Object); type Acces_Argument_List is access Argument_List.Queue; type Action_Node (What : Action_Kinds := Unknown_Action) is record case What is when Unknown_Action => null; when Write_Action => List_Of_Argument : Acces_Argument_List; when Conditional_Action => The_Condition : Dynamic_Node.Object; The_True_Bloc : Acces_List; The_False_Bloc : Acces_List; Evaluation_Flag : Boolean; when Affect_Action => The_Source : Dynamic_Node.Object; The_Target : Dynamic_Node.Object; when Append_In_Set_Of_Word => The_Word : Dynamic_Node.Object; The_Target_Set : Dynamic_Node.Object; when Remove_From_Set_Of_Word => The_Out_Word : Dynamic_Node.Object; The_Reduced_Set : Dynamic_Node.Object; when Clear_Set_Of_Word => The_Set : Dynamic_Node.Object; when Quit_Action => null; end case; end record; procedure Create_Action (The_Action : in out Object; What : Action_Kinds) is D_N1, D_N2 : Dynamic_Node.Object; A_L_T, A_L_F : Acces_List; A_Arg_List : Acces_Argument_List; D_N : Dynamic_Node.Object; An_Action : Object; begin case What is when Write_Action => A_Arg_List := new Argument_List.Queue; Argument_List.Make_Empty (A_Arg_List.all); The_Action := new Action_Node'(What => Write_Action, List_Of_Argument => A_Arg_List); when Conditional_Action => A_L_T := new Action_List.Queue; Action_List.Make_Empty (A_L_T.all); A_L_F := new Action_List.Queue; Action_List.Make_Empty (A_L_F.all); The_Action := new Action_Node'(What => Conditional_Action, The_Condition => D_N, The_True_Bloc => A_L_T, The_False_Bloc => A_L_F, Evaluation_Flag => True); when Affect_Action => The_Action := new Action_Node'(What => Affect_Action, The_Source => D_N, The_Target => D_N); when Append_In_Set_Of_Word => Dynamic_Node.Create_Value (D_N1); Dynamic_Node.Create_Value (D_N2); The_Action := new Action_Node'(What => Append_In_Set_Of_Word, The_Word => D_N1, The_Target_Set => D_N2); when Remove_From_Set_Of_Word => Dynamic_Node.Create_Value (D_N1); Dynamic_Node.Create_Value (D_N2); The_Action := new Action_Node'(What => Remove_From_Set_Of_Word, The_Out_Word => D_N1, The_Reduced_Set => D_N2); when Clear_Set_Of_Word => Dynamic_Node.Create_Value (D_N); The_Action := new Action_Node'(What => Clear_Set_Of_Word, The_Set => D_N); when Quit_Action => The_Action := new Action_Node'(What => Quit_Action); when Unknown_Action => null; end case; end Create_Action; procedure Create_List (The_Action_List : in out Acces_List) is begin The_Action_List := new Action_List.Queue; Action_List.Make_Empty (The_Action_List.all); end Create_List; procedure Set_Write_Argument (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Dynamic_Node.Object) is use Dynamic_Node; Tmp_Arg : Dynamic_Value.Object; begin if (Argument_Type /= Write_Argument) then raise Bad_Argument_Type; end if; --if ((Dynamic_Node.Get_Type_Of_Object (The_Argument) = -- Dynamic_Node.Type_Unknown) or -- (Dynamic_Node.Get_Type_Of_Object (The_Argument) = -- Dynamic_Node.Type_Bool)) then if (Dynamic_Node.Get_Operator (The_Argument) /= "UNKNOWN") then -- donc c'est un operateur unaire, binaire, ou ternaire et pas une value Error.Set_Type_Error (Error.Unauthorized_Type_For_Write); raise Error.Excep_Semantic_Error; end if; Tmp_Arg := Dynamic_Node.Get_Value (The_Argument); Argument_List.Add (The_Action.List_Of_Argument.all, Tmp_Arg); end Set_Write_Argument; procedure Set_Affect_Argument (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Dynamic_Node.Object) is use Dynamic_Node; begin if ((Argument_Type /= Source_Argument) and (Argument_Type /= Target_Argument)) then raise Bad_Argument_Type; end if; if (Argument_Type = Source_Argument) then if (Dynamic_Node.Get_Kind (The_Action.The_Target) /= Dynamic_Node.Unknown) then if ((Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Get_Type_Of_Object (The_Action.The_Target))) then Error.Set_Type_Error (Error. Unauthorized_Type_With_Target_Argument_Of_Affectation); raise Error.Excep_Semantic_Error; end if; else if ((Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Int) and (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_String)) then Error.Set_Type_Error (Error.Unauthorized_Type_For_Any_Affectation); raise Error.Excep_Semantic_Error; end if; end if; The_Action.The_Source := The_Argument; else -- cas de la cible if (Dynamic_Node.Get_Kind (The_Action.The_Source) /= Dynamic_Node.Unknown) then if ((Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Get_Type_Of_Object (The_Action.The_Source))) then Error.Set_Type_Error (Error. Unauthorized_Type_With_Source_Argument_Of_Affectation); raise Error.Excep_Semantic_Error; end if; else if ((Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Int) and (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_String)) then Error.Set_Type_Error (Error.Unauthorized_Type_For_Any_Affectation); raise Error.Excep_Semantic_Error; end if; end if; The_Action.The_Target := The_Argument; end if; end Set_Affect_Argument; procedure Set_Append_Argument (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Dynamic_Node.Object) is use Dynamic_Node; begin if ((Argument_Type /= Source_Argument) and (Argument_Type /= Target_Argument)) then raise Bad_Argument_Type; end if; if (Argument_Type = Source_Argument) then if (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Voca) then Error.Set_Type_Error (Error.Word_Was_Expected); raise Error.Excep_Semantic_Error; end if; The_Action.The_Word := The_Argument; else if (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Set_Words) then Error.Set_Type_Error (Error.Set_Was_Expected); raise Error.Excep_Semantic_Error; end if; The_Action.The_Target_Set := The_Argument; end if; end Set_Append_Argument; procedure Set_Remove_Argument (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Dynamic_Node.Object) is use Dynamic_Node; begin if ((Argument_Type /= Source_Argument) and (Argument_Type /= Target_Argument)) then raise Bad_Argument_Type; end if; if (Argument_Type = Source_Argument) then if (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Voca) then Error.Set_Type_Error (Error.Word_Was_Expected); raise Error.Excep_Semantic_Error; end if; The_Action.The_Out_Word := The_Argument; else if (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Set_Words) then Error.Set_Type_Error (Error.Set_Was_Expected); raise Error.Excep_Semantic_Error; end if; The_Action.The_Reduced_Set := The_Argument; end if; end Set_Remove_Argument; procedure Set_Clear_Argument (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Dynamic_Node.Object) is use Dynamic_Node; begin if (Argument_Type /= Target_Argument) then raise Bad_Argument_Type; end if; if (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Set_Words) then Error.Set_Type_Error (Error.Set_Was_Expected); raise Error.Excep_Semantic_Error; end if; The_Action.The_Set := The_Argument; end Set_Clear_Argument; procedure Set_Condition (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Dynamic_Node.Object) is use Dynamic_Node; begin if (Argument_Type /= Condition_Argument) then raise Bad_Argument_Type; end if; if (Dynamic_Node.Get_Type_Of_Object (The_Argument) /= Dynamic_Node.Type_Bool) then Error.Set_Type_Error (Error.Boolean_Was_Expected); raise Error.Excep_Semantic_Error; end if; The_Action.The_Condition := The_Argument; end Set_Condition; procedure Set_Argument (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Dynamic_Node.Object) is begin case The_Action.What is when Write_Action => Set_Write_Argument (The_Action, Argument_Type, The_Argument); when Affect_Action => Set_Affect_Argument (The_Action, Argument_Type, The_Argument); when Append_In_Set_Of_Word => Set_Append_Argument (The_Action, Argument_Type, The_Argument); when Remove_From_Set_Of_Word => Set_Remove_Argument (The_Action, Argument_Type, The_Argument); when Clear_Set_Of_Word => Set_Clear_Argument (The_Action, Argument_Type, The_Argument); when Conditional_Action => Set_Condition (The_Action, Argument_Type, The_Argument); when Quit_Action | Unknown_Action => null; end case; end Set_Argument; procedure Set_Argument (The_Action : in out Object; Argument_Type : Argument_Kinds; The_Argument : Object) is begin case Argument_Type is when True_Component => Action_List.Add (The_Action.The_True_Bloc.all, The_Argument); when False_Component => Action_List.Add (The_Action.The_False_Bloc.all, The_Argument); when others => raise Bad_Argument_Type; end case; end Set_Argument; function Get_True_Bloc (Of_Action : Object) return Acces_List is begin if Of_Action.What = Conditional_Action then return Of_Action.The_True_Bloc; else raise Bad_Argument_Type; end if; end Get_True_Bloc; function Get_False_Bloc (Of_Action : Object) return Acces_List is begin if Of_Action.What = Conditional_Action then return Of_Action.The_False_Bloc; else raise Bad_Argument_Type; end if; end Get_False_Bloc; function Get_Kind (Of_Action : Object) return Action_Kinds is begin return Of_Action.What; end Get_Kind; procedure Print_Action (The_Action : Object) is begin case The_Action.What is when Write_Action => Text_Io.Put_Line ("ACTION ECRIRE"); when Conditional_Action => Text_Io.Put_Line ("ACTION CONDITIONNELLE, de condition"); Dynamic_Node.Print (The_Action.The_Condition); when Affect_Action => Text_Io.Put_Line ("ACTION AFFECTATION"); Text_Io.New_Line; Dynamic_Node.Print (The_Action.The_Source); Text_Io.New_Line; Dynamic_Node.Print (The_Action.The_Target); when Append_In_Set_Of_Word => Text_Io.Put_Line ("ACTION AJOUT ENSEMBLE"); when Remove_From_Set_Of_Word => Text_Io.Put_Line ("ACTION RETIRER ENSEMBLE"); when Clear_Set_Of_Word => Text_Io.Put_Line ("ACTION VIDER ENSEMBLE"); when Quit_Action => Text_Io.Put_Line ("ACTIION QUITTER"); when others => null; end case; end Print_Action; procedure Print_List (The_List : Acces_List) is It : Action_List.Iterator; begin Action_List.Init (It, The_List.all); while not Action_List.Done (It) loop Print_Action (Action_List.Value (It)); Action_List.Next (It); end loop; end Print_List; procedure Evaluate_Action (The_Action : Object) is begin case The_Action.What is when Conditional_Action => Dynamic_Node.Evaluate (The_Action.The_Condition); The_Action.Evaluation_Flag := Dynamic_Value.Get_Value (Dynamic_Node.Get_Value (The_Action.The_Condition)); if (The_Action.Evaluation_Flag) then Evaluate (The_Action.The_True_Bloc); else Evaluate (The_Action.The_False_Bloc); end if; when others => null; end case; end Evaluate_Action; procedure Execute_Action (The_Action : in Object) is It : Action_List.Iterator; It_Arg : Argument_List.Iterator; Cond, Sv, Tv : Dynamic_Value.Object; Arg_Kind : Dynamic_Value.Kinds; I : Integer; S : Unlimited_String.Variable_String; use Dynamic_Value; begin case The_Action.What is when Write_Action => Argument_List.Init (It_Arg, The_Action.List_Of_Argument.all); while not Argument_List.Done (It_Arg) loop Arg_Kind := Dynamic_Value.Get_Kind (Argument_List.Value (It_Arg)); case Arg_Kind is when Dynamic_Value.String_Of_Characters | Dynamic_Value.Vocabulary_Word => Text_Io.Put (Dynamic_Value.Get_Value (Argument_List.Value (It_Arg))); when Dynamic_Value.Integer_Number => Text_Io.Put (Integer'Image (Dynamic_Value.Get_Value (Argument_List.Value (It_Arg)))); when Dynamic_Value.Set_Of_Words => Text_Io.New_Line; Dynamic_Value.Print (Argument_List.Value (It_Arg)); when Dynamic_Value.Boolean_Number | Dynamic_Value.Unknown => null; end case; Argument_List.Next (It_Arg); end loop; Text_Io.New_Line; when Conditional_Action => if (The_Action.Evaluation_Flag = True) then Execute (The_Action.The_True_Bloc); else Execute (The_Action.The_False_Bloc); end if; when Affect_Action => Dynamic_Node.Evaluate (The_Action.The_Source); Dynamic_Node.Evaluate (The_Action.The_Target); Sv := Dynamic_Node.Get_Value (The_Action.The_Source); Tv := Dynamic_Node.Get_Value (The_Action.The_Target); if (Dynamic_Value.Get_Kind (Sv) = Dynamic_Value.Get_Kind (Tv)) then case Dynamic_Value.Get_Kind (Sv) is when Integer_Number => I := Dynamic_Value.Get_Value (Sv); Dynamic_Value.Set_Value (Tv, I); when String_Of_Characters => S := Unlimited_String.Value (Dynamic_Value.Get_Value (Sv)); Dynamic_Value.Set_Value (Tv, Unlimited_String.Image (S)); when others => null; end case; else raise Bad_Argument_Type; end if; when Append_In_Set_Of_Word => Dynamic_Node.Evaluate (The_Action.The_Word); Dynamic_Node.Evaluate (The_Action.The_Target_Set); Sv := Dynamic_Node.Get_Value (The_Action.The_Word); Tv := Dynamic_Node.Get_Value (The_Action.The_Target_Set); if ((Dynamic_Value.Get_Kind (Sv) = Dynamic_Value.Vocabulary_Word) and (Dynamic_Value.Get_Kind (Tv) = Dynamic_Value.Set_Of_Words)) then Dynamic_Value.Append_To_Set (Tv, Dynamic_Value.Get_Value (Sv)); Dynamic_Node.Set_Value (The_Action.The_Target_Set, Tv); else raise Bad_Argument_Type; end if; when Remove_From_Set_Of_Word => Dynamic_Node.Evaluate (The_Action.The_Out_Word); Dynamic_Node.Evaluate (The_Action.The_Reduced_Set); Sv := Dynamic_Node.Get_Value (The_Action.The_Out_Word); Tv := Dynamic_Node.Get_Value (The_Action.The_Reduced_Set); if ((Dynamic_Value.Get_Kind (Sv) = Dynamic_Value.Vocabulary_Word) and (Dynamic_Value.Get_Kind (Tv) = Dynamic_Value.Set_Of_Words)) then Dynamic_Value.Delete_From_Set (Tv, Dynamic_Value.Get_Value (Sv)); Dynamic_Node.Set_Value (The_Action.The_Reduced_Set, Tv); else raise Bad_Argument_Type; end if; when Clear_Set_Of_Word => Dynamic_Node.Evaluate (The_Action.The_Set); Tv := Dynamic_Node.Get_Value (The_Action.The_Set); Dynamic_Value.Purge_Set (Tv); Dynamic_Node.Set_Value (The_Action.The_Set, Tv); when Quit_Action => raise End_Of_Program; when others => null; end case; end Execute_Action; procedure Add_Action (In_List : in out Acces_List; The_Action : in Object) is begin Action_List.Add (In_List.all, The_Action); end Add_Action; procedure Evaluate (The_List : Acces_List) is It : Action_List.Iterator; begin if (The_List /= null) then Action_List.Init (It, The_List.all); while not Action_List.Done (It) loop Evaluate_Action (Action_List.Value (It)); Action_List.Next (It); end loop; end if; end Evaluate; procedure Execute (The_List : Acces_List) is It : Action_List.Iterator; begin if (The_List /= null) then Action_List.Init (It, The_List.all); while not Action_List.Done (It) loop Execute_Action (Action_List.Value (It)); Action_List.Next (It); end loop; end if; end Execute; end Compiler_Action;
nblk1=1f nid=1e hdr6=30 [0x00] rec0=19 rec1=00 rec2=01 rec3=042 [0x01] rec0=19 rec1=00 rec2=0c rec3=046 [0x02] rec0=12 rec1=00 rec2=0f rec3=036 [0x03] rec0=11 rec1=00 rec2=09 rec3=03c [0x04] rec0=1c rec1=00 rec2=13 rec3=01a [0x05] rec0=15 rec1=00 rec2=12 rec3=02e [0x06] rec0=01 rec1=00 rec2=1b rec3=078 [0x07] rec0=14 rec1=00 rec2=0a rec3=054 [0x08] rec0=14 rec1=00 rec2=04 rec3=03a [0x09] rec0=18 rec1=00 rec2=19 rec3=038 [0x0a] rec0=19 rec1=00 rec2=15 rec3=004 [0x0b] rec0=18 rec1=00 rec2=07 rec3=006 [0x0c] rec0=1a rec1=00 rec2=06 rec3=060 [0x0d] rec0=16 rec1=00 rec2=18 rec3=044 [0x0e] rec0=21 rec1=00 rec2=05 rec3=010 [0x0f] rec0=17 rec1=00 rec2=0d rec3=01a [0x10] rec0=1c rec1=00 rec2=0b rec3=048 [0x11] rec0=1a rec1=00 rec2=1a rec3=078 [0x12] rec0=11 rec1=00 rec2=17 rec3=042 [0x13] rec0=15 rec1=00 rec2=08 rec3=03c [0x14] rec0=14 rec1=00 rec2=1c rec3=056 [0x15] rec0=12 rec1=00 rec2=14 rec3=098 [0x16] rec0=20 rec1=00 rec2=03 rec3=05e [0x17] rec0=16 rec1=00 rec2=02 rec3=000 [0x18] rec0=14 rec1=00 rec2=1c rec3=048 [0x19] rec0=0d rec1=00 rec2=11 rec3=012 [0x1a] rec0=13 rec1=00 rec2=03 rec3=006 [0x1b] rec0=1e rec1=00 rec2=1b rec3=030 [0x1c] rec0=09 rec1=00 rec2=02 rec3=000 [0x1d] rec0=04 rec1=00 rec2=14 rec3=000 [0x1e] rec0=00 rec1=10 rec2=00 rec3=000 tail 0x21545f788865a5a5f69c2 0x42a00088462060003 Free Block Chain: 0x1e: 0000 00 16 00 0c 80 09 74 20 28 54 68 65 5f 41 72 09 ┆ t (The_Ar ┆ 0x16: 0000 00 0e 03 fc 80 1d 74 69 6f 6e 20 28 54 68 65 5f ┆ tion (The_┆ 0xe: 0000 00 1d 00 08 80 05 20 20 20 20 20 05 06 07 08 09 ┆ ┆ 0x1d: 0000 00 11 00 0f 80 0c 5f 4e 6f 64 65 27 28 57 68 61 ┆ _Node'(Wha┆ 0x11: 0000 00 10 02 79 80 25 65 74 5f 56 61 6c 75 65 20 28 ┆ y %et_Value (┆ 0x10: 0000 00 1f 02 e2 80 0a 4f 66 5f 57 6f 72 64 20 3d 3e ┆ Of_Word =>┆ 0x1f: 0000 00 00 00 04 80 01 65 01 02 03 40 40 40 40 40 40 ┆ e @@@@@@┆