0

我一生都无法弄清楚为什么 Alternative 是递归的。它真的给我的解析器带来了麻烦。

选择 ::
    [空的]
    替代术语

这是规范的语义部分中的一个注释,并不完全清楚。也许一旦我理解了这一点,推理就会被揭示出来?

注意 连续术语尝试同时匹配输入字符串的连续部分。如果左边的 Alternative、右边的 Term 和正则表达式的 sequel 都有选择点,则 sequel 中的所有选择都尝试过,然后再继续 right Term 中的下一个选择,并且 right Term 中的所有选择都尝试过继续左侧备选方案中的下一个选择。

什么样的解析器可以正确处理左递归语法?

4

1 回答 1

2

因为对于某些类型的解析器,左递归要好得多(例如,对于 yacc - 请参阅此处的第 6.2 节以获得解释)。

如果它给您的特定解析器造成麻烦,那么一定要把它换掉——它不会以任何方式影响语言的定义。

于 2010-06-25T14:42:44.687 回答