2012-12-04 35 views
1

當我使用這氣語法從萊克斯接受令牌:如何在使用spirit :: qi時忽略來自spirit :: 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_MARKER只是爲了解析;我並不需要或想要捕捉它。

所以我嘗試用qi::lit忽略屬性:

pair %= qi::lit(token(ID_MARKER)) 
    >> ':' 
    >> atom 
    >> ',' 
    >> atom 
    ; 
從捕捉移除 m_dummy沿

,但我只是得到模板錯誤的牆上。

我該怎麼做,而不是清理呢?

+0

@llonesmiz +1 thx再次 - 省略完美的作品。如果您將其添加爲答案,我會接受它。 – kfmfe04

回答

3

沒有代碼來測試我不能肯定,但:

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

應該工作。您也可以在詞法分析器中添加token_def<lex::omit> marker;

相關問題