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-lexer.ads | 133 ++++++++++++++++++++++++++------------------------ 1 file changed, 69 insertions(+), 64 deletions(-) (limited to 'src/packrat-lexer.ads') diff --git a/src/packrat-lexer.ads b/src/packrat-lexer.ads index 9499d50..b8090c9 100644 --- a/src/packrat-lexer.ads +++ b/src/packrat-lexer.ads @@ -1,5 +1,9 @@ +with + + Packrat.Traits; + private with Ada.Containers.Vectors, @@ -8,13 +12,7 @@ private with generic - type Label_Enum is (<>); - type Element_Type is private; - type Element_Array is array (Positive range <>) of Element_Type; - - with function "<" (Left, Right : in Element_Type) return Boolean is <>; - - with package Gen_Tokens is new Tokens (Label_Enum, Element_Type, Element_Array); + with package Traits is new Packrat.Traits (<>); package Packrat.Lexer is @@ -22,7 +20,7 @@ package Packrat.Lexer is type Combinator_Result is private; type Combinator is access function - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; @@ -41,7 +39,7 @@ package Packrat.Lexer is type Component_Result is private; type Component is access function - (Input : in Element_Array; + (Input : in Traits.Element_Array; Context : in out Lexer_Context) return Component_Result; @@ -51,30 +49,30 @@ package Packrat.Lexer is type With_Input is access function - return Element_Array; + return Traits.Element_Array; generic - Label : in Label_Enum; + Label : in Traits.Label_Enum; with function Combo - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; function Stamp - (Input : in Element_Array; + (Input : in Traits.Element_Array; Context : in out Lexer_Context) return Component_Result; generic - Label : in Label_Enum; + Label : in Traits.Label_Enum; with function Combo - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; function Ignore - (Input : in Element_Array; + (Input : in Traits.Element_Array; Context : in out Lexer_Context) return Component_Result; @@ -84,41 +82,41 @@ package Packrat.Lexer is generic Components : in Component_Array; function Scan - (Input : in Element_Array; + (Input : in Traits.Element_Array; Context : in out Lexer_Context) - return Gen_Tokens.Token_Array; + return Traits.Tokens.Token_Array; generic Components : in Component_Array; function Scan_Only - (Input : in Element_Array; + (Input : in Traits.Element_Array; Context : in out Lexer_Context) - return Gen_Tokens.Token_Array; + return Traits.Tokens.Token_Array; generic Components : in Component_Array; function Scan_With (Input : in With_Input; Context : in out Lexer_Context) - return Gen_Tokens.Token_Array; + return Traits.Tokens.Token_Array; generic Components : in Component_Array; - Pad_In : in Element_Type; - Pad_Out : in Gen_Tokens.Token; + Pad_In : in Traits.Element_Type; + Pad_Out : in Traits.Tokens.Token; procedure Scan_Set - (Input : in Element_Array; + (Input : in Traits.Element_Array; Context : in out Lexer_Context; - Output : out Gen_Tokens.Token_Array); + Output : out Traits.Tokens.Token_Array); generic Components : in Component_Array; - Pad_In : in Element_Type; - Pad_Out : in Gen_Tokens.Token; + Pad_In : in Traits.Element_Type; + Pad_Out : in Traits.Tokens.Token; procedure Scan_Set_With (Input : in With_Input; Context : in out Lexer_Context; - Output : out Gen_Tokens.Token_Array); + Output : out Traits.Tokens.Token_Array); @@ -126,43 +124,43 @@ package Packrat.Lexer is generic Params : in Combinator_Array; function Sequence - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic with function Param - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; Number : in Positive; function Count - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic with function Param - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; Minimum : in Natural := 0; function Many - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic with function Param - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; with function Test - (Item : in Element_Type) + (Item : in Traits.Element_Type) return Boolean; Minimum : in Natural := 0; function Many_Until - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; @@ -171,71 +169,71 @@ package Packrat.Lexer is generic with function Test - (Item : in Element_Type) + (Item : in Traits.Element_Type) return Boolean; function Satisfy - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic with function Test - (Item : in Element_Type) + (Item : in Traits.Element_Type) return Boolean; with function Change - (From : in Element_Type) - return Element_Type; + (From : in Traits.Element_Type) + return Traits.Element_Type; function Satisfy_With - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic - Item : in Element_Type; + Item : in Traits.Element_Type; function Match - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic - Item : in Element_Type; + Item : in Traits.Element_Type; with function Change - (From : in Element_Type) - return Element_Type; + (From : in Traits.Element_Type) + return Traits.Element_Type; function Match_With - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic - Items : in Element_Array; + Items : in Traits.Element_Array; function Multimatch - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic Number : in Positive := 1; function Take - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic with function Test - (Item : in Element_Type) + (Item : in Traits.Element_Type) return Boolean; function Take_While - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic with function Test - (Item : in Element_Type) + (Item : in Traits.Element_Type) return Boolean; function Take_Until - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; @@ -243,16 +241,16 @@ package Packrat.Lexer is generic - EOL_Item : in Element_Type; + EOL_Item : in Traits.Element_Type; function Line_End - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; generic - EOF_Item : in Element_Type; + EOF_Item : in Traits.Element_Type; function Input_End - (Input : in Element_Array; + (Input : in Traits.Element_Array; Start : in Positive) return Combinator_Result; @@ -260,20 +258,27 @@ package Packrat.Lexer is private + use type Traits.Label_Enum; + use type Traits.Element_Type; + use type Traits.Element_Array; + + + + package Token_Vectors is new Ada.Containers.Vectors (Index_Type => Positive, - Element_Type => Gen_Tokens.Token, - "=" => Gen_Tokens."="); + Element_Type => Traits.Tokens.Token, + "=" => Traits.Tokens."="); package Label_Vectors is new Ada.Containers.Vectors (Index_Type => Positive, - Element_Type => Label_Enum); + Element_Type => Traits.Label_Enum); package Label_Sets is new Ada.Containers.Ordered_Sets - (Element_Type => Label_Enum); + (Element_Type => Traits.Label_Enum); package Input_Holders is new Ada.Containers.Indefinite_Holders - (Element_Type => Element_Array); + (Element_Type => Traits.Element_Array); -- cgit