1

当我使用这个 qi 语法接受来自 Lex 的标记时:

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_MARKERjust 进行解析;我真的不需要或不想捕捉它。

所以我试图通过使用忽略该属性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;在你的词法分析器中添加一个。

于 2012-12-04T08:01:02.083 回答