123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #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
|