什么是编译器设计中 LR (0) 项的规范集合?

语法 G 的 LR (0) 项目由一个产生式组成,其中符号点 (.) 插入到产生式 RHS 的某个位置。

例如- 对于生产 S → ABC,生成的 LR (0) 项目将是 -

S →∙ ABC

S → A ∙ BC

S → AB ∙ C

S → ABC ∙

产生式 S → ε 只产生一项,即 S →∙

规范 LR (0) 集合有助于构建称为简单 LR (SLR) 解析器的 LR 解析器。

要为语法创建 Canonical LR (0) 集合,需要做 3 件事 -

  • 增强语法

  • 闭包函数

  • 转到函数

增强语法- 如果语法 G 具有起始符号 S,则增强语法是具有新起始符号 S' 的新语法 G'。此外,它将包含产生式 S′ → S。

闭包- 对于上下文无关文法 G,如果 I 是文法 G 的项目或状态集,则 -

  • I 中的每个项目都在闭包 (I) 中。

  • 如果规则 A → α。B β 是闭包 (I) 中的一条规则,B 有另一个规则,例如 B → γ,那么闭包 (I) 将由 A → α 组成。Bβ 和 B → 。γ

闭包计算

程序关闭(一)

  • 开始

  • 重复

  • 对于每个规则 A→α∙B β 在 I 和 B→γ 在 G

以上是 什么是编译器设计中 LR (0) 项的规范集合? 的全部内容, 来源链接: utcz.com/z/363369.html

回到顶部