3

我正在尝试解析rule表单predicate -> action

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

本质上,我想predicate消耗所有非空格,直到它碰到 string "->"

我该怎么做呢?

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

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

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

1 回答 1

3

改写predicate如下:

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

等效地,

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

应该做同样的事情。

查看文档

于 2012-11-22T08:53:11.223 回答