找到 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|TT → T ∗ F|FF → (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 解析表是一个二维数组,其中每个条目表示一个动作或转到条目。具有大量产生式的编程语言文法具有大量状态或项目,即 I0、I1……In。因此,由于状态过多,将填充更多动作和转到条目,这需要大量内存。因此,二维数组不足以存储如此多的动作条目,因为每个条目都需要至少 8 位来编码。因此,我们必须使用比二维数组更有效的编码来编码动作和转到字段。例如,... 阅读更多

考虑以下二义文法。E → E + EE → E ∗ EE → (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 - 查找闭包和转到函数以构造 LR(0) 项目。Closure(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 aA → dB → 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)。考虑... 阅读更多

广告