OSDN Git Service

object表現であったobject.cppを削除し、datum.cppとして再定義した。
[simplecms/utakata.git] / src / lexer / token.h
1 // lexerによって作成された各トークンを格納するためのインターフェースです。
2 // 実体として存在し、内部では解釈された文字列と、tokenのタイプのみが
3 // 格納されています。
4 // 格納されたlexemeは、評価された時に改めて型にあった値に変更されます。
5 #ifndef _UTAKATA_SRC_LEXER_TOKEN_H_
6 #define _UTAKATA_SRC_LEXER_TOKEN_H_
7
8 #include "lib/smart_ptr.h"
9
10 namespace utakata {
11
12 namespace unicode {
13 class UniString;
14 }
15
16 namespace lexer {
17
18 class Token {
19   // 各非終端記号を表すためのクラスです。このクラスは、各Lexerによって
20   // 作成され、一度作成された後は変更されることはありません。
21   // 実際にはこのクラスより、それぞれの値に評価されます。
22  public:
23
24   enum TokenType {
25     kEOS  = -1,
26     kOpenParenthesis,
27     kCloseParenthesis,
28     kOpenBracket,
29     kCloseBracket,
30     kCharactor,
31     kString,
32     kBoolean,
33     kVector,
34     kByteVector,
35     kNumber,
36     kIdentifier,
37     kDot,
38     kQuote,
39     kQuasiquote,
40     kUnquote,
41     kUnquoteSplicing,
42     kSyntax,
43     kQuasisyntax,
44     kUnsyntax,
45     kUnsyntaxSplicing,
46     kDatumComment,
47     kSpecialComment,
48     kComment,
49     kUnToken,
50   };
51
52   Token() : string_(), type_(kUnToken) {}
53   Token(const unicode::UniString& lexeme_str, const TokenType type);
54   Token(const Token& other);
55   virtual ~Token() {}
56
57   Token& operator=(const Token& rh);
58
59   // 各非終端記号などの型を表すenum値を返します。
60   const TokenType type() const {return type_;}
61
62   // それぞれの型を表すデータです。型によって内容は異なります。
63   const unicode::UniString& string() const {return *string_;}
64
65  private:
66   // lexemeを表す文字列です。
67   akebono::smart_ptr<unicode::UniString> string_;
68
69   // lexemeの型を表すEnum値です。
70   TokenType type_;
71 };
72 }
73 }
74
75 #endif /* _UTAKATA_SRC_LEXER_TOKEN_H_ */