OSDN Git Service

object表現であったobject.cppを削除し、datum.cppとして再定義した。
[simplecms/utakata.git] / src / parser / parser_handler.h
1 #ifndef _PARSER_HANDLER_H_
2 #define _PARSER_HANDLER_H_
3
4 #include "smart_ptr.h"
5 #include <string>
6 #include <stack>
7 #include <vector>
8 #include "parser_status.h"
9
10 namespace utakata {
11
12     namespace lexeme {
13         class ILexeme;
14     };
15
16     namespace data {
17         class Object;
18     };
19
20     namespace gc {
21         class GarbageCollector;
22     };
23
24     namespace parser {
25
26         struct HandlerData
27         {
28             HandlerData(gc::GarbageCollector& g) : gc(g), chain(false) {}
29
30             smart_ptr<lexeme::ILexeme> lexm;
31             std::stack<data::Object> stack;
32             std::stack<std::vector<data::Object> > compounds;
33             gc::GarbageCollector& gc;
34             std::stack<PARSERSTATUS> status;
35             std::string error;   // syntax errorなどを通知する。
36             bool chain;          // 現在のlexemeを維持したまま次のstatusに基づいた処理を行う。
37         };
38         
39         class IParserHandler
40         {
41         public:
42             
43             IParserHandler() {}
44             virtual ~IParserHandler() {}
45
46             // 構文木のスタックとstatusのスタックを元に、Treeを
47             // 構築する。
48             bool exec(HandlerData& data);
49
50         private:
51
52             // 実際に起動される関数。
53             // 処理が行われた場合にはtrue、行われなかった場合にはfalseを
54             // 返すこと。
55             virtual bool exec_(HandlerData& data) = 0;
56
57         };
58
59     };
60
61 };
62
63 #endif /* _PARSER_HANDLER_H_ */