是否有一种著名的解析器描述语言(如 Backus-Naur)允许从令牌流中提取重复次数的重复?对于奖励积分,是否有任何支持此语法的 C++ 库?
例子:
让我们称之为“元令牌”#,然后我正在寻找一种描述语言,它将处理以下形式的生产规则:
RULE = # EXPRESSION
作为:
RULE = '1' EXPRESSION
| '2' EXPRESSION EXPRESSION
| '3' EXPRESSION EXPRESSION EXPRESSION
| '4' EXPRESSION EXPRESSION EXPRESSION EXPRESSION
| ...
请注意,计数是实际的字符文字。这与增强的 Backus-Naur 形式形成对比,我们可以有以下形式的规则:
RULE = 2*3EXPRESSION
相当于:
RULE = EXPRESSION EXPRESSION
| EXPRESSION EXPRESSION EXPRESSION
对 dgarant 的回应:
我不确定这就是我想要的。我正在考虑以下几点:
int i;
bool r = phrase_parse(first, last,
(
int_[ phoenix::ref(i) = _1] >> repeat(i)[/*EXPRESSION*/]
)
space );
更重要的是,虽然我希望有一些可以描述这个想法的正式模式。在一个侧面节点上,Spirit 确实需要一些时间来适应,但非常棒。我是一个粉丝。