【问题标题】:Spirit Qi: Inserting pre-defined output in a ruleSpirit Qi:在规则中插入预定义的输出
【发布时间】:2014-02-20 18:00:54
【问题描述】:

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

就像这个例子: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

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

【问题讨论】:

    标签: c++ parsing boost boost-spirit boost-spirit-qi


    【解决方案1】:
    GiveQuoteOrText %= Quoted | qi::attr("Text!"); 
    

    如果对象比较多,可以使用qi::eps

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多