灵气:在规则中插入预定义的输出

Spirit Qi: Inserting pre-defined output in a rule

本文关键字:预定义 输出 插入 规则 灵气      更新时间:2023-10-16
如何

设置一个规则来返回预定义的输出,而不是从我的输入文本中解析的内容?

像这个例子:GiveQuoteOrText将首先尝试使用 Quoted 将输入解析为带引号的字符串,如果失败,无论输入如何,都应始终输出"文本!

qi::rule<Iterator, std::string()> GiveQuoteOrText;
qi::rule<Iterator, std::string()> Quoted;
Quoted %= '"' >> *(char_ - '"') > '"';
GiveQuoteOrText %= Quoted | OUTPUT("Text!"); //made up an OUTPUT command

这可能吗? 有没有办法控制迭代器完成后的进度?

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

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

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

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