编译原理期末复习知识点(个人整理)
基础概念
什么是编译程序
一个编译程序简单来说就是一个语言翻译程序, 源语言是高级语言, 目标语言是低级语言, 比如汇编语言和机器语言
什么是"遍"
也称作"趟", 是对源程序或其等价的中间语言程序从头到尾扫描并完成规定任务的规定任务的过程. 多遍比一遍的编译程序少占内存, 逻辑结构更清晰, 但也意味着增加读写中间文件的次数, 势必消耗较多时间, 显然会比一遍的编译程序要慢.
编译过程分6步
- 词法分析
扫描源程序,将其分解为词法单元(单词序列)后输出。
方法:正规式,有限自动机 - 语法分析
根据语法规则,对词法单元进行推导或规约,识别出各类语法单元(又称语法短语, 语法树),最终判断输入串语法是否正确。
方法:上下文无关文法 - 语义分析
审查源程序有无语义错误, 为代码生成阶段收集类型信息 - 中间代码生成
有的编译程序将源程序变成一种内部表示形式, 我们叫做中间语言或中间代码. “所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式
设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。 - 代码优化
对前一阶段产生的中间代码进行变换或进行改造, 目的是使生成的目标代码更为高效, 即省时间和省空间 - 目标代码生成
把中间代码变换成机器上的绝对指令代码或可重位的指令代码或汇编指令代码
一个完整的编译程序还必须有表格管理程序和出错处理程序
编译原理的前端和后端
前端主要依赖于源语言而与目标机无关. 通常包括词法分析, 语法分析, 语义分析和 中间代码生成这些阶段以及与这些阶段相关的出错处理工作和符号表管理工作,某些优化工作也可在前端完成.
后端指的是那些依赖于目标机而不依赖于源代码, 只与中间代码有关的那些阶段的工作, 即目标代码生成, 以及相关的出错处理工作和符号表管理工作
解释程序
解释程序:
一个个获取, 分析并执行源程序语句, 一旦第一个语句分析完成, 源程序就开始运行并生成结果( 编译程序不把整个程序翻译完,程序无法运行, 把编译和运行独立分开.)
允许在执行时修改程序,
不生成目标代码,直接输出结果.
存储组织不同
程序的解释过程较慢且空间开销较大