aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yson/token.h
blob: a0a3975eff9e1bbac059795c99df61befaaeaf03 (plain) (blame)
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
#pragma once

#include "public.h"

#include <util/generic/strbuf.h>

namespace NYson {
    //////////////////////////////////////////////////////////////////////////////// 

    enum ETokenType { 
        EndOfStream, 

        String, 
        Int64, 
        Uint64, 
        Double, 
        Boolean, 

        // Special values: 
        // YSON 
        Semicolon,    // ; 
        Equals,       // = 
        Hash,         // # 
        LeftBracket,  // [ 
        RightBracket, // ] 
        LeftBrace,    // { 
        RightBrace,   // } 
        LeftAngle,    // < 
        RightAngle,   // > 

        // Table ranges 
        LeftParenthesis,  // ( 
        RightParenthesis, // ) 
        Plus,             // + 
        Colon,            // : 
        Comma,            // , 
    }; 

    //////////////////////////////////////////////////////////////////////////////// 

    ETokenType CharToTokenType(char ch); 
    char TokenTypeToChar(ETokenType type); 
    TString TokenTypeToString(ETokenType type); 

    //////////////////////////////////////////////////////////////////////////////// 

    class TLexerImpl; 

    //////////////////////////////////////////////////////////////////////////////// 

    class TToken { 
    public: 
        static const TToken EndOfStream; 

        TToken(); 
        TToken(ETokenType type); 
        explicit TToken(const TStringBuf& stringValue); 
        explicit TToken(i64 int64Value); 
        explicit TToken(ui64 int64Value); 
        explicit TToken(double doubleValue); 
        explicit TToken(bool booleanValue); 

        ETokenType GetType() const { 
            return Type_; 
        } 

        bool IsEmpty() const; 
        const TStringBuf& GetStringValue() const; 
        i64 GetInt64Value() const; 
        ui64 GetUint64Value() const; 
        double GetDoubleValue() const; 
        bool GetBooleanValue() const; 

        void CheckType(ETokenType expectedType) const; 
        void Reset(); 

    private: 
        friend class TLexerImpl; 

        ETokenType Type_; 

        TStringBuf StringValue; 
        i64 Int64Value; 
        ui64 Uint64Value; 
        double DoubleValue; 
        bool BooleanValue; 
    }; 

    TString ToString(const TToken& token); 

    //////////////////////////////////////////////////////////////////////////////// 

} // namespace NYson