编译原理笔记第一部分,内容参考:北航软院教师邵兵课堂课件及内容、张莉著《编译原理及编译程序构造》、国防工业出版社的《编译原理——学习指导与典型题解析》、AlvinZH的学习笔记以及个人理解
目前是包含了全部内容的版本,后续会推出精简版和复习知识点版
阅读目录1.1 编译的一些基本概念
低级语言(Low level language)
– 字位码、机器语言、汇编语言
– 特点:与特定的机器有关,功效高,但使用复杂、繁 琐、费时、易出错。
高级语言
– Fortran、Pascal、C语言等
– 特点:不依赖具体机器,移植性好,对用户要求低,易使用,易维护等。
源程序:用编译语言或高级语言编写的程序
目标程序(目标代码):用目标语言所表示的程序,目标语言:没有硬性规定,可以是某种机器的汇编语言、机器语言,也可以是介于源语言和机器语言之间的“中间语言”。
翻译程序:将源程序转换为目标程序的程序成为翻译程序。它是指各种语言的翻译器,是汇编程序、编译程序以及各种变换程序的总称
三者关系:源程序是翻译程序的输入,目标程序是翻译程序的输出
汇编程序:
源程序用汇编语言书写,经过翻译程序得到用机器语言表示的程序吗,这时的翻译程序就称之为汇编程序,这种翻译过程称为“汇编”
编译程序:
源程序用高级语言书写,加工后得到目标程序,这种翻译过程称为“编译”
汇编程序和编译程序都是翻译程序,只是就爱共对象不同,汇编语言格式件单和机器语言有一一对应关系,所以汇编程序要做的翻译工作比编译程序简单得多。
从源程序到真正使用程序有两个阶段:编译、运行
编译或汇编阶段即源程序通过编译程序、汇编程序等翻译程序变为目标程序
运行阶段即通过向目标程序和其运行子程序之中输入数据然后得到输出数据
解释程序:对源程序进行解释执行的程序,对变异的道德中间语言进行解释执行的程序。源程序转化为解释程序:
1.2 编译的全过程
将高级语言程序翻译成等价的目标程序的过程,一般分为五个基本阶段:
词法分析,语法分析,语义分析和生成中间代码,代码优化,生成目标程序
1.词法分析:分析和识别单词
即扫描源程序(字符串),根据语言的此法规则分析并识别单词,并以某种编码形式输出。
单词:是语言的基本语法单位,一般语言有四大类单词:语言定义的关键字或保留字,标识符(变量名字),常数(常量),分界符(运算符、特殊符号)。词即最小的有意义的单词。
该赋值语句便可识别出9个单词
2.语法分析:
根据相应语言的文法,分析并识别出各种语法成分,如表达式、各种说明、语句、过程、函数等,并进行语法正确性检查。
利用这种文法,语法分析便可根据其将<>中的内容给识别出来,并进行语法检查,如有错误则会输出错误信息。
3.语义分析、生成中间代码:
对识别出的各种语法成分进行语义分析,并产生相应的中间代码
中间代码时一种介于源语言和目标语言之间的中间语言形式,生成的目的:1.便于做优化处理,2.便于编译程序的移植(不必依赖于目标计算机,便于转换成其他形式)
中间代码的形式:编译程序设计者可以自己设计,常用的有四元式、三元式、逆波兰表示等。
例如:
首先识别出是赋值语句,然后分析与以上的正确性,正确后生成中间代码
四元式(三地址指令):
4.代码优化: