【问题标题】:LL-1 Parsers: Is the FOLLOW-Set really necessary?LL-1 解析器:FOLLOW-Set 真的有必要吗?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2020-03-01
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多