编译知识

本文介绍编译知识,包括翻译程序和编译程序的定义及区别。详细阐述编译过程的五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。还说明了编译程序的结构,如表格管理和出错处理,以及遍的概念、编译的前端和后端组成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译知识

翻译程序

翻译程序是一种程序,其输入是某种语言的一系列语句,而其输出则是另一种语言的一系列语句,二者在逻辑上是等价的。

编译程序

编译程序是一种程序。它把用高级语言写的源程序作为数据接收,经过翻译转换,产生面向机器的代码作为输出。这当中代码还可能要经过由汇编程序或装配程序作进一步加工,得出目标程序,交给计算机执行。

两者的区别

翻译程序是将一种语言转化为另一种语言

编译程序是将一种语言转换为面向机器的代码。

编译过程

编译程序的工作过程一般分为五个阶段:

  1. 词法分析
  2. 语法分析
  3. 语义分析和中间代码的产生
  4. 优化
  5. 目标代码生成
词法分析

词法分析的任务:输入源程序,对构成源程序的字符串进行扫描,识别出一个个单词(定义符、标识符、运算符、界符、常数)。

在词法分析阶段的工作中所 依循的是:语言的词法规则(或构词规则)

语法分析

语法分析的任务:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单元( 短语、子句、句子、程序段、程序),并确定整个输入串是否构成语法上正确的程序。

语法分析所依循的是语言的语法规则。

语法规则通常用上下文无关文法描述。

词法分析是一种线性分析,而语法分析是一种层次结构分析。

语义分析和中间代码的产生

任务:对语法分析所识别的各类语法 范畴,分析其含义,并进行初步翻译(产生中间代码)。

通常包含两个方面的工作:

  1. 对每种语法畴进行静态语义的检查。例如,变量是否定义、类型是否正确。
  2. 如果语义正确则进行中间代码的翻译。
优化

对于代码(主要是中间代码)进行加工转化,以期能够产生 更为高效(省时间和空间)的目标代码。

优化的主要方面有:公共子表达式的提取、循环优化、删除无用代码等等。

优化所依循的是程序的等价变换规则。

目标代码生成

任务:把中间代码变换成特定机器上的低级语言(绝对指令、可重定位指令、汇编指令)

编译程序的结构

20170506204154323

表格与表格的管理

编译程序在工作过程中需要保持一系列的表格,以登记程序的各类信息和编译各阶段的进展状况。

最重要的是符号表,用来等级源程序中出现的每个名字以及名字的各种属性。例如,一个名字是常量还是变量,还是过程名。如果是变量名,类型是什么,占多大内存,地址是多少等等。

编译各阶段均需维持表格并进行表格管理,建表的技术支持数据结构,表格的分类、结构、处理文法决定于语言及机器,还有优化措施。

出错处理

如果源程序有错误,编译程序应设法发现错误,并把有关错误的信息报告给用户。

好的编译程序:

  1. 最大限度发现错误

  2. 准确指出错误的性质

  3. 局部化

    将错误的影响限制在尽可能小的范围

  4. 自动校正

    若程序能自动校正错误则更好,但代价非常高

源程序中的错误一般分为语法错误和语义错误

  1. 语法错误

    指源程序中不符合语法规则的错误,例如单词拼写错误、括号不匹配等等。

  2. 语义错误

    指源程序中不符合语义规则的错误,例如:说明错误、作用域错误、类型不匹配等等。

遍:是对源程序或源程序的中间结果从头到尾的扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。

遍数多了,整个编译程序的逻辑就比较清晰,但是会增加输入和输出所消耗的时间。因此,在主存可能的前提下,一般还是遍数少的好。

分遍的依据:

  1. 源程序的结构
  2. 选用机型的内存大小
  3. 设计目标的技术指标
  4. 参加编译程序人员的数量、素质

好的编译程序的指标:

  1. 符会语法规则的程序都可执行
  2. 任何非法的错误都有可能识别,并尽量少的产生连锁反应。
  3. 错误不至于导致系统 崩溃
  4. 可维护和可读性
  5. 模块化和结构化

编译的前端和后端

前端

前端主要与源语言有关但与目标机无关的那些部分组成。

通常包括词法分析、语法分析、语义分析与中间代码的生成,有的代码优化工作也可以包括在前端

后端

后端包括编译程序中与目标机有关的那些部分,如与目标机有关的代码优化和目标代码生成等。

通常后端 不依赖源语言而仅仅依赖于中间语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值