据我所知,如果输入流中有错误,FOLLOW-Set会在第一时间告诉我。是吗?
因为否则我想知道你真正需要它的是什么。考虑到你的解析器在堆栈顶部有一个非终端(在我们的类中,我们使用堆栈作为LL-Parsers的抽象)
即
[TOP] X...[BOTTOM]
X - 让它成为非终端 - 将在下一步中被替换,因为它位于堆栈的顶部。因此,解析器会向解析表询问用于X的派生。考虑输入是
+ b
+
和b
都是终端。
假设X在其FIRST集中有""
,即空字符串。并且在他的第一集中没有+
。
就我在这种情况下看到的情况而言,解析器可以简单地检查第一组X中没有+
,然后使用导数让X溶解成""
即空字符串,因为它是解析器可能继续解析输入而不抛出错误的唯一方法。如果输入流无效,则解析器将在稍后的某个时刻识别它。我知道FOLLOW集可以帮助确定解析是否可以继续而不会出错。
我的问题是 - 这真的是FOLLOW套装扮演的唯一角色吗?
我希望我的问题属于这里 - 如果不是,我很抱歉。如果不清楚,也可以随时要求澄清。
提前谢谢
答案 0 :(得分:1)
你是对的。解析器最终可能只是继续解析,最终会以另一种方式发现冲突。 除此之外,FOLLOW集在推理语法方面非常方便。不是由解析器,而是由构造语法的人。例如,如果您发现存在任何FIRST / FIRST或FIRST / FOLLOW冲突,则您的语法模糊不清,可能需要修改它。