【发布时间】:2022-01-03 01:41:06
【问题描述】:
在生成的解析函数中,我们使用一种算法,该算法查看令牌列表并根据当前的非终端 FIRST 集选择规则(替代)。如果它包含一个 epsilon(规则可以为空),FOLLOW 集也会被检查。
考虑以下语法 [不是 LL(1)]:
B : A term
A : N1 | N2
N1 :
N2 :
在计算FOLLOW 集终端term 期间,将从A 传播到N1 和N2,因此FOLLOW 集不会帮助我们做出决定。
另一方面,如果确实有一个可以为空的替代方案,我们肯定知道如何继续执行,即使当前令牌与 FIRST 集中的任何内容都不匹配(通过选择epsilon 产生)。
如果上述陈述为真,FOLLOW 集是多余的。是否仅用于错误处理?
【问题讨论】:
-
我看了讲座,看书,实现了 LL(1) 解析器生成器,用它制作了可用的 C 子集解析器,然后才弹出这个问题。如果您知道需要设置 FOLLOW 的示例,请指出给我。
标签: parsing context-free-grammar ll