编译原理----第一章
写在前面的话:上了两周网课了,上编译原理的时候小朋友你是否有很多问号???
我真的有很多问号!!!
写了一下总结(自用,图片来源于老师PPT,侵删致谢)
1.语言:
- 机器语言:以0,1代码表示的机器指令所构成的语言,可以被计算机理解并执行。
- 汇编语言:用一系列助记符代替一个特定的指令。如“ADD” 代表加减
- 高级程序设计语言:容易人们理解的形式来表达计算的要求和过程的语言。如FORTRAN、BASIC、Pascal、C、C++、Java等。
因为高级程序设计语言容易人们理解,但计算机不能直接执行,想要执行就必须翻译,使之成为等价的机器语言程序。
2.编译原理:
- 翻译程序: 将某一种语言描述的程序(源程序)翻译成等价的另一种语言描述的程序(目标程序)的程序。
翻译程序包括两种:编译程序和解释程序
编译程序:将源程序完整的转换成机器语言或者汇编语言程序,然后在处理、执行的翻译程序叫做编译程序。
解释程序:不断的读取源程序中的语句,对每次独到的语句进行解释,同时读取执行此语句所需的数据,执行该语句后,再根据执行结果读取下一条要执行的语句,再次进行解释并执行,而且还在解释执行的过程中会根据程序的规定在需要的时候输出计算结果。
二者之间:主要区别是否生成目标代码
3.编译的基本过程:
- 词法分析-从字符流分出单词,提取到符号表中
- 语法分析-依据语法规则分析这些单词构成的句子是否符合语法结构
- 语义分析-完成静态语义审查和处理,上下文相关性审查类型匹配审查,类型转化
- 中间代码生成-结构简单记号明确的记号系统(四元式)
- 代码优化-将中间代码变化改造,是生成的代码更加高效,节省时间空间
- 代码生成-把中间代码变成特定机器上的绝对指令代码
最简单的也需要包括上面蓝色字体。
4.编译程序的组织:
编译的遍:从头到尾扫试一次并实现所规定的工作。
分遍的好处:各遍功能独立单纯、相互联系简单、逻辑结构清晰、优化准备工作充分。
坏处:各遍之中不可避免的要有些重复工作,而且遍和遍之间要有交接工作,增加了编译程序的长度和编译时间。
前端:与源语言有关、与目标机无关的部分(词法分析、语法分析、语义分析、中间代码生成、与机器无关的代码优化)
后端:与机器有关的部分(与机器有关的代码优化、目标代码生成)