summaryrefslogtreecommitdiff
path: root/src/packrat-lexer.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/packrat-lexer.ads')
-rw-r--r--src/packrat-lexer.ads133
1 files changed, 69 insertions, 64 deletions
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);