Natools

Check-in [83a3e25ae4]
Login
Overview
Comment:static_hash_maps-s_expressions: add generated child packages for interpreter
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 83a3e25ae4a301a8166648e1dd0e768f9864cf4f
User & Date: nat on 2014-05-21 20:07:28
Other Links: manifest | tags
Context
2014-05-22
20:14
natools: add Meaningless_Type to help instantiation of interpreters without meaningful context or state check-in: dd0bb46ace user: nat tags: trunk
2014-05-21
20:07
static_hash_maps-s_expressions: add generated child packages for interpreter check-in: 83a3e25ae4 user: nat tags: trunk
2014-05-20
20:03
s_expressions-interpreter_loop: new generic procedure providing the main loop of a S-expression interpreter check-in: 654fe8f62b user: nat tags: trunk
Changes

Added src/natools-static_hash_maps-s_expressions-command_map.adb version [e6140e570c].

































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
with Interfaces; use Interfaces;

package body Natools.Static_Hash_Maps.S_Expressions.Command_Map is

   P : constant array (0 .. 0) of Natural :=
     (0 .. 0 => 3);

   T1 : constant array (0 .. 0) of Unsigned_8 :=
     (0 .. 0 => 8);

   T2 : constant array (0 .. 0) of Unsigned_8 :=
     (0 .. 0 => 5);

   G : constant array (0 .. 8) of Unsigned_8 :=
     (0, 0, 0, 0, 3, 1, 0, 2, 0);

   function Hash (S : String) return Natural is
      F : constant Natural := S'First - 1;
      L : constant Natural := S'Length;
      F1, F2 : Natural := 0;
      J : Natural;
   begin
      for K in P'Range loop
         exit when L < P (K);
         J  := Character'Pos (S (P (K) + F));
         F1 := (F1 + Natural (T1 (K)) * J) mod 9;
         F2 := (F2 + Natural (T2 (K)) * J) mod 9;
      end loop;
      return (Natural (G (F1)) + Natural (G (F2))) mod 4;
   end Hash;

end Natools.Static_Hash_Maps.S_Expressions.Command_Map;

Added src/natools-static_hash_maps-s_expressions-command_map.ads version [9b8c6eae54].







>
>
>
1
2
3
package Natools.Static_Hash_Maps.S_Expressions.Command_Map is
   function Hash (S : String) return Natural;
end Natools.Static_Hash_Maps.S_Expressions.Command_Map;

Added src/natools-static_hash_maps-s_expressions-command_maps.adb version [51c1c623eb].

































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
--  Generated at 2014-05-21 20:03:41 +0000 by Natools.Static_Hash_Maps
--  from natools-static_hash_maps-s_expressions-hash_maps.sx

with Natools.Static_Hash_Maps.S_Expressions.Command_Pkg;
with Natools.Static_Hash_Maps.S_Expressions.Command_Map;

package body Natools.Static_Hash_Maps.S_Expressions.Command_Maps is

   function To_Package_Command (Key : String) return Package_Command is
      N : constant Natural
        := Natools.Static_Hash_Maps.S_Expressions.Command_Pkg.Hash (Key);
   begin
      if Map_1_Keys (N).all = Key then
         return Map_1_Elements (N);
      else
         raise Constraint_Error with "Key """ & Key & """ not in map";
      end if;
   end To_Package_Command;


   function To_Map_Command (Key : String) return Map_Command is
      N : constant Natural
        := Natools.Static_Hash_Maps.S_Expressions.Command_Map.Hash (Key);
   begin
      if Map_2_Keys (N).all = Key then
         return Map_2_Elements (N);
      else
         raise Constraint_Error with "Key """ & Key & """ not in map";
      end if;
   end To_Map_Command;

end Natools.Static_Hash_Maps.S_Expressions.Command_Maps;

Added src/natools-static_hash_maps-s_expressions-command_maps.ads version [1daffcd302].







































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--  Generated at 2014-05-21 20:03:41 +0000 by Natools.Static_Hash_Maps
--  from natools-static_hash_maps-s_expressions-hash_maps.sx

private package Natools.Static_Hash_Maps.S_Expressions.Command_Maps is

   function To_Package_Command (Key : String) return Package_Command;
   function To_Map_Command (Key : String) return Map_Command;

private

   Map_1_Key_0 : aliased constant String := "private";
   Map_1_Key_1 : aliased constant String := "public";
   Map_1_Keys : constant array (0 .. 1) of access constant String
     := (Map_1_Key_0'Access,
         Map_1_Key_1'Access);
   Map_1_Elements : constant array (0 .. 1) of Package_Command
     := (Private_Child,
         Public_Child);

   Map_2_Key_0 : aliased constant String := "hash-package";
   Map_2_Key_1 : aliased constant String := "nodes";
   Map_2_Key_2 : aliased constant String := "function";
   Map_2_Key_3 : aliased constant String := "not-found";
   Map_2_Keys : constant array (0 .. 3) of access constant String
     := (Map_2_Key_0'Access,
         Map_2_Key_1'Access,
         Map_2_Key_2'Access,
         Map_2_Key_3'Access);
   Map_2_Elements : constant array (0 .. 3) of Map_Command
     := (Hash_Package,
         Nodes,
         Function_Name,
         Not_Found);

end Natools.Static_Hash_Maps.S_Expressions.Command_Maps;

Added src/natools-static_hash_maps-s_expressions-command_pkg.adb version [5994920bee].

































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
with Interfaces; use Interfaces;

package body Natools.Static_Hash_Maps.S_Expressions.Command_Pkg is

   P : constant array (0 .. 0) of Natural :=
     (0 .. 0 => 2);

   T1 : constant array (0 .. 0) of Unsigned_8 :=
     (0 .. 0 => 4);

   T2 : constant array (0 .. 0) of Unsigned_8 :=
     (0 .. 0 => 3);

   G : constant array (0 .. 4) of Unsigned_8 :=
     (0, 0, 0, 1, 0);

   function Hash (S : String) return Natural is
      F : constant Natural := S'First - 1;
      L : constant Natural := S'Length;
      F1, F2 : Natural := 0;
      J : Natural;
   begin
      for K in P'Range loop
         exit when L < P (K);
         J  := Character'Pos (S (P (K) + F));
         F1 := (F1 + Natural (T1 (K)) * J) mod 5;
         F2 := (F2 + Natural (T2 (K)) * J) mod 5;
      end loop;
      return (Natural (G (F1)) + Natural (G (F2))) mod 2;
   end Hash;

end Natools.Static_Hash_Maps.S_Expressions.Command_Pkg;

Added src/natools-static_hash_maps-s_expressions-command_pkg.ads version [7cb4b44268].







>
>
>
1
2
3
package Natools.Static_Hash_Maps.S_Expressions.Command_Pkg is
   function Hash (S : String) return Natural;
end Natools.Static_Hash_Maps.S_Expressions.Command_Pkg;

Added src/natools-static_hash_maps-s_expressions-hash_maps.sx version [0d990b8dfd].



































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(Natools.Static_Hash_Maps.S_Expressions.Command_Maps
   private
   (Package_Command
      (hash-package Natools.Static_Hash_Maps.S_Expressions.Command_Pkg)
      (function To_Package_Command)
      (nodes
         (Private_Child private)
         (Public_Child public)))
   (Map_Command
      (hash-package Natools.Static_Hash_Maps.S_Expressions.Command_Map)
      (function To_Map_Command)
      (nodes
         (Hash_Package hash-package)
         (Nodes nodes)
         (Function_Name function)
         (Not_Found not-found))))