目录
前言
之前一篇文章介绍了编译程序,同时介绍了编译程序与解释程序的区别:编译程序与解释程序区别_不负韶话-CSDN博客
大致介绍:
编译程序
编译程序将高级语言转化为低级语言。
一、编译过程
编译程序将高级语言转化为低级语言中的过程中的阶段划分;(因为其转化过程十分复杂)
编译的阶段划分(六个)
注意:编译过程与编译系统区别
编译过程只是编译程序过程中复杂过程的划分,而编译系统是程序,编译系统具有八大程序。
二.编译过程详述
1.词法分析
输入:源程序
输出:单词符号串(字符串形式的源程序)
功能:从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
作用:像翻译英语文章一样,需要先分析每个单词,知道每个单词的意义及在句中的作用,才能进行整篇翻译。
常见单词:保留字:int; 运算符: + 等。
经过词法分析,计算机已经能够从一堆由字母或者数字组成的一堆东西里面知道哪些是保留字,哪些是运算符号等。
2.语法分析
输入:单词符号串(经过词法分析的单词,也可以称为字符串形式的源程序)
输出:属性字流(可以称为语句)
功能:定义程序的结构元素及其关系
任务:在词法分析的基础上,将单词分解成各类语法短语,一般语法短语可表示成语法树。
3.语义分析
输入:具有属性的语句
输出:符合语言规范的语句
功能:按照语法树的层次关系和先后次序,逐个语句地进行语义处理。
任务:进行类型审查,审查每个算符是否符合语言规范,不符合时应报告错误。常见错误有类型匹配与类型转换。
4.中间代码生成
将源程序变成一种内部表示形式,这种内部表示形式叫中间代码,该代码是一种简单的记号系统。
5.代码优化
对中间代码进行变换,使目标代码更为高效。(节省时间和空间)
6.目标代码生成
将中间代码变换成特定机器上的绝对指令代码或可重定位的汇编指令代码。主要与硬件系统结构和指令含义有关。
补充:
符号表管理
-
记录源程序中使用的名字
-
收集每个名字的各种属性信息
出错处理管理
-
编译程序在各个阶段应诊断和报告源程序中的错误,包括词法错误,语法错误, 语义错误
-
编译程序应报告出错地点,并给出简明 准确的提示信息。
总结
- 编译过程主要指的6个过程
- 编译程序结构为8个结构。