掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
boost::spiritを使っての構文解析器を、1つのクラスにまとめたい (ID:70533)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
オリジナルを残してあまり弄らないように書いたつもりですが、 例えばこんな方法(参照で渡しておく)とか。 (なお、Spirit1.8ではなくSpirit2.0/classicで試してますので、 ヘッダ名やnamespace等は適宜置き換えてください。 Boost.Spiritは2.xになると1.xとはなんか別物…って感じです。 classicは2.xにおける1.x系の名残) #include <boost/spirit/include/classic.hpp> #include <boost/spirit/include/classic_parser.hpp> #include <boost/spirit/include/classic_actor.hpp> class CScriptParser { public: // parse_info boost::spirit::classic::parse_info<> parseInfo; // 構文解析時のトークン保存用 std::string name_buffer; struct Sparser : public boost::spirit::classic::grammar<Sparser> { template<typename S> struct definition { typedef boost::spirit::classic::rule<S> rule_t; rule_t A; // 構文解析ルールの記述 definition(const Sparser& self) { A = boost::spirit::classic::alpha_p[boost::spirit::classic::assign_a(self.name_buffer_)]; } const rule_t& start() const { return A; } }; explicit Sparser(std::string& name_buffer) : name_buffer_(name_buffer) {} std::string& name_buffer_; }; Sparser parser; explicit CScriptParser() : parser(name_buffer) { // test parseInfo = boost::spirit::classic::parse("a", parser, boost::spirit::classic::space_p); } };
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.