如何在BNF生产规则中处理“或”?

时间:2014-09-07 17:49:11

标签: parsing bnf

我正在查看SVG路径数据的BNF语法,其中一个推导规则是:

digit-sequence ::= digit | digit digit-sequence

此规则与:

之间是否存在语义差异
digit-sequence ::= digit digit-sequence | digit

|究竟是什么意思在BNF语法中?是应该选择第一个匹配,还是消耗大部分输入的匹配?

1 个答案:

答案 0 :(得分:0)

|在BNF语法中意味着交替,即如果当前令牌匹配一个或另一个替代,则必须接受它。这是tutorial on BNF.

但是,您引用的规则是递归的(注意数字序列在规则的左侧和右侧),因此该规则表示一系列数字,例如正则表达式中的[0-9] +。

BTW,解析SVG路径数据似乎是一项非常重要的任务,因此一般的BNF解析器曾被用于与XML解析器一起解析路径数据 - https://metacpan.org/release/MarpaX-Languages-SVG-Parser