找到 138 篇文章 关于编译器设计

考虑语法 S → CC C → cC | d 构建 LALR(1) 解析器的解析表。

Ginni
更新于 2021年11月2日 11:56:06

6K+ 次浏览

解决方案步骤1 - 构建 LR(1) 项目集。首先,应生成所有 LR(1) 项目集。在这些状态中,状态 I3 和 I6 可以合并,因为它们具有相同的核心或第一部分,但后视符的第二部分不同。同样,状态 I4 和 I7 也相同。同样,状态 I8 和 I9 也相同。因此,I3 和 I6 可以组合成 I36。I4 和 I7 组合成 I47。I8 和 I9 组合成 I89。因此,状态将是∴ I3 = goto(I0, c) 但 I3、I6 组合成 I36 ∴ I36 = ... 阅读更多

什么是 LALR(1) 解析器?

Ginni
更新于 2021年11月2日 11:50:29

4K+ 次浏览

LALR 解析器是前瞻 LR 解析器。它的功能介于 SLR 和 CLR 解析器之间。它是 CLR 解析器的压缩版本,因此在此获得的表将比 CLR 解析表更小。这里,首先,我们将构建 LR(1) 项目。接下来,我们将查找具有相同第一部分的项目,并将它们合并以形成单个项目集。这意味着状态具有相同的第一部分,但不同的第二部分可以集成到单个状态或项目中。例如。假设如果 I4:C → d ∙,c ... 阅读更多

查找语法的规范解析表 (CLR) 或 LR(1) 解析表。S → CC C → cC | d

Ginni
更新于 2021年11月2日 11:46:03

6K+ 次浏览

解决方案步骤1 - 构造增广文法(0) S′ → S(1) S → CC(2) C → cC(3) C → d。步骤2 - 查找闭包和 goto 以构造 LR(1) 项目。对 I7、I8、I9 应用 goto 在 I7、I8、I9 中,我们有产生式 C → d ∙,$,c → cC ∙,c | d 和 ∙ C → cC ∙,$,即点无法进一步移动。因此,goto 不能应用于 I7、I8、I9。绘制 DFA 首先,10 个状态,即 I0 到 I9 将作为 DFA 的节点。使用 goto 语句连接边。例如,goto(I0, S) = I1 ∴ ... 阅读更多

什么是 CLR(1) 解析器?

Ginni
更新于 2021年11月2日 11:27:48

5K+ 次浏览

CLR 定义规范前瞻。CLR 解析使用 LR(1) 项目的规范集合来构造 CLR(1) 解析表。CLR(1) 解析表与 SLR(1) 解析相比,状态数更多。在 CLR(1) 中,它只能在后视符中找到归约节点。CLR 解析器的运行方式为语法的 LR(1) 项目集合的构建它需要三件事增广文法闭包函数goto 函数增广文法 它是一个新的文法 G′,它包含一个新的产生式 S′ → S,以及给定文法 G 的所有其他产生式。闭包过程 closure(I)begin Repeat for each item A → ... 阅读更多

为以下文法构造 SLR 解析表。此外,解析输入字符串 a * b + a。

Ginni
更新于 2021年11月2日 11:25:43

36K+ 次浏览

描述 - 考虑文法 E → E + T | T T → TF | F F → F * | a | b。解决方案步骤1 - 构造增广文法并编号产生式。(0) E′ → E(1) E → E + T(2) E → T(3) T → TF(4) T → F(5) F → F ∗(6) F → a(7) F → b。步骤2 - 查找闭包和 goto 函数以构造 LR(0) 项目。方框代表新状态,圆圈代表重复状态。FOLLOW 的计算我们可以找出 FOLLOW(E) = {+, $} FOLLOW(T) = {+, a, b, $} FOLLOW(F) = {+, *, a, b, $} 输入字符串 a * b + a 的解析 - 堆栈 ... 阅读更多

为以下文法构造 SLR(1) 解析表:S → xAy | xBy | xAz A → qs | q B → q

Ginni
更新于 2021年11月2日 11:14:16

3K+ 次浏览

解决方案步骤1 - 构造增广文法(0) S′ → S(1) S → xAy(2) S → xBy(3) A → qS(4) A → q(5) B → q步骤2 - 查找闭包和 goto 函数以构造 LR(0) 项目。此处方框代表新状态,圆圈代表重复状态。步骤3 - FOLLOW 的计算S → xAy FOLLOW(S) = {$} (1)应用 FOLLOW 的规则 (2a)。将 S → xAy 与 A → ... 阅读更多

证明每个 SLR(1) 都是无歧义的,但有些无歧义的文法不是 SLR(1)。检查以下产生式:S → L = R S → R L → * R L → id R → L

Ginni
更新于 2021年11月2日 11:04:51

3K+ 次浏览

解决方案步骤1 - 首先,将其转换为增广文法 G′ 并对产生式进行编号(0) S′ → S(1) S → L = R(2) S → R(3) L →∗ R(4) L → id(5) R → L步骤2 - 查找闭包和 goto 函数以构造 LR(0) 项目。在以下 LR(0) 项目集中,方框代表新状态,圆圈代表重复状态步骤3 - FOLLOW 的计算 - 应用 FOLLOW 的规则 (1),我们得到 FOLLOW(S) = $ (1)S ... 阅读更多

在编译器设计中,SLR、CLR 和 LALR 解析器之间有什么区别?

Ginni
更新于 2021年11月2日 11:00:27

53K+ 次浏览

SLR 解析器SLR 代表“简单 LR 解析器”。它执行起来非常简单且经济高效。SLR 解析动作和 goto 函数来自识别可行前缀的确定性有限自动机。它不会为所有文法专门定义解析动作表,但在几种编程语言的文法上会成功。给定一个文法 G。它扩充 G 以生成 G’,并从 G’ 中构造 C,即 G’ 的规范项目集集合。它可以使用以下简单的 LR 解析表从 C 构造 ACTION 解析动作函数和 GOTO goto 函数 ... 阅读更多

如何填充解析表中的条目?

Ginni
更新于 2021年11月2日 10:51:02

334 次浏览

解析器是编译的第二阶段。解析器将其输入作为从上一阶段(即词法分析阶段)生成的标记,并将它们组合起来,以便可以识别它们的语法。例如,考虑 I0 I0 - E′ → ∙ E E → ∙ E + T E → ∙ T T → ∙ T ∗ F T → ∙ F F → ∙ (E) F → ∙ id 填充移位条目在 SLR 解析表构建算法的规则 (2a) 上应用于一组 ... 阅读更多

为以下文法构造 SLR(1) 解析表:1. E → E + T 2. E → T 3. T → T * F 4. T → F 5. F → (E) 6. F → id

Ginni
更新于 2021年11月2日 10:49:31

853 次浏览

解决方案生成 SLR 解析表的步骤生成 LR(0) 项目的规范集合根据解析表算法的规则 (2b) 计算 FOLLOW。FOLLOW 的计算根据 FOLLOW 的规则 (1) FOLLOW(E) = {$ } (1)E → E + T应用 FOLLOW 的规则 (2)即,将 E → E + T 与 A → αBβ 进行比较 E → E + T A → αBβ ∴ A = E,α = ε,B = E,β = +T ∵ 因为 FIRST(β) = FIRST(+T) = {+} 不包含 ε。∴ ... 阅读更多

广告