2014-02-20 55 views
1

如何設置返回預定義輸出的規則,而不是從我的輸入文本中分析出某些內容?Spirit Qi:在規則中插入預定義的輸出

像這個例子:GiveQuoteOrText將首先嚐試使用Quoted解析輸入爲帶引號的字符串,如果輸入失敗,則應始終輸出「Text!」。不管輸入如何。

qi::rule<Iterator, std::string()> GiveQuoteOrText; 
qi::rule<Iterator, std::string()> Quoted; 

Quoted %= '"' >> *(char_ - '"') > '"'; 
GiveQuoteOrText %= Quoted | OUTPUT("Text!"); //made up an OUTPUT command 

這可能嗎?有沒有辦法控制迭代器完成後的進展?

回答

3
GiveQuoteOrText %= Quoted | qi::attr("Text!"); 

如果對象是更復雜,你可以使用qi::eps

rule = qi::eps[qi::_val = phx::construct<MyObject>(args)] 

這是在每種情況下只是沒有任何解析隨後的規則,所以迭代器不移動。如果您希望它移動,您需要解析相應的部分並使用qi::omit來阻止屬性(如果有的話)。

相關問題