系列文章目录
编译原理_MOOC
一、引论
1.1什么是编译程序
翻译程序:把某一种语言程序(源语言程序)等价的转换为另一种语言程序(目标语言程序)的程序。
编译程序:把某一种高级语言程序等价的转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。
解释程序:把源语言写的源程序作为输入,不产生目标程序,而是边解释边执行源程序。
交叉编译程序:产生不同于其宿主机的机器代码的编译程序。
可变目标编译程序:不需要重写编译程序中与机器无关的部分就能改变目标机。
编译程序与解释程序的区别为:解释程序不另外生成目标语言程序。
编译理论与技术是计算机科学与技术中理论与实践相结合的最好典范,好强(难)啊!不愧是你。
1.2编译过程概述
编译过程
词法分析:
任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出单词符号,如基本字(begin,end,for,while,if,
else等),标识符,常数,算符(+、-、*、/)和界符(标点、左右括号等)。
依循原则:构词规则
描述工具:正规式、有限自动机。
语法分析:
任务:在词法分析的基础上,根据语法规则把单词符号串分解成各类语法单位(语法范畴)。
依循原则:语法规则
描述工具:上下文无关文法
如:中间代码生成:三元式、四元式、树…
复杂度和抽象程度介于高级语言与机器语言之间,为优化创造有利条件。
任务:对各类语法单位按语言的语义进行初步翻译。
依循原则:语义规则。
描述工具:属性文法。
优化:
任务:对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效(程序在时间和空间上具有更高效率)的目标代码,
依循原则:程序的等价变换规则。
目标代码生成:
任务:把中间代码变换成特定机器上的目标代码
依赖于硬件系统结构和机器指令的含义
三种形式:汇编指令代码:需要进行汇编。绝对指令代码:可直接运行。可重新定位指令代码:需要连接。
编译程序的结构
出错处理程序:发现源程序中的错误,把有关错误信息报告给用户。
语法错误:源程序中不符合语法(或词法)规则的错误(含非法字符、括号不匹配、缺少;、…)。
语义错误:源程序中不符合语义规则的错误(变量声明错误、作用域错误、类型不一致、…)
遍(pass):对源程序或源程序的中间表示从头到尾扫描一次。
阶段与遍是不同的概念,一遍可以由若干段组成,一个阶段也可以分若干遍来完成。
编译五个阶段的工作和编译前后端建立对应关系正确的是:
前端:词法分析,语法分析,中间代码产生,优化;
后端:优化,目标代码生成。
编译程序生成
高级语言书写:利用已有的某种语言的编译程序实现另一种语言的编译程序
这个图不懂
这个更绕,不理解,怎么想起这么画呢?!
总结
不要问为什么这么多图片,问就是懒。图片内容来自中国大学MOOC平台国防科技大学编译原理课程https://www.icourse163.org/course/NUDT-1003101005。