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

影响编程语言实现的因素有哪些?

Ginni
更新于 2021年11月8日 10:52:55

426 次查看

一些因素会影响编程语言的实现,如下所示 -作用域 - 声明的作用域是指程序中应用该声明的那一部分。不同的语言可能采用不同的实现机制。每种语言的作用域规则都决定了如何从名称的声明中进行访问。如果过程中的名称使用在该过程的声明范围内,则该名称的使用是局部的;否则,该名称的使用是非局部的。根据特定语言中变量的作用域,实现存储管理。变量的生命周期 - 变量的生命周期是... 阅读更多

编译器设计中运行时存储管理的作用是什么?

Ginni
更新于 2021年11月8日 10:50:13

3K+ 次查看

编译器需要操作系统提供一块内存。编译器利用这块内存执行已编译的程序。这块内存称为存储管理。编译器必须执行的重要任务之一是分配目标机器的资源来表示源程序正在操作的数据对象。编译器必须决定源程序中数据对象的运行时表示形式。在源程序中,数据对象(如整数和实数变量)的运行时表示形式通常采用等效数据对象的... 阅读更多

符号表中的两种数组表示是什么?

Ginni
更新于 2021年11月8日 10:49:46

367 次查看

符号表是一种数据结构,它支持一种有效且高效的方式来存储有关源程序中出现的各种名称的信息。这些名称用于源代码中识别不同的程序元素,例如变量、常量、过程和语句的标签。每次在源文本中遇到名称时都会搜索符号表。当找到新名称或有关现有名称的新数据时,符号表的内容会修改。因此,符号表必须具有一个有效的机制来访问表中保存的数据,以及... 阅读更多

为给定语法构造 LALR(1) 解析表。问题 - 为语法构造 LALR(1) 解析表。S → A a|b A c|dc|bdaA → d使用 LALR 解析表解析输入字符串“bdc”。

Ginni
更新于 2021年11月8日 10:46:40

9K+ 次查看

解决方案将第一个数字作为如下所示的产生式 -步骤1 - 构造增强语法(0) S′ → S(1) S → A a(2) S → b A c(3) S → d c(4) S → b d a(5) A → d步骤2 - 查找闭包和 goto。查找语法的规范 LR(1) 项目集。在状态 I0 到 I10 中,没有状态具有相同的第一个元素或核心。因此,我们无法合并状态。一些状态将用于构建 LALR 解析表。LALR 解析表字符串“bdc”的解析堆栈输入字符串操作0bdc移位 30b3dc移位 7$ 0 b 3 d 7c ... 阅读更多

使用 SLR 解析验证字符串 id * id + id 是否被给定语法接受。考虑语法的 SLR 解析表E → E + TE → TT → T ∗ FT → FF → (E)F → id使用在示例中构建的 SLR 解析表检查字符串 id * id + id 是否被接受。

Ginni
更新于 2021年11月8日 10:36:36

2K+ 次查看

解决方案最初,LR 解析器处于状态 0。在字符串末尾添加 idid+id。堆栈输入字符串原因0 id ∗ id + id 操作 [0, id] = s5 ∴ 移位 id 和状态 50 id 5∗ id + id [5,]=r6Fidgoto(0,F)=30F3id+id操作 [3, ∗] = r4,通过 T → F 规约 goto(0, T) = 20 T 2∗ id + id [2,]=s770T27id+id操作 [7, id] = s5,移位 id,50T2*7 id 5+id $操作 ... 阅读更多

编译器设计中 DFA 和 NFA 的区别是什么?

Ginni
更新于 2021年11月8日 10:23:06

2K+ 次查看

确定性有限自动机 (DFA)确定性意味着对于每个输入,只有一个状态自动机可以从其当前状态转换到该状态。在确定性有限自动机中,磁头只能向一个方向移动以扫描输入带符号。但在双向有限自动机的情况下,在扫描输入符号时,磁头的当前位置可能会向右或向左移动。有两种方法可以表示确定性有限自动机 -状态图它是一个有向图或流程图,具有状态和边。通过... 阅读更多

什么是激活记录?

Ginni
更新于 2021年11月8日 10:16:59

12K+ 次查看

激活记录是一种数据结构,在调用过程/函数时会被激活/创建,它包含以下关于函数的数据。'C' 语言中的激活记录包括实际参数参数数量返回地址返回值旧堆栈指针 (SP)函数或过程中的局部数据这里,旧 SP 存储调用此过程的过程的激活记录的堆栈指针的值,这会导致生成此激活记录,即它是调用者的激活记录的指针。在堆栈分配方案中,当过程 A 调用过程 B 时,B 的激活记录将... 阅读更多

编译器设计中存储分配的技术有哪些?

Ginni
更新于 2023年10月31日 13:50:45

52K+ 次查看

存储分配技术多种多样,如下所示 -静态分配这是最简单的分配方案,其中数据对象的分配在编译时完成,因为编译器可以确定每个数据项的大小。不允许在语言中使用递归子程序和可调整长度的数组。在静态分配中,编译器可以确定每个数据对象所需的存储量。因此,编译器很容易识别激活记录中这些数据的地址。FORTRAN 使用这种存储分配策略。优点易于实现。允许类型检查... 阅读更多

编译器设计中的列表和自组织列表是什么?

Ginni
更新于 2021年11月8日 10:11:44

1K+ 次查看

列表从概念上讲,这是最简单且易于实现的符号表数据结构,如下所示 -它可以使用单个数组来存储名称及其关联的信息。新名称按照遇到的顺序插入列表中。它可以检索我们从数组开头到指针 AVAILABLE 标记的位置搜索的名称的数据,该指针指示数组空部分的开头。放置名称时,可以在... 阅读更多

如何使用访问链接和显示访问非局部名称?

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

6K+ 浏览量

访问链接是指向每个激活记录的指针,该激活记录获取嵌套过程词法作用域的直接实现。换句话说,访问链接用于实现词法作用域语言。“访问链”可能需要放置被调用过程所需的数据。处理在不同词法级别定义的静态链接的改进方案是使用称为显示的数据结构。显示是一个指向激活记录的指针数组。Display [0] 包含指向在词法级别...定义的过程的最最近激活的激活记录的指针。 阅读更多

广告