4

据我了解,如果输入流中存在错误,FOLLOW-Set 会在第一时间告诉我。那正确吗?

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

IE

[TOP]   X...[BOTTOM]

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

+ b

where+bare 都是终端。

假设 X""在其 FIRST 集中有 ie 空字符串。它+在他的第一组中没有。

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

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

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

先感谢您

4

1 回答 1

1

你是对的。解析器最终可以继续解析并最终以另一种方式发现冲突。除此之外,FOLLOW 集在推理语法时非常方便。不是解析器,而是构造语法的人。例如,如果您发现存在任何 FIRST/FIRST 或 FIRST/FOLLOW 冲突,则说明您的语法不明确,可能需要对其进行修改。

于 2015-01-06T17:29:52.743 回答