【发布时间】:2014-01-18 17:59:19
【问题描述】:
据我了解,如果输入流中存在错误,FOLLOW-Set 会在第一时间告诉我。对吗?
因为否则我想知道您实际上需要它做什么。假设您的解析器在堆栈顶部有一个非终端(在我们的课程中,我们使用堆栈作为 LL-Parsers 的抽象)
即
[TOP] X...[BOTTOM]
X - 让它成为一个非终结符 - 将在下一步中被替换,因为它位于堆栈的顶部。因此解析器询问解析表对 X 使用什么推导。考虑输入是
+ b
其中+ 和b 都是终端。
假设 X 在其 FIRST 集中有 "" 即空字符串。而且他的第一个集合中没有+。
据我在这种情况下看到的,解析器可以简单地检查在 X 的第一组中没有 +,然后使用让 X 分解为 "" 的推导,即空字符串,因为它是解析器如何继续解析输入而不抛出错误的唯一方法。如果输入流无效,解析器无论如何都会在稍后的某个时刻识别它。我知道 FOLLOW 集可以帮助在这里立即确定解析是否可以继续而没有错误。
我的问题是 - 这真的是 FOLLOW 集所扮演的唯一角色吗?
我希望我的问题属于这里 - 如果不是,我很抱歉。如果有不清楚的地方,也可以随时要求澄清。
提前谢谢你
【问题讨论】:
标签: parsing compiler-construction grammar context-free-grammar ll