LR 如何解析 select 一个符合条件的文法产生式(从叶子构造解析树)?

How does LR parsing select a qualifying grammar production (to construct the parse tree from the leaves)?

正在看LR解析的教程。本教程在此处使用示例语法:

S -> aABe
A -> Abc | b
B -> d

然后,为了说明解析算法的工作原理,教程在下面展示了解析单词“abbcde”的过程。

我了解在算法的每个步骤中,都会搜索符合条件的产生式(即语法规则,如 table 的第 2 列所示)以匹配字符串的一部分。但是 LR 解析如何在一组符合条件的产品中进行选择(在 table 的第 3 列中说明)?

字符串的 LR 解析反向跟踪最右推导。从这个意义上讲,如果您始终通过展开最右边的非终结符来派生字符串,那么所应用的归约顺序就是您将得到的结果,然后 运行 向后处理。 (在您的示例中试试这个 - 是不是很简洁?)

LR 解析器实际执行此操作的具体机制涉及使用 解析自动机,它跟踪语法生成中解析发生的位置,以及一些先行信息.有几种不同风格的 LR 解析器(LR(0)、SLR(1)、LALR(1)、LR(1) 等),它们在自动机的结构方式以及它们使用前瞻信息的方式上有所不同。您可能会发现搜索有关这些自动机如何工作的教程很有帮助,因为这是 LR 解析器实际工作方式的核心。