计算机编译过程

来源:互联网 发布:阿里云 规则引擎 编辑:程序博客网 时间:2024/06/05 07:51

计算机编译程序的基本过程

编译程序是将高级语言的源程序翻译成与之等价的目标程序(汇编语言或机器语言)

 

1:词法分析

词法分析的任务就是把源程序构成的字符串转换成单词序号序列.:标识符,常数,关键字,运算符,分界符等.

 

词法分析用到有限自动机的方法去处理.

有限状态自动机所接受的语言就是正规语言.使用正规表示是表达.

2:语法分析

语法分析的任务就是在词法分析的基础上,根据语言的规则将单词符号的序列转换成各类语法单位,"表达式","语句","程序".语法规则就是各类语法单位构成的规则,通过分析确定输入串是否构成一个语法上正确的程序.如果源程序没有错误,就构造其语法树,否则指出语法错误,给出诊断信息.

 

语法分析用到下推自动机处理.

下推自动机除了有限状态自动机以外,还包括一个长度不受限制的栈.下推自动机把有限状态自动机扩展为可以存取一个栈.

下推自动机定义:

下推自动机 M 是如下的一个七元组 ( Q, Σ, Γ, δ, q0, Z0,F ) ,其中:

  *Q 是一个有穷状态集合;

  * Σ 是一个字母表,称为输入字母表。

  * Γ 是一个字母表,称为栈字母表。

  *q0 属于 Q ,是初始状态。

  * Z0 属于 Γ ,是一个特殊的栈符号,称为栈起始符号。

  *F 包含于 Q ,是终结状态集合。

  * δ : Q×(Σ{ε})×Γ -> Q×Γ* 是 M 的动作函数。

3:语义分析阶段

主要检查程序是否包含语义错误,并收集类型信息供后面代码生成阶段使用.主要进行类型分析检查.比如整除只能对整数数据进行.

4:中间代码生成

虽然编译程序可以直接把一个源程序翻译成目标程序,但是很多编译系统的设计中采取独立与机器的代码过度.便于编译系统的建立和移植,优化.常见代码有:语法树,后缀式,三地址代码.

 

后缀式就是表达式的后缀表达式.也叫逆波兰式.

三地址式就四元式.

5:代码优化

中间代码在时间和空间上往往有很大的浪费.当需要生成高效的目标代码时,就需要优化.优化往往在中间代码优化,对程序的控制流和数据流进行优化.

6:目标代码生成

将中间代码变成机器指令代码,或汇编指令代码.

7:符号表管理

符号表的作用是记录目标程序中的符号必要信息,以辅助语义的正确性检查和代码生成,在编译过程需要对符号表进行快速的查找,插入,删除,修改操作.可以在词法分析阶段开始,可以放放到语法分析和语义分析阶段.

一直延续到目标代码生成

8:出错处理

错误分类:

静态错误:是编译阶段发现的程序错误,分为语法错误,和静态语义错误.如单词拼写错误,标点符号错误,表达式缺少操作符等.

动态错误:又指动态语义错误,逻辑错误.发生在运行阶段,例如数组下标越界等.

编译器发现错误后,采取适当策略修复它们,时的分析错误继续下去,以便找出更多错误.