summaryrefslogtreecommitdiff
path: root/src/packrat-parse_graphs.adb
diff options
context:
space:
mode:
authorJed Barber <jjbarber@y7mail.com>2020-11-13 11:36:41 +1100
committerJed Barber <jjbarber@y7mail.com>2020-11-13 11:36:41 +1100
commit43eea37daf162473c8c8e8279c9159d8b052ffdf (patch)
treed3fdd283a9b0d1bc5b0a5cafb6b4c18534eeefe5 /src/packrat-parse_graphs.adb
parent2e075ca317211553a19d7c8706a9d66fabcc9d8d (diff)
Refactored Tokens, Errors, Traits
Diffstat (limited to 'src/packrat-parse_graphs.adb')
-rw-r--r--src/packrat-parse_graphs.adb85
1 files changed, 44 insertions, 41 deletions
diff --git a/src/packrat-parse_graphs.adb b/src/packrat-parse_graphs.adb
index b0e5554..c743163 100644
--- a/src/packrat-parse_graphs.adb
+++ b/src/packrat-parse_graphs.adb
@@ -36,36 +36,36 @@ package body Packrat.Parse_Graphs is
is
Left_Index, Right_Index : Positive;
begin
- if Gen_Tokens.Start (Left.Token) = Gen_Tokens.Start (Right.Token) then
+ if Traits.Tokens.Start (Left.Token) = Traits.Tokens.Start (Right.Token) then
if Left.Finish = Right.Finish then
- if Gen_Tokens.Label (Left.Token) = Gen_Tokens.Label (Right.Token) then
- Left_Index := Gen_Tokens.Value (Left.Token)'First;
- Right_Index := Gen_Tokens.Value (Right.Token)'First;
- while Left_Index <= Gen_Tokens.Value (Left.Token)'Last and
- Right_Index <= Gen_Tokens.Value (Right.Token)'Last
+ if Traits.Tokens.Label (Left.Token) = Traits.Tokens.Label (Right.Token) then
+ Left_Index := Traits.Tokens.Value (Left.Token)'First;
+ Right_Index := Traits.Tokens.Value (Right.Token)'First;
+ while Left_Index <= Traits.Tokens.Value (Left.Token)'Last and
+ Right_Index <= Traits.Tokens.Value (Right.Token)'Last
loop
- if Gen_Tokens.Value (Left.Token) (Left_Index) <
- Gen_Tokens.Value (Right.Token) (Right_Index)
+ if Traits.Tokens.Value (Left.Token) (Left_Index) <
+ Traits.Tokens.Value (Right.Token) (Right_Index)
then
return True;
- elsif Gen_Tokens.Value (Left.Token) (Left_Index) /=
- Gen_Tokens.Value (Right.Token) (Right_Index)
+ elsif Traits.Tokens.Value (Left.Token) (Left_Index) /=
+ Traits.Tokens.Value (Right.Token) (Right_Index)
then
return False;
end if;
Left_Index := Left_Index + 1;
Right_Index := Right_Index + 1;
end loop;
- return Gen_Tokens.Value (Left.Token)'Length <
- Gen_Tokens.Value (Right.Token)'Length;
+ return Traits.Tokens.Value (Left.Token)'Length <
+ Traits.Tokens.Value (Right.Token)'Length;
else
- return Gen_Tokens.Label (Left.Token) < Gen_Tokens.Label (Right.Token);
+ return Traits.Tokens.Label (Left.Token) < Traits.Tokens.Label (Right.Token);
end if;
else
return Left.Finish < Right.Finish;
end if;
else
- return Gen_Tokens.Start (Left.Token) < Gen_Tokens.Start (Right.Token);
+ return Traits.Tokens.Start (Left.Token) < Traits.Tokens.Start (Right.Token);
end if;
end "<";
@@ -94,14 +94,15 @@ package body Packrat.Parse_Graphs is
(Left, Right : in Token_Group)
return Boolean is
begin
- if Gen_Tokens.Start (Left.Parent.Token) = Gen_Tokens.Start (Right.Parent.Token) then
+ if Traits.Tokens.Start (Left.Parent.Token) = Traits.Tokens.Start (Right.Parent.Token) then
if Finish (Left) = Finish (Right) then
return Left.Elems.Element < Right.Elems.Element;
else
return Finish (Left) < Finish (Right);
end if;
else
- return Gen_Tokens.Start (Left.Parent.Token) < Gen_Tokens.Start (Right.Parent.Token);
+ return Traits.Tokens.Start (Left.Parent.Token) <
+ Traits.Tokens.Start (Right.Parent.Token);
end if;
end "<";
@@ -219,10 +220,10 @@ package body Packrat.Parse_Graphs is
return Enum_Node_Maps.Map
is
Result : Enum_Node_Maps.Map;
- Current : Label_Enum;
+ Current : Traits.Label_Enum;
begin
for Node of Container.Internal_Graph.Nodes loop
- Current := Gen_Tokens.Label (Container.Internal_Graph.Label (Node));
+ Current := Traits.Tokens.Label (Container.Internal_Graph.Label (Node));
if not Result.Contains (Current) then
Result.Insert (Current, Node_Vectors.Empty_Vector);
end if;
@@ -232,10 +233,10 @@ package body Packrat.Parse_Graphs is
end Generate_Map;
function Image
- (Input : in Label_Enum)
+ (Input : in Traits.Label_Enum)
return String
is
- Raw : String := Label_Enum'Image (Input);
+ Raw : String := Traits.Label_Enum'Image (Input);
begin
if Raw'Length <= Cutoff then
return Raw;
@@ -252,14 +253,14 @@ package body Packrat.Parse_Graphs is
end Image;
Mapping : Enum_Node_Maps.Map := Generate_Map (Container);
- Current : Gen_Tokens.Token;
+ Current : Traits.Tokens.Token;
Result : SU.Unbounded_String;
begin
for Iter in Mapping.Iterate loop
SU.Append (Result, Image (Enum_Node_Maps.Key (Iter)) & Latin.HT);
for Node of Enum_Node_Maps.Element (Iter) loop
Current := Container.Internal_Graph.Label (Node);
- SU.Append (Result, Image (Gen_Tokens.Start (Current)) & " ->" & Latin.HT);
+ SU.Append (Result, Image (Traits.Tokens.Start (Current)) & " ->" & Latin.HT);
for Fin of In_Finishes (Container, Node) loop
SU.Append (Result, Image (Fin) & " ->" & Latin.HT);
declare
@@ -272,8 +273,8 @@ package body Packrat.Parse_Graphs is
for Grouping of Groupings loop
for Fin_Token of Elements (Grouping) loop
SU.Append (Result, "Subnode " &
- Image (Gen_Tokens.Label (Fin_Token.Token)) &
- " (" & Image (Gen_Tokens.Start (Fin_Token.Token)) &
+ Image (Traits.Tokens.Label (Fin_Token.Token)) &
+ " (" & Image (Traits.Tokens.Start (Fin_Token.Token)) &
"," & Image (Fin_Token.Finish) & "), ");
end loop;
SU.Delete (Result, SU.Length (Result) - 1, SU.Length (Result));
@@ -299,7 +300,7 @@ package body Packrat.Parse_Graphs is
function Contains
(Container : in Parse_Graph;
- Token : in Gen_Tokens.Token)
+ Token : in Traits.Tokens.Token)
return Boolean is
begin
return Container.Label_Map.Contains (Token);
@@ -431,19 +432,19 @@ package body Packrat.Parse_Graphs is
Subvec : Finished_Token_Vectors.Vector;
begin
for Sub of Subtokens loop
- if Gen_Tokens.Start (Sub.Token) > Sub.Finish + 1 then
+ if Traits.Tokens.Start (Sub.Token) > Sub.Finish + 1 then
return False;
end if;
Subvec.Append (Sub);
end loop;
Finished_Token_Sort.Sort (Subvec);
for Index in Subvec.First_Index .. Subvec.Last_Index - 1 loop
- if Subvec (Index).Finish >= Gen_Tokens.Start (Subvec (Index + 1).Token) then
+ if Subvec (Index).Finish >= Traits.Tokens.Start (Subvec (Index + 1).Token) then
return False;
end if;
end loop;
if Parent.Finish < Subvec.Last_Element.Finish or else
- Gen_Tokens.Start (Parent.Token) > Gen_Tokens.Start (Subvec.First_Element.Token)
+ Traits.Tokens.Start (Parent.Token) > Traits.Tokens.Start (Subvec.First_Element.Token)
then
return False;
end if;
@@ -465,7 +466,7 @@ package body Packrat.Parse_Graphs is
return False;
elsif Current = Parent then
return True;
- elsif Gen_Tokens.Start (Current.Token) > Gen_Tokens.Start (Parent.Token) then
+ elsif Traits.Tokens.Start (Current.Token) > Traits.Tokens.Start (Parent.Token) then
return False;
else
return (for some Grouping of Container.Subgroups (Current) =>
@@ -543,7 +544,7 @@ package body Packrat.Parse_Graphs is
procedure Include
(Container : in out Parse_Graph;
- Token : in Gen_Tokens.Token)
+ Token : in Traits.Tokens.Token)
is
Node_ID : Node_ID_Type;
begin
@@ -593,7 +594,7 @@ package body Packrat.Parse_Graphs is
procedure Prune
(Container : in out Parse_Graph;
- Token : in Gen_Tokens.Token) is
+ Token : in Traits.Tokens.Token) is
begin
if not Container.Contains (Token) then
return;
@@ -720,7 +721,7 @@ package body Packrat.Parse_Graphs is
procedure Set_Root
(Container : in out Parse_Graph;
- Token : in Gen_Tokens.Token;
+ Token : in Traits.Tokens.Token;
Finishes : in Finish_Array) is
begin
Container.Root_Node := Container.Label_Map.Element (Token);
@@ -744,7 +745,7 @@ package body Packrat.Parse_Graphs is
function Root_Token
(Container : in Parse_Graph)
- return Gen_Tokens.Token is
+ return Traits.Tokens.Token is
begin
return Container.Internal_Graph.Label (Container.Root_Node);
end Root_Token;
@@ -776,7 +777,7 @@ package body Packrat.Parse_Graphs is
function Finish_List
(Container : in Parse_Graph;
- Token : in Gen_Tokens.Token)
+ Token : in Traits.Tokens.Token)
return Finish_Array
is
function V2A is new Vector_To_Array (Finish_Type, Finish_Array, Finish_Vectors);
@@ -1072,14 +1073,16 @@ package body Packrat.Parse_Graphs is
then
return True;
end if;
- if Gen_Tokens.Start (Left_Position.Token) + Offset /=
- Gen_Tokens.Start (Right_Position.Token) or else
+ if Traits.Tokens.Start (Left_Position.Token) + Offset /=
+ Traits.Tokens.Start (Right_Position.Token) or else
Left_Position.Finish + Offset /= Right_Position.Finish
then
return False;
end if;
- if Gen_Tokens.Label (Left_Position.Token) /= Gen_Tokens.Label (Right_Position.Token) or else
- Gen_Tokens.Value (Left_Position.Token) /= Gen_Tokens.Value (Right_Position.Token)
+ if Traits.Tokens.Label (Left_Position.Token) /=
+ Traits.Tokens.Label (Right_Position.Token) or else
+ Traits.Tokens.Value (Left_Position.Token) /=
+ Traits.Tokens.Value (Right_Position.Token)
then
return False;
end if;
@@ -1115,7 +1118,7 @@ package body Packrat.Parse_Graphs is
return Boolean
is
Offset : Integer :=
- Gen_Tokens.Start (Right.Root_Token) - Gen_Tokens.Start (Left.Root_Token);
+ Traits.Tokens.Start (Right.Root_Token) - Traits.Tokens.Start (Left.Root_Token);
Left_Finishes : Finish_Array := Left.Root_Finish_List;
Right_Finishes : Finish_Array := Right.Root_Finish_List;
Mapping : Isomorph_Maps.Map;
@@ -1139,7 +1142,7 @@ package body Packrat.Parse_Graphs is
return Boolean
is
Offset : Integer :=
- Gen_Tokens.Start (Right_Position.Token) - Gen_Tokens.Start (Left_Position.Token);
+ Traits.Tokens.Start (Right_Position.Token) - Traits.Tokens.Start (Left_Position.Token);
Mapping : Isomorph_Maps.Map;
begin
return Token_Isomorph
@@ -1154,7 +1157,7 @@ package body Packrat.Parse_Graphs is
function To_Node
(Container : in Parse_Graph;
- Token : in Gen_Tokens.Token)
+ Token : in Traits.Tokens.Token)
return Node_ID_Type is
begin
return Container.Label_Map.Element (Token);