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

什么是语法制导翻译器的实现?

Ginni
更新于 2021年11月3日 11:16:49

2K+ 次查看

语法制导翻译方案是一个上下文无关文法,其中属性与文法符号相关联,语义动作包含在花括号 ({ }) 中。这些语义动作是由解析器在适当时间调用的子程序,用于进行翻译。语义动作在产生式右边的位置表示解析器实现它的时间。当它可以产生翻译方案时,它应该提供一个属性值在动作定义它时可用。这需要右侧符号的继承属性…… 阅读更多

什么是语法制导翻译方案的类型?

Ginni
更新于 2021年11月3日 11:13:02

4K+ 次查看

语法制导翻译方案有两种类型:综合翻译在此翻译中,产生式规则左侧变量的值取决于产生式规则右侧变量的值。例如,E → E(1) + E(2) {E.VAL = E(1).VAL + E(2).VAL}在此,产生式规则左侧的 E 可以通过 E(1) 和 E(2) 的值之和来计算,E(1) 和 E(2) 位于产生式规则的右侧,即左侧变量取决于右侧变量。在综合翻译中,节点上综合属性的值…… 阅读更多

什么是语法制导翻译?

Ginni
更新于 2021年11月3日 11:03:56

7K+ 次查看

在语法制导翻译中,除了文法之外,它还可以识别一些非正式的符号,这些符号被称为语义规则。在实现语义分析之后,源程序被修改为中间形式。中间代码生成阶段需要一些信息来将语义检查的解析树转换为中间代码。但是,这些信息或变量的属性不能单独由上下文无关文法表示。因此,必须将一些语义动作附加到上下文无关文法中,这有助于中间代码生成阶段生成中间代码。因此,将属性附加到变量…… 阅读更多

为以下文法查找 FIRST 和 FOLLOW:E → E + T | T T → T * F | F F → (E) | id

Ginni
更新于 2021年11月3日 10:58:27

8K+ 次查看

解答FIRST 的计算E → E + T | T由于 FIRST(E) 不包含 ε。∴ FIRST(E) = FIRST(E + T) = FIRST(E)由于 E → T∴ FIRST(E) = {FIRST(T)} (1)T → T * F | F由于 FIRST(T) 不包含 ε 或 T 不能导出 ε。∴ FIRST(T) = FIRST(T * F) = {FIRST(T)}由于 T → F (FIRST(T) = {FIRST(F)} (2)F → (E) | id∴ 根据 FIRST 的规则 (3)FIRST(F) = {(, id}…… 阅读更多

在编译器设计中,LR 解析器有哪些类型?

Ginni
更新于 2021年11月3日 11:52:15

9K+ 次查看

LR 解析器有三种类型:简单 LR 解析器 (SLR) - SLR 代表“简单 LR 解析器”。它易于执行且成本效益高。但它无法为某些类型的文法创建解析表,这就是为什么使用 CLR 和 LALR,它们主要实现了所有类型的文法。它构造解析表,有助于执行输入字符串的解析。如果给定上下文无关文法,则可以进行 SLR 解析。在 LR(0) 中,0 表示没有前瞻符号。LR(0) 解析动作和从…… 阅读更多

在编译器设计中,LR 解析器的组成部分是什么?

Ginni
更新于 2021年11月3日 13:19:30

958 次查看

LR 解析器是一种自底向上解析器,用于解析上下文无关文法。LR 解析称为 LR(K) 解析。LR 解析器是一种移进规约解析器,它利用确定性有限自动机,通过从下到上读取栈来识别所有适用前缀的集合。它决定是否有句柄可用。右句型的可行前缀是包含句柄但不包含句柄右侧符号的前缀。因此,如果构造一个识别右句型可行前缀的有限状态机,…… 阅读更多

什么是 LR 解析表的实现?

Ginni
更新于 2021年11月3日 09:56:52

2K+ 次查看

LR 解析表是一个二维数组,其中每个条目代表一个动作或 goto 条目。具有大量产生式的编程语言文法具有大量状态或项目,即 I0、I1……In。因此,由于状态较多,将填充更多动作和 goto 条目,这需要大量内存。因此,二维数组不足以存储如此多的动作条目,因为每个条目至少需要 8 位来编码。因此,我们必须使用比二维数组更有效的编码来编码动作和 goto 字段。例如,…… 阅读更多

考虑模棱两可的文法。E → E + E E → E * E E → (E) E → id (a) 为上述文法构造 LR(0) 项目。(b) 为文法构造 SLR 解析表。(c) 解析输入字符串 id + id * id。

Ginni
更新于 2021年11月3日 09:52:32

5K+ 次查看

解答步骤 1 - 构造增广文法(0) E′ → S(1) E → E + E(2) E → E * E(3) E → (E)(4) E → id步骤 2 - 查找闭包和 goto 函数以构造 LR(0) 项目。闭包 (E′ → ∙ E) =在 I9 上应用 goto∵ 无法在 I9 上应用 goto,因为 E → (E). 中的点位于最后一个位置。步骤 3 - FOLLOW 的计算应用规则 (1) FOLLOWFOLLOW(B) = {$ } (1)E → E + E比较…… 阅读更多

什么是移进规约解析器?

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

12K+ 次查看

移进规约解析器是一种自底向上解析器。它从叶子节点生成解析树到根节点。在移进规约解析器中,输入字符串将被规约到起始符号。这种规约可以通过反向处理最右推导来产生,即从起始符号到输入字符串。移进规约解析器需要两个数据结构输入缓冲区栈移进规约解析的步骤如下:移进规约解析的步骤如下:它使用一个栈和一个输入缓冲区。在栈的底部插入 $…… 阅读更多

证明以下文法是 LR(1):S → A a | b A c | B c | b B a A → d B → d

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

6K+ 次查看

解答步骤 1 - 构造增广文法(0) S′ → S(1) S → A a(2) S → b A c(3) S → B c(4) S → b B a(5) A → d(6) B → d步骤 2 - 查找闭包和 goto。构造一组 LR(1) 项目。这里的方框都代表新的状态。LR(1) 解析表因此,LR(1) 解析表没有多个条目。文法是 LR(1)。LR(1) 或规范 LR 解析表的构造输入 - 增广文法 G′。输出 - 规范 LR(1) 解析表方法填充“移进”条目 (s) - 应用 CLR 解析表构造的规则 (2a)。考虑…… 阅读更多

广告