注册/登录
移动端
 
首页 > 留学资讯 > 加拿大留学 > 加拿大皇后大学CS课程辅导之编译的重要阶段

加拿大皇后大学CS课程辅导之编译的重要阶段

作者:海马 发布时间:2023-07-03 15:15

编译这个词是用来描述将高级语言(HLL)程序翻译成机器语言程序的过程。尽管这种编译的目的与汇编程序的目的相似,但编译的问题比汇编程序的问题要复杂得多。编译器是执行编译的程序。编译器识别包含在一个给定的HLL中的程序,并为一个给定的计算机配置(硬件和操作系统)创建相应的打印程序。为了增进同学们对编译的理解,我们总结了编译的重要阶段
皇后大学

1.词法分析

编译器中的词法分析可以按照与汇编器中相同的方式执行。一般来说,在 HLL 中,需要识别的标记数量较多 - 各种关键字(例如for、while、if、else等)、标点符号(例如逗号、分号、大括号等)、运算符(例如算术运算符、逻辑运算符等)、标识符等。像lex或flex这样的工具用于创建词法分析器。

2.中间代码生成

在将给定的输入程序识别为有效后,编译器尝试用目标环境的语言创建等效的程序。在汇编器的情况下,这种翻译稍微简单一些,因为输入程序中每个语句中的助记操作码隐含的操作有一些等效的机器操作码。机器语言中每个操作适用的操作数数量与相应的汇编语言助记符操作码所允许的操作数数量相同。

因此,对于汇编语言,每个语句的翻译几乎可以独立于程序的其余部分进行。但是,在 HLL 的情况下,尝试为输入语言的每个语句关联单个机器操作码是徒劳的。原因之一是,如上所述,语句的范围并不总是固定的,并且可能包含递归。此外,与目标执行环境可能直接支持的抽象相比,HLL 程序中的数据引用可以采取显着的抽象级别。将含义(就机器可以支持的原始操作而言)与程序或程序段相关联的任务称为语义处理。

3.语法定向翻译

尽管将目标语言操作与 HLL 程序中的语句关联起来并不完全简单,但 HLL 的 CFG 允许将各种语法规则的语义操作(或含义) 关联起来。因此,在广泛的翻译任务中,当解析输入程序时,编译器还会尝试执行与最终应用的各种语法规则相对应的某些语义操作。然而,大多数 HLL 包含某些语法特征,需要使用一些附加信息(例如符号表的内容)来确定这些语法特征的语义动作。因此,诸如符号表之类的数据结构的构建和使用是编译器执行的语义操作的重要部分。

在执行语义处理后,获得输入程序的更易于管理的等效形式。这是使用一些中间代码表示来存储(表示)的,这使得进一步的处理变得容易。在这种表示中,编译器通常必须引入几个临时变量来存储各种操作的中间结果。用于中间代码的语言通常不是任何特定的机器语言,而是可以有效地转换为所需的机器语言的语言(可以考虑使用某种形式的汇编语言)。

4.代码优化

以中间代码形式表示的程序通常在存储空间以及预期输出程序的运行时效率方面包含很大的优化范围。有时输入程序本身就包含这样的范围。除此之外,生成中间代码表示的过程通常为这种优化留有很大的空间。因此,编译器通常实施显式步骤来优化中间代码。

5.代码生成

最后,编译器将中间代码表示形式的(优化的)程序转换为所需的机器语言。需要注意的是,如果编译器正在翻译的程序实际上依赖于某些外部模块,则必须对编译器的输出执行链接。这些活动与输入程序是 HLL 还是汇编语言无关。

海马课堂专业课程辅导,2300+严选硕博学霸师资,针对学生的薄弱科目和学校教学进度,匹配背景相符的导师,根据学生情况进行1V1专属备课,上课时间灵活安排,中英双语详细讲解课程中的考点、难点问题,并提供多方位的课后辅导,辅助学生掌握全部课程知识,补足短板。

相关热词搜索:

阅读原文:https://www.highmarktutor.com/news/13394_59.html

版权作品,未经海马课堂 highmarktutor.com 书面授权,严禁转载,违者将被追究法律责任。

热门课程推荐

hmkt088

欢迎咨询