token.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #pragma once
  2. #include "public.h"
  3. #include <util/generic/strbuf.h>
  4. namespace NYson {
  5. ////////////////////////////////////////////////////////////////////////////////
  6. enum ETokenType {
  7. EndOfStream,
  8. String,
  9. Int64,
  10. Uint64,
  11. Double,
  12. Boolean,
  13. // Special values:
  14. // YSON
  15. Semicolon, // ;
  16. Equals, // =
  17. Hash, // #
  18. LeftBracket, // [
  19. RightBracket, // ]
  20. LeftBrace, // {
  21. RightBrace, // }
  22. LeftAngle, // <
  23. RightAngle, // >
  24. // Table ranges
  25. LeftParenthesis, // (
  26. RightParenthesis, // )
  27. Plus, // +
  28. Colon, // :
  29. Comma, // ,
  30. };
  31. ////////////////////////////////////////////////////////////////////////////////
  32. ETokenType CharToTokenType(char ch);
  33. char TokenTypeToChar(ETokenType type);
  34. TString TokenTypeToString(ETokenType type);
  35. ////////////////////////////////////////////////////////////////////////////////
  36. class TLexerImpl;
  37. ////////////////////////////////////////////////////////////////////////////////
  38. class TToken {
  39. public:
  40. static const TToken EndOfStream;
  41. TToken();
  42. TToken(ETokenType type);
  43. explicit TToken(const TStringBuf& stringValue);
  44. explicit TToken(i64 int64Value);
  45. explicit TToken(ui64 int64Value);
  46. explicit TToken(double doubleValue);
  47. explicit TToken(bool booleanValue);
  48. ETokenType GetType() const {
  49. return Type_;
  50. }
  51. bool IsEmpty() const;
  52. const TStringBuf& GetStringValue() const;
  53. i64 GetInt64Value() const;
  54. ui64 GetUint64Value() const;
  55. double GetDoubleValue() const;
  56. bool GetBooleanValue() const;
  57. void CheckType(ETokenType expectedType) const;
  58. void Reset();
  59. private:
  60. friend class TLexerImpl;
  61. ETokenType Type_;
  62. TStringBuf StringValue;
  63. i64 Int64Value;
  64. ui64 Uint64Value;
  65. double DoubleValue;
  66. bool BooleanValue;
  67. };
  68. TString ToString(const TToken& token);
  69. ////////////////////////////////////////////////////////////////////////////////
  70. } // namespace NYson