[编译原理]学习笔记(一)——编译概述

来源:互联网 发布:内网访问阿里云 编辑:程序博客网 时间:2024/05/21 15:07
一、 翻译程序:把一种语言(源语言)所写的程序(源程序)翻译成与之等价的另一种语言(目标语言)的程序(目标程序)。
编译程序:把高级语言所写的源程序翻译成与之等价的低级语言(如汇编语言、机器语言等)的目标程序。如果编译阶段目标程序是机器语言程序,则分为编译阶段和运行阶段;如果生成的是汇编程序,则分为编译阶段、汇编阶段和运行阶段。
解释程序:也是一种翻译程序,将源程序作为输入,边解释边执行,但其不产生目标程序,而是按照源语言的定义解释执行源程序本身。
二、 编译的五个阶段:这五个阶段为逻辑关系而非执行上的先后顺序
a) 词法分析:对构成源程序的字符串从左到右进行
i. 扫描和分解;
ii. 根据语言的词法规则识别出一个一个具有独立意义的单词/单词符号/符号。
b) 语法分析:
i. 根据语法规则(是语法单位的形成规则,规定了如何从单词符号形成语法单位)从单词符号串中识别出各种语法单位(如表达式、说明等);
ii. 进行语法检查,即检查各种语法单位在语法结构上的正确性。
c) 语义分析及中间代码生成:对语言的各种语法单位赋予具体的意义
i. 对每种语法单位进行静态的语义审查;
ii. 分析其含义;
iii. 用另一种语言形式(更接近于目标语言的中间代码/目标语言,如一个完整表达式分解为多个子表达式)来描述该语义。
d) 代码优化:对前一阶段产生的中间代码进行等价变换或改造,目的是获取更高效的(时间、空间)目标代码。主要有局部优化和循环优化等。
e) 目标代码生成:将中间代码变换成
i. 特定机器上的绝对指令代码;
ii. 可重定位的指令代码;
iii. 汇编指令代码。
三、 编译的七大程序:
a) 上述五个阶段的每个程序
b) 表格管理程序:
i. 记录源程序中所使用的变量的名字;
ii. 收集与名字属性相关的各种信息,如存储分配、类型、作用域,如果是函数名则还包含参数数量、传参方式、返回类型等;
iii. 各个阶段中需要构造、查找、修改或存取表中信息。
c) 出错处理程序:定位和跟踪错误,在五个阶段中都会用到。
四、 扫描遍数:指对源程序或者等价的中语言程序从头到尾扫描一遍并完成规定加工处理工作。
多遍扫描程序:相比一遍扫描占用存储空间少,可使各遍所要完成的功能相对独立,逻辑结构更加清晰;但遍数增加会导致输入输出的开销,会降低编译效率。
五、 注意:
a) 编译程序是系统软件,而非应用软件;
b) 代码优化、中间代码生成并非必不可少的部分;
c) 含有优化部分的编译程序的执行效率不一定会高。
0 0