据我了解,如果输入流中出现错误,FOLLOW-Set 会在第一时间告诉我。是对的吗?

因为否则我想知道你真正需要它做什么。考虑到您的解析器在堆栈顶部有一个非终端(在我们的类(class)中,我们使用堆栈作为 LL-Parsers 的抽象)

IE。

[TOP]   X...[BOTTOM]

X - 让它成为一个非终端 - 将在下一步中被替换,因为它位于堆栈的顶部。因此解析器询问解析表对 X 使用什么派生。考虑输入是
+ b

其中 +b 都是终端。

假设 X 有 "",即其第一个集合中的空字符串。它在他的第一组中没有 +

就我在这种情况下看到的而言,解析器可以简单地检查 X 的第一组中是否没有 +,然后使用派生让 X 分解为 "" 即空字符串,因为它是解析器的唯一方式可能可以继续解析输入而不抛出错误。如果输入流无效,解析器无论如何都会在稍后的某个时刻识别它。我知道 FOLLOW 集可以帮助立即确定解析是否可以继续而不会出错。

我的问题是 - 这真的是 FOLLOW 集扮演的唯一角色吗?

我希望我的问题属于这里 - 如果不是,我很抱歉。如果有不清楚的地方,也可以随时要求澄清。

先感谢您

最佳答案

你是对的。解析器最终可以继续解析并最终以另一种方式发现冲突。
除此之外,FOLLOW 集在推理语法时非常方便。不是由解析器,而是由构建语法的人。例如,如果您发现存在任何 FIRST/FIRST 或 FIRST/FOLLOW 冲突,则您创建了一个歧义的语法,并且可能想要修改它。

关于parsing - LL-1 解析器 : Is the FOLLOW-Set really necessary?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21207772/

10-11 23:19
查看更多