OSDN Git Service

全体の環境を表すenvironmentの追加。
[simplecms/utakata.git] / literal_data.h
1 #ifndef _DATA_H_
2 #define _DATA_H_
3
4 #include "smart_ptr.h"
5
6
7 namespace utakata {
8
9     namespace utf8_string {
10     
11         class UTF8String;
12     
13     };
14
15     namespace literal {
16
17         struct StringData
18         {
19             // 文字列を保持するためのデータ型. たんにそのまま.
20             smart_ptr<utf8_string::UTF8String> str;
21         };
22
23         struct NumberData
24         {
25             // 数値のデータの受け渡しを行うためのデータ型.
26             // 数値データは, それぞれ実数部分と虚数部分, そして
27             // 正確性と radix を定義する必要がある.
28             // radix = 10 ではない場合, 常に exact = true として振る舞う.
29             smart_ptr<utf8_string::UTF8String> real;
30             smart_ptr<utf8_string::UTF8String> imagin;
31             bool exact;
32             int radix;
33         };
34
35         struct BooleanData
36         {
37             // Boolean を表すデータ. これでは bool 型の変数によって#t と#f を表現
38             // することにする.
39             bool boolean;
40             smart_ptr<utf8_string::UTF8String> str;
41         };
42
43         struct CharactorData
44         {
45             // Charactor を構成するためのデータ.
46             // 実際には UTF8Char を利用すべきであるが, ここでは単に lexeme から
47             // 受け取ったデータを利用するに留める.
48             smart_ptr<utf8_string::UTF8String> spec;
49         };
50
51         struct SymbolData
52         {
53             // シンボルを構成するためのデータ.
54             smart_ptr<utf8_string::UTF8String> id;
55             
56         };
57     
58         struct LiteralData
59         {
60             // リテラルとして存在するデータの一部のみを
61             // 内包する.
62             // このデータは, 実際には Lexeme と Object 間でのデータの受け渡しを
63             // 行うためのインタフェースとなっている.
64             // この上のlexemeによって、返される値が確定されると仮定するため、
65             // タグ情報などは含まない。
66
67             smart_ptr<StringData>    string;
68             smart_ptr<NumberData>    number;
69             smart_ptr<BooleanData>   boolean;
70             smart_ptr<CharactorData> charactor;
71             smart_ptr<SymbolData>    symbol;
72         };
73
74         // 各データ入りのLiteralDataを返すヘルパー関数。
75         smart_ptr<LiteralData> makeString(const utf8_string::UTF8String& str);
76         smart_ptr<LiteralData> makeNumber(const utf8_string::UTF8String& real,
77                                           const utf8_string::UTF8String& imagin,
78                                           bool exact, bool radix);
79         smart_ptr<LiteralData> makeBoolean(const utf8_string::UTF8String& str,
80                                            bool boolean);
81         smart_ptr<LiteralData> makeCharactor(const utf8_string::UTF8String& str);
82         smart_ptr<LiteralData> makeSymbol(const utf8_string::UTF8String& str);
83
84     };
85
86 };
87
88 #endif /* _DATA_H_ */