【发布时间】:2014-12-07 16:32:54
【问题描述】:
我试图执行以下操作来解析多个“a”,然后解析一个“a”:
*(lit("a")) >> lit("a")
不幸的是,boost::spirit::qi 中的 Kleene 星 * 以一种急切的方式消耗了所有的“a”,之后没有回溯,最后一个 lit(a) 无法匹配任何内容。
当然,使用(例如)grep,以下内容会起作用:
$ echo "aaa" | grep "a*a"
aaa
在这里解决 qi 行为的最佳方法是什么?我知道回溯会弄乱语义动作,所以我们假设 qi 仅用于在 AST 中存储属性。
使用+ 代替* 不能解决我的问题;假设我有一个解析器 ignore_int_ 解析整数但不产生属性,那么我可能想使用:
*ignore_int_ >> int_
只存储最后一个整数。
【问题讨论】:
标签: c++ parsing boost boost-spirit