OSDN Git Service
(root)
/
simplecms
/
utakata.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
parser_testをDatumParserに対応。
[simplecms/utakata.git]
/
src
/
parser
/
datum_parser.h
diff --git
a/src/parser/datum_parser.h
b/src/parser/datum_parser.h
index
1033b28
..
87d4bf0
100755
(executable)
--- a/
src/parser/datum_parser.h
+++ b/
src/parser/datum_parser.h
@@
-21,7
+21,8
@@
class IDatumBase;
};
namespace lexer {
};
namespace lexer {
-class ILexerCreater;
+class ILexerCreator;
+class IPartOfLexer;
};
namespace reader {
};
namespace reader {
@@
-31,6
+32,11
@@
class EncodingReader;
namespace parser {
class SyntaxError;
namespace parser {
class SyntaxError;
+class DatumTree;
+
+namespace detail {
+class IParserState;
+} // end of namespace detail
// 渡されたreaderから、lexerに基づいてdatumを構築し、返却します。n
// parse時に構文違反が発生したデータについては、GetSyntaxErrorから、
// 渡されたreaderから、lexerに基づいてdatumを構築し、返却します。n
// parse時に構文違反が発生したデータについては、GetSyntaxErrorから、
@@
-48,25
+54,38
@@
class DatumParser {
// 呼出元は、scoped_ptr等を利用して返されたポインタを保持するべきです。
// 内部にてなんらかのエラーが発生した場合、構文違反が発生します。
// また、何らかのエラーが発生した場合、返り値はNULLが返却されます。
// 呼出元は、scoped_ptr等を利用して返されたポインタを保持するべきです。
// 内部にてなんらかのエラーが発生した場合、構文違反が発生します。
// また、何らかのエラーが発生した場合、返り値はNULLが返却されます。
-
akebono::binary_tree<datum::IDatumBase>
* Parse(reader::EncodingReader* reader);
+
parser::DatumTree
* Parse(reader::EncodingReader* reader);
// 渡されたILexerCreatorを用いて、利用するLexerを設定します。
// 渡されたILexerCreatorを用いて、利用するLexerを設定します。
- void SetLexerWithCreator(const ILexerCreator& creator);
+ void SetLexerWithCreator(const
lexer::
ILexerCreator& creator);
// 構文違反が発生した場合に限り、作成されたSyntaxErrorが新規に作成されて
// 返却されます。
// 構文違反が発生していない場合、常にis_nullがtrueを返すsmart_ptrを
// 返却します。
// 構文違反が発生した場合に限り、作成されたSyntaxErrorが新規に作成されて
// 返却されます。
// 構文違反が発生していない場合、常にis_nullがtrueを返すsmart_ptrを
// 返却します。
- const
parser::SyntaxError
& GetSyntaxError() const {
- return
*
syntax_error_;
+ const
akebono::smart_ptr<parser::SyntaxError>
& GetSyntaxError() const {
+ return syntax_error_;
}
}
+ // 現在構文エラー情報を保持しているかどうかを返却します。
+ bool HasSyntaxError() const {return syntax_error_.is_null();}
+
private:
private:
+
+ // Parseの内部詳細を実装する関数です。実際の解析はこの関数内で行われます。
+ // datumの解析時に構文異常などが発生した場合、falseを返却します。
+ bool ParseDetail(const lexer::Token& token, DatumTree* target_tree);
+
// 内部で利用されるlexerを保存します。保存されるlexerは、set_lexer_creator
// によって新しいLexerCreatorが設定される度に更新されます。
akebono::scoped_ptr<lexer::IPartOfLexer> use_lexer_;
// 内部で利用されるlexerを保存します。保存されるlexerは、set_lexer_creator
// によって新しいLexerCreatorが設定される度に更新されます。
akebono::scoped_ptr<lexer::IPartOfLexer> use_lexer_;
+ // 構文異常などが発生した場合に作成される、構文異常用のオブジェクトです。
akebono::smart_ptr<parser::SyntaxError> syntax_error_;
akebono::smart_ptr<parser::SyntaxError> syntax_error_;
+
+ // 現在のParserの内部表現を保有し、各状態における処理を行う
+ // インターフェースの実装を保持します。
+ akebono::scoped_ptr<parser::detail::IParserState> current_state_;
};
}
};
}