【问题标题】:boost spirit: how to parse until we have "->"提升精神:如何解析直到我们有“->”
【发布时间】:2012-11-22 08:40:23
【问题描述】:

我正在尝试解析 predicate -> action 形式的 rule

我的问题是predicate 可以是任何有效的数学表达式,因此它实际上可能包含一个减号或一个更大的符号(但我们必须按顺序禁止它们,因为这是我们的标记想将predicateaction 分开)。

基本上,我希望predicate 消耗所有非空格,直到它碰到字符串"->"

我该怎么做?

是修复我在下面评论的行的正确方法还是我应该更好地定义 predicate 是什么,就有效表达式而言,并让解析器在 predicate 结束时落入 "->",根据到那个有效的表达?

rule %=
  predicate
  >> "->"
  >> action
  ;

predicate %= (+~(qi::char_("-"))); // BAD: works only if no minus sign in predicate
action    %= (+(qi::char_));

【问题讨论】:

    标签: c++ boost-spirit


    【解决方案1】:

    改写predicate如下:

    predicate = +(qi::char_ - "->"); 
    action    = +(qi::char_);
    

    等价

    predicate = +(!qi::lit("->") >> qi::char_); 
    

    应该这样做。

    查看文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      相关资源
      最近更新 更多