私は理解できないような非常に単純な問題を抱えています。問題が何であるかを知るためにコードを見る必要はないと確信しているので、わざわざ完全なコードを投稿することはしません。
次のようなファイルを解析したいとします。
"dp",1,1
"dp",2,2
各データ行を構造体にして、それらをベクトルに配置する必要があります。
namespace node {
struct dp { int a; int b; };
std::vector<dp> data;
}
それらをFusionに追加します。
BOOST_FUSION_ADAPT_STRUCT(obj::dp,(int,a)(int,b))
BOOST_FUSION_ADAPT_STRUCT(node::data,(std::vector<node::dp>,data))
私の構文解析文法は次のようになります。
_dp %= lit("\"dp\",") >> int >> ',' >> int;
_d %= *_dp;
私のルールは次のとおりです。
// in node namespace
qi::rule<Iterator,data(),Skipper> _d;
qi::rule<Iterator,dp(),Skipper> _dp;
問題はそれです...
_d %= *_dp;
コンパイルしませんが、その前に何かを置くとコンパイルします。
_d %= 'a' >> *_dp;
大まかに言うと、入力データに「a」がないため、これは解析されませんが、ポイントは得られます。
このようなことをどのように処理しますか?