Parsing 关于LR解析器的问题

Parsing 关于LR解析器的问题,parsing,lr,Parsing,Lr,与其说“最右边的推导相反”,为什么他们不说“最左边的推导”?它们的意思是一样的吗?我读起来非常困惑 什么是闭包集,它如何在解析过程中发挥作用?我在互联网上找到的每一套课堂讲稿都假设我已经知道它是什么,它做什么 为了回答第二个问题,“闭包集”是解析器构造过程的一部分,用于标识解析器存在的“状态”。一旦识别了状态并构造了解析器,闭包集就不再起作用了——也就是说,它们在实际的解析过程中不起作用 “闭包集”是由闭包从一个或多个初始部分解析项构造的一组部分解析项。每个唯一的闭包集映射到单个状态。闭包集构造

与其说“最右边的推导相反”,为什么他们不说“最左边的推导”?它们的意思是一样的吗?我读起来非常困惑

  • 什么是闭包集,它如何在解析过程中发挥作用?我在互联网上找到的每一套课堂讲稿都假设我已经知道它是什么,它做什么


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

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


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

    问题是免费的;如果你有两个问题,那么问两个。不要把两个问题混为一谈。这样一来,就不清楚这两个问题是否都已经得到了回答。“最右边的反向派生”并不意味着要颠倒字符串或扫描的顺序。从起始符号到句子的派生词;解析从句子开始,以开始符号结束。因此,解析就是撤销派生(或者向后进行,如果您愿意的话),但是每个转换步骤仍然涉及最右边的非终结符。正如@MSalters所建议的,把你的问题分开,我会回答这个具体的问题。