
编译(compilation , compile) 1、利用编译程序从源语言编写的源程序产生目标程序的过程。 2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。
目录
- 1编译程序
- 2词法分析
- 3语法分析
- 4中间代码
- 5代码优化
- 6目标代码
- 7表格管理
- 8出错处理
>编译程序
将某一种程序设计语言写的程序翻译成等价的另一种语言的程序的程序, 称之为编译程序(compiler) .
>词法分析
词法分析的任务是对由
字符组成的单词进行处理,从左至右逐个字符地对源
程序进行扫描,产生一个个的单词符号,把作为字符串的
源程序改造成为单词符号串的中间程序。执行词法分析的
程序称为词法
分析程序或扫描器。
源程序中的单词符号经扫描器分析,一般产生二元式:单词种别;单词自身的值。单词种别通常用整数编码,如果一个种别只含一个单词符号,那么对这个单词符号,种别编码就完全代表它自身的值了。若一个种别含有许多个单词符号,那么,对于它的每个单词符号,除了给出种别编码以外,还应给出自身的值。
词法分析器一般来说有两种方法构造:手工构造和自动生成。手工构造可使用
状态图进行工作,自动生成使用确定的有限
自动机来实现。
>语法分析
语法分析的方法分为两种:自上而下分析法和自下而上分析法。自上而下就是从文法的开始符号出发,向下推导,推出句子。而自下而上分析法采用的是移进
归约法,基本思想是:用一个寄存符号的先进后
出栈,把输入符号一个一个地移
进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归约成该产生式的左邻符号。
>中间代码
>代码优化
有两类优化:一类是对
语法分析后的
中间代码进行优化,它不依赖于具体的计算机;另一类是在生成
目标代码时进行的,它在很大程度上依赖于具体的计算机。对于前一类优化,根据它所涉及的
程序范围可分为局部优化、循环优化和全局优化三个不同的级别。
>目标代码
② 待装配的
机器语言模块,当需要执行时,由连接装入
程序把它们和某些运行
程序连接起来,转换成能执行的机器语言代码;
目标代码生成阶段应考虑直接影响到目标代码速度的三个问题:一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问
存储单元的次数;三是如何充分利用计算机
指令系统的特点,以提高目标代码的质量。
>表格管理
编译过程中
源程序的各种信息被保留在种种不同的表格,编译各阶段的工作都涉及到
构造、查找、或更新有关的表格。
编译程序的公共辅助部分。对源程序中的各种量进行管理,登记在相应的表格。编译程序处理时通过查表得到所需的信息。
>出错处理
如果编译过程中发现
源程序有错误,
编译程序应报告错误的性质和错误的发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。
需要注意的是,一般上
编译器只做
语法检查和最简单的语义检查,而不检查
程序的逻辑。