From 43eea37daf162473c8c8e8279c9159d8b052ffdf Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Fri, 13 Nov 2020 11:36:41 +1100 Subject: Refactored Tokens, Errors, Traits --- src/packrat-parse_graphs.adb | 85 +++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 41 deletions(-) (limited to 'src/packrat-parse_graphs.adb') 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); -- cgit