1

Lex からトークンを受け取るこの qi 文法を使用すると、次のようになります。

pair %=  token(ID_MARKER)
    >> ':'
    >> atom
    >> ','
    >> atom
    ;

このフュージョン/タプル マッピングと組み合わせて、キャプチャを支援します。

BOOST_FUSION_ADAPT_STRUCT(
    Client::pair_rec,
    (std::string,      m_dummy  )  // want to rid of this capture of ID_MARKER
    (Client::atom_rec, m_atom_1 )
    (Client::atom_rec, m_atom_2 )
)

すべて正常に動作します。

ID_MARKERしかし、解析のためにだけを使用したいと思います。私は本当にそれをキャプチャする必要も、キャプチャしたくもありません。

そこで、次を使用して属性を無視しようとしましたqi::lit:

pair %=  qi::lit( token(ID_MARKER) )
    >> ':'
    >> atom
    >> ','
    >> atom
    ;

キャプチャから削除するm_dummyだけでなく、テンプレート エラーの壁が表示されます。

これをクリーンアップするには、代わりに何をすべきですか?

4

1 に答える 1

3

テストするコードがないと確信が持てませんが、

pair %=  qi::omit[ token(ID_MARKER) ]
    >> ':'
    >> atom
    >> ','
    >> atom
    ;

動作するはずです。token_def<lex::omit> marker;レクサーに a を追加することもできます。

于 2012-12-04T08:01:02.083 に答える