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

考虑语法S → CCC → c C | 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 → CCC → c C | 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) 项目应用 goto 于 I7、I8、I9在 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|TT → TF|FF → 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 → x A y |x B y |x A zA → q s | qB → q

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

3K+ 次浏览

解决方案步骤 1 - 构建增强语法(0) S′ → S(1) S → x A y(2) S → x B y(3) A → q S(4) A → q(5) B → q步骤 2 - 查找闭包和 goto 函数以构建 LR(0) 项目。这里方框表示新状态,圆圈表示重复状态。步骤 3 - FOLLOW 的计算S → x A yFOLLOW(S) = {$}                                                       (1)应用 FOLLOW 的规则 (2a)。将 S → x a y 与 A → ... 阅读更多

证明每个 SLR(1) 都是无歧义的,但一些无歧义语法不是 SLR(1)。对于以下产生式检查这一点。S → L = RS → RL →* RL → idR → 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 次浏览

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

为以下语法构建 SLR(1) 分析表1. E → E + T2. E → T3. T → T * F4. T → F5.F → (E)6.F → id

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

852 次浏览

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

广告