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.ads73
1 files changed, 31 insertions, 42 deletions
diff --git a/src/packrat-parse_graphs.ads b/src/packrat-parse_graphs.ads
index fc5861d..4d2d956 100644
--- a/src/packrat-parse_graphs.ads
+++ b/src/packrat-parse_graphs.ads
@@ -7,7 +7,6 @@ with
private with
- Ada.Containers.Indefinite_Holders,
Ada.Containers.Vectors,
Ada.Containers.Ordered_Maps,
Directed_Graphs;
@@ -131,6 +130,10 @@ package Packrat.Parse_Graphs is
return Boolean
with Pre => Container.Has_Root;
+ function Valid_Token
+ (Fin_Token : in Finished_Token)
+ return Boolean;
+
function Valid_Starts_Finishes
(Parent : in Finished_Token;
Subtokens : in Finished_Token_Array)
@@ -214,35 +217,19 @@ package Packrat.Parse_Graphs is
procedure Set_Root
(Container : in out Parse_Graph;
- Token : in Traits.Tokens.Token;
- Finishes : in Finish_Array)
- with Pre => Container.Contains (Token) and
- (for all F of Finishes => F >= Traits.Tokens.Start (Token) - 1),
+ Tokens : in Finished_Token_Array)
+ with Pre => (for all F of Tokens => Container.Contains (F.Token)),
Post => Container.Has_Root;
procedure Clear_Root
(Container : in out Parse_Graph)
with Post => not Container.Has_Root;
- function Root_Token
+ function Root_Elements
(Container : in Parse_Graph)
- return Traits.Tokens.Token
+ return Finished_Token_Array
with Pre => Container.Has_Root;
- function Root_Finish_List
- (Container : in Parse_Graph)
- return Finish_Array
- with Pre => Container.Has_Root,
- Post => Is_Sorted (Root_Finish_List'Result) and
- No_Duplicates (Root_Finish_List'Result);
-
- function Root_Element
- (Container : in Parse_Graph;
- Finish_At : in Finish_Type)
- return Finished_Token
- with Pre => Container.Has_Root and then
- (for some F of Container.Root_Finish_List => F = Finish_At);
-
@@ -408,6 +395,24 @@ private
+
+ package Finished_Token_Vectors is new Ada.Containers.Vectors
+ (Index_Type => Positive,
+ Element_Type => Finished_Token);
+
+ function "<"
+ (Left, Right : in Finished_Token_Vectors.Vector)
+ return Boolean;
+
+ type Token_Group is record
+ Parent : Finished_Token;
+ Elems : Finished_Token_Vectors.Vector;
+ end record;
+
+
+
+
+
package Finish_Vectors is new Ada.Containers.Vectors
(Index_Type => Positive,
Element_Type => Finish_Type);
@@ -419,21 +424,9 @@ private
Element_Type => Node_ID_Type);
type Parse_Graph is tagged record
- Internal_Graph : Base.Graph := Base.Empty_Graph;
- Root_Node : Base.Extended_Node_ID_Type := Base.No_Node;
- Root_Finishes : Finish_Vectors.Vector := Finish_Vectors.Empty_Vector;
- Label_Map : Node_Label_Maps.Map := Node_Label_Maps.Empty_Map;
- end record;
-
-
-
-
- package Finished_Token_Array_Holders is new Ada.Containers.Indefinite_Holders
- (Element_Type => Finished_Token_Array);
-
- type Token_Group is record
- Parent : Finished_Token;
- Elems : Finished_Token_Array_Holders.Holder;
+ Internal_Graph : Base.Graph := Base.Empty_Graph;
+ Root_Elems : Finished_Token_Vectors.Vector := Finished_Token_Vectors.Empty_Vector;
+ Label_Map : Node_Label_Maps.Map := Node_Label_Maps.Empty_Map;
end record;
@@ -448,10 +441,6 @@ private
(Index_Type => Positive,
Element_Type => Group_ID_Type);
- package Finished_Token_Vectors is new Ada.Containers.Vectors
- (Index_Type => Positive,
- Element_Type => Finished_Token);
-
package Token_Group_Vectors is new Ada.Containers.Vectors
(Index_Type => Positive,
Element_Type => Token_Group);
@@ -476,6 +465,7 @@ private
+
package Isomorph_Maps is new Ada.Containers.Ordered_Maps
(Key_Type => Finished_Token,
Element_Type => Finished_Token_Vectors.Vector,
@@ -504,8 +494,7 @@ private
Empty_Graph : constant Parse_Graph :=
(Internal_Graph => Base.Empty_Graph,
- Root_Node => Base.No_Node,
- Root_Finishes => Finish_Vectors.Empty_Vector,
+ Root_Elems => Finished_Token_Vectors.Empty_Vector,
Label_Map => Node_Label_Maps.Empty_Map);