summaryrefslogtreecommitdiff
path: root/test/packrat-lexer-debug.adb
blob: 40dbd8703f8507f4d6e8767aa1164432e74f3251 (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
117
118
119


package body Packrat.Lexer.Debug is


    function Create_Result
           (Finish : in Natural;
            Status : in Result_Status)
        return Combinator_Result is
    begin
        return (Finish, Status);
    end Create_Result;


    function Join
           (Left, Right : in Combinator_Result)
        return Combinator_Result is
    begin
        if Left.Status = Success or Left.Status = Optional_More then
            return Right;
        elsif Left.Status = Needs_More then
            return (Left.Finish, Failure);
        else
            return Left;
        end if;
    end Join;


    function Status
           (This : in Combinator_Result)
        return Result_Status is
    begin
        return This.Status;
    end Status;


    function Debug_String
           (This : in Combinator_Result)
        return String is
    begin
        return Integer'Image (This.Finish)
            & " " & Result_Status'Image (This.Status);
    end Debug_String;





    function So_Far
           (This : in Lexer_Context)
        return Token_Vector is
    begin
        return (This.Result_So_Far with null record);
    end So_Far;

    function Position
           (This : in Lexer_Context)
        return Positive is
    begin
        return This.Position;
    end Position;

    function Status
           (This : in Lexer_Context)
        return Result_Status is
    begin
        return This.Status;
    end Status;

    function Has_Pass
           (This : in Lexer_Context)
        return Boolean is
    begin
        return not This.Pass_Forward.Is_Empty;
    end Has_Pass;

    function Pass
           (This : in Lexer_Context)
        return Traits.Element_Array is
    begin
        return This.Pass_Forward.Element;
    end Pass;

    function Length
           (Vec : in Token_Vector)
        return Natural is
    begin
        return Integer (Token_Vectors.Vector (Vec).Length);
    end Length;

    function Element
           (Vec : in Token_Vector;
            Dex : in Positive)
        return Traits.Tokens.Token is
    begin
        return Token_Vectors.Vector (Vec).Element (Dex);
    end Element;




    function Is_Failure
           (Result : in Component_Result)
        return Boolean is
    begin
        return Result = Component_Failure;
    end Is_Failure;

    function Is_Success
           (Result : in Component_Result)
        return Boolean is
    begin
        return Result = Component_Success;
    end Is_Success;


end Packrat.Lexer.Debug;