关于LR解析器的问题

时间:2014-05-27 18:09:38

标签: parsing lr

  1. 为什么他们不说“最左边的减少”而不是说“最右边的推导”?他们的意思是一样的吗?我阅读时非常困惑。

  2. 什么是闭包集,它如何在解析过程中发挥作用?我在互联网上找到的每一套讲义都假设我已经知道它是什么以及它做了什么。

1 个答案:

答案 0 :(得分:0)

为了回答第二个问题,“闭包集”是解析器构造过程的一部分,用于识别解析器存在的“状态”。一旦识别出状态并构造了解析器,闭包集就不再发挥作用 - 也就是说,它们不参与实际的解析过程。

“闭包设置”它是一组部分解析项,它是通过从一个或多个初始部分解析项闭合构造的。每个唯一的闭包集映射到单个状态。闭包集构造的规则是:如果集合包含“X→α_Aβ”形式的项目并且语法包含“A→δ”形式的规则,则将项目“A→_δ”添加到项目集。对于任何给定的项目集,您需要通过重复添加项目来计算闭包,直到不能再添加项目为止。这也忽略了前瞻(与LR(k)构造相关,但不适用于LALR(1)或SLR(1)构造)。

一旦确定了语法可达的所有不同闭包集,就为每个集分配一个唯一的“状态”符号(通常只是一个整数),这些符号将在解析器堆栈上被操作。解析输入时的运行时。闭包集信息根本不用于解析,尽管知道调试错误指定语法的行为不当的解析器可能是有用的。