OSDN Git Service

utf8_string, utf8となっていたものを、scheme中のUnicodeの基点となるUniCharとUniStringに正規化。
[simplecms/utakata.git] / literal.h
1 #ifndef _LITERAL_H_
2 #define _LITERAL_H_
3
4 #include "smart_ptr.h"
5 #include "lexeme.h"
6
7 // 各種リテラルとして存在するオブジェクトを定義する。
8 // ここで定義されたリテラルについては、consに直接設定されるオブジェクトと
9 // なる。
10
11 namespace utakata {
12
13     namespace syntax {
14     
15         class DatumID;
16     
17     };
18
19     namespace unicode {
20         class UniString;
21     };
22     
23     namespace literal {
24         
25         struct LiteralData;
26         class Literal
27         {
28             // datumとしてリテラルを保持する。
29             // リテラルは、各オブジェクトを生成する役割も持つ。
30             // リテラルオブジェクトは、TreeNodeに補足されるためだけに
31             // 存在している。
32             // リテラルオブジェクトはdatumとしてのみ扱われ、処理されると
33             // そのままの値を返す。
34             // 各リテラルはIDと保持するデータが異なるだけなので、別段対した
35             // ことにはならない。
36         public:
37             Literal() {}
38             virtual ~Literal() {}
39
40             smart_ptr<unicode::UniString> toValue();
41
42             const smart_ptr<LiteralData>& getData() const;
43             syntax::DatumID getID() const;
44
45         private:
46
47             virtual smart_ptr<unicode::UniString> toValue_() = 0;
48             virtual const smart_ptr<LiteralData>& getData_() const = 0;
49             virtual syntax::DatumID getID_() const = 0;
50
51         };
52
53         // 渡されたlexemeに該当するLiteralを返す。
54         // 渡されるliteralはlexeme datumの範囲であることが予想されている。
55         smart_ptr<Literal> generateLiteral(smart_ptr<lexeme::ILexeme> l);
56
57     };
58
59 };
60
61 #endif /* _LITERAL_H_ */