如何设置返回预定义输出的规则而不是从输入文本中解析的内容?
与此示例类似: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
这可能吗?有没有办法控制迭代器在完成后如何前进?
答案 0 :(得分:3)
GiveQuoteOrText %= Quoted | qi::attr("Text!");
如果对象涉及更多,您可以使用qi::eps
:
rule = qi::eps[qi::_val = phx::construct<MyObject>(args)]
在每种情况下,只是一个没有解析任何内容的后续规则,因此迭代器不会移动。如果要移动它,则需要解析相应的部分并使用qi::omit
来阻止属性(如果有的话)。