blob: c07408c8298f33f2080c2c12ea18c569869d7d97 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
with
Ada.Characters.Latin_1;
package body Packrat.Tokens is
package SU renames Ada.Strings.Unbounded;
package Latin renames Ada.Characters.Latin_1;
function "<"
(Left, Right : in Value_Holders.Holder)
return Boolean is
begin
return Left.Element < Right.Element;
end "<";
function "<"
(Left, Right : in Token)
return Boolean is
begin
if Left.Start_At = Right.Start_At then
if Left.Identifier = Right.Identifier then
return Left.Token_Value < Right.Token_Value;
else
return Left.Identifier < Right.Identifier;
end if;
else
return Left.Start_At < Right.Start_At;
end if;
end "<";
function "<"
(Left, Right : in Token_Array)
return Boolean
is
function LT is new Array_Less_Than
(Base_Type => Token,
Array_Type => Token_Array);
begin
return LT (Left, Right);
end "<";
function Create
(Ident : in Label_Enum;
Start : in Positive;
Value : in Element_Array)
return Token is
begin
return This : Token do
This.Identifier := Ident;
This.Start_At := Start;
This.Token_Value := Value_Holders.To_Holder (Value);
end return;
end Create;
function Debug_String
(This : in Token)
return String
is
Result : SU.Unbounded_String := +"";
begin
SU.Append (Result, "Token " & Label_Enum'Image (This.Identifier) &
" at input position" & Integer'Image (This.Start_At) & " with value length" &
Integer'Image (This.Token_Value.Constant_Reference.Element'Length) & Latin.LF);
return -Result;
end Debug_String;
function Label
(This : in Token)
return Label_Enum is
begin
return This.Identifier;
end Label;
function Start
(This : in Token)
return Positive is
begin
return This.Start_At;
end Start;
function Value
(This : in Token)
return Element_Array is
begin
return This.Token_Value.Element;
end Value;
end Packrat.Tokens;
|