2

重複の可能性:
qiが属性を返すときに、BoostSpiritLexとQiを連携させることができません

私は理解できないような非常に単純な問題を抱えています。問題が何であるかを知るためにコードを見る必要はないと確信しているので、わざわざ完全なコードを投稿することはしません。

次のようなファイルを解析したいとします。

"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」がないため、これは解析されませんが、ポイントは得られます。

このようなことをどのように処理しますか?

4

0 に答える 0