个性化阅读
专注于IT技术分析

编译器设计 第3页

运行时存储组织-srcmini

运行时存储组织

半瓶木阅读(832)评论(0)赞(0)

当目标程序执行时, 它将在其自己的逻辑地址空间中运行, 每个程序的值都在其中定位。 逻辑地址空间在编译器, 操作系统和目标计算机之间共享, 以进行管理和组织。操作系统用于将逻辑地址映射到通常分散在整个内存中的物理地址。 运行时内存细分 运行...

表示范围信息-srcmini

表示范围信息

半瓶木阅读(768)评论(0)赞(0)

在源程序中, 每个名称都具有一个有效区域, 称为该名称的范围。 块结构语言中的规则如下: 如果在块B中声明了名称, 则该名称仅在B中有效。 如果B1块嵌套在B2内, 则对块B2有效的名称对B1也有效, 除非在B1中重新声明了名称的标识符。 ...

符号表的数据结构-srcmini

符号表的数据结构

半瓶木阅读(974)评论(0)赞(0)

编译器包含两种类型的符号表:全局符号表和作用域符号表。 全局符号表可以由所有过程和作用域符号表访问。 名称和符号表的范围按层次结构排列, 如下所示: 上面的语法可以用符号表的分层数据结构表示: 全局符号表包含一个全局变量和两个过程名称。 s...

符号表的实现

半瓶木阅读(1639)评论(0)赞(0)

本文概述 实现符号表 lookup() 符号表是在编译器中使用的重要数据结构。 符号表用于存储有关各种实体(例如对象, 类, 变量名, 接口, 函数名等)的出现的信息。在分析和合成阶段均使用该表。 符号表用于以下目的: 它用于以结构化形式将...

case语句的翻译

半瓶木阅读(893)评论(0)赞(0)

Switch和case语句支持多种语言。 case语句的语法如下: 其翻译方案如下所示: 将E评估为T的代码 当看到switch关键字时, 将生成一个新的临时T和两个新标签test和next。 当出现case关键字时, 则为每个case关键...

变量声明的翻译

半瓶木阅读(788)评论(0)赞(0)

遇到声明时, 我们需要为声明的变量安排存储空间。 对于过程中的每个本地名称, 我们创建一个ST(符号表)条目, 其中包含: 名称的类型 名称需要多少存储空间 生产: 声明的合适过渡方案是: 生产规则 语义动作 D→整数, id ENTER(...

程序调用

半瓶木阅读(711)评论(0)赞(0)

过程是编译器的重要且经常使用的编程结构。它用于为过程调用和返回生成良好的代码。 程序调用顺序 调用的转换包括在每个过程的进入和退出时采取的一系列操作。在调用顺序中将执行以下操作: 当发生过程调用时, 则会为激活记录分配空间。 评估被调用过程...

算术表达式中的数组引用

半瓶木阅读(1002)评论(0)赞(0)

如果将元素存储在连续位置的块中, 则可以快速访问数组的元素。数组可以是一维或二维的。 对于一维数组: 多维数组: 行专业或列专业表格 主行:a [1, 1], a [1, 2], a [1, 3], a [2, 1], a [2, 2], ...

后缀翻译

半瓶木阅读(833)评论(0)赞(0)

本文概述 while语句的后缀翻译 for语句的后缀翻译 在产品A→α中, A.CODE的转换规则由α中非末端的CODE转换的串联组成, 其顺序与α中非末端出现的顺序相同。 生产可以考虑实现后缀形式。 while语句的后缀翻译 生产 可以分...

更改控制流的语句

半瓶木阅读(897)评论(0)赞(0)

goto语句更改控制流。如果实现goto语句, 则需要为一条语句定义一个LABEL。可以为此添加产品: 在此生产系统中, 附加了语义动作以将LABEL及其值记录在符号表中。 以下语法用于合并结构控制流构造: 在这里, S是一条语句, L是一...