提升精神:如何解析直到我们有“->”
Posted
技术标签:
【中文标题】提升精神:如何解析直到我们有“->”【英文标题】:boost spirit: how to parse until we have "->" 【发布时间】:2012-11-22 08:40:23 【问题描述】:我正在尝试解析 predicate -> action
形式的 rule
。
我的问题是predicate
可以是任何有效的数学表达式,因此它实际上可能包含一个减号或一个更大的符号(但我们必须按顺序禁止它们,因为这是我们的标记想将predicate
与action
分开)。
基本上,我希望predicate
消耗所有非空格,直到它碰到字符串"->"
。
我该怎么做?
是修复我在下面评论的行的正确方法还是我应该更好地定义 predicate
是什么,就有效表达式而言,并让解析器在 predicate
结束时落入 "->"
,根据到那个有效的表达?
rule %=
predicate
>> "->"
>> action
;
predicate %= (+~(qi::char_("-"))); // BAD: works only if no minus sign in predicate
action %= (+(qi::char_));
【问题讨论】:
【参考方案1】:改写predicate
如下:
predicate = +(qi::char_ - "->");
action = +(qi::char_);
等价
predicate = +(!qi::lit("->") >> qi::char_);
应该这样做。
查看文档
Difference Parser (a - b) Not-Predicate Parser (!a)【讨论】:
以上是关于提升精神:如何解析直到我们有“->”的主要内容,如果未能解决你的问题,请参考以下文章