Spirit Qi:在规则中插入预定义的输出

时间:2014-02-20 18:00:54

标签: c++ parsing boost boost-spirit boost-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

这可能吗?有没有办法控制迭代器在完成后如何前进?

1 个答案:

答案 0 :(得分:3)

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

如果对象涉及更多,您可以使用qi::eps

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

在每种情况下,只是一个没有解析任何内容的后续规则,因此迭代器不会移动。如果要移动它,则需要解析相应的部分并使用qi::omit来阻止属性(如果有的话)。