summaryrefslogtreecommitdiff
path: root/src/packrat-parse_graphs.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/packrat-parse_graphs.ads')
-rw-r--r--src/packrat-parse_graphs.ads44
1 files changed, 37 insertions, 7 deletions
diff --git a/src/packrat-parse_graphs.ads b/src/packrat-parse_graphs.ads
index aced9d3..2912110 100644
--- a/src/packrat-parse_graphs.ads
+++ b/src/packrat-parse_graphs.ads
@@ -343,7 +343,8 @@ package Packrat.Parse_Graphs is
function Isomorphic
(Left, Right : in Parse_Graph)
- return Boolean;
+ return Boolean
+ with Pre => Left.Has_Root and Right.Has_Root;
function Isomorphic_Subgraph
(Left_Graph : in Parse_Graph;
@@ -422,12 +423,6 @@ private
Label_Map : Node_Label_Maps.Map := Node_Label_Maps.Empty_Map;
end record;
- Empty_Graph : constant Parse_Graph :=
- (Internal_Graph => Base.Empty_Graph,
- Root_Node => Base.No_Node,
- Root_Finishes => Finish_Vectors.Empty_Vector,
- Label_Map => Node_Label_Maps.Empty_Map);
-
@@ -479,6 +474,41 @@ private
+ package Isomorph_Maps is new Ada.Containers.Ordered_Maps
+ (Key_Type => Finished_Token,
+ Element_Type => Finished_Token_Vectors.Vector,
+ "=" => Finished_Token_Vectors."=");
+
+ function Group_Isomorph
+ (Left_Graph : in Parse_Graph;
+ Left_Token_Group : in Token_Group;
+ Right_Graph : in Parse_Graph;
+ Right_Token_Group : in Token_Group;
+ Offset : in Integer;
+ Mapping : in out Isomorph_Maps.Map)
+ return Boolean;
+
+ function Token_Isomorph
+ (Left_Graph : in Parse_Graph;
+ Left_Position : in Finished_Token;
+ Right_Graph : in Parse_Graph;
+ Right_Position : in Finished_Token;
+ Offset : in Integer;
+ Mapping : in out Isomorph_Maps.Map)
+ return Boolean;
+
+
+
+
+ Empty_Graph : constant Parse_Graph :=
+ (Internal_Graph => Base.Empty_Graph,
+ Root_Node => Base.No_Node,
+ Root_Finishes => Finish_Vectors.Empty_Vector,
+ Label_Map => Node_Label_Maps.Empty_Map);
+
+
+
+
generic
type Base_Type is private;
type Array_Type is array (Positive range <>) of Base_Type;