绪论(编译原理知识点总结)
低级语言:
机器语言、汇编语言
高级语言:
不依赖具体机器、但也得翻译(编译)成机器语言、Fortran第一个高级语言
翻译:
指将某种语言的源程序逻辑等价转换为另一种语言——目标语言程序
编译:
高级语言一次性转化为低级语言程序(全文翻译)
解释:
高级语言每一句执行出结果再执行下一句(口译)
语言类型:
编译型(C、C++、Pascal、Delphi):生成目标程序
效率高、依赖编译器、跨平台性差
解释型(BASIC、UNIX Shell、网络浏览器(HTML…))
效率低、跨平台性好
特殊型(Java)
先编译较低级字节码程序,再编译成机器语言
解释和编译的主要区别:
1、 解释不产生目标代码,边解释边执行,类似口译
编译产生可执行的目标代码,而后运行,类似全文翻译
2、 解释程序跨平台性好而编译程序不好
3、 解释程序运行效率低而编译程序效率高
4、 解释程序可随时修改代码,立刻生效,直接运行看效果
而编译程序都要重新编译,生成机器码文件
高级语言程序编译过程
输入:源程序 输出:目标程序
五个阶段:
词法分析
语法分析
语义分析以及生成中间代码
中间代码优化
目标代码生成
词法分析
任务:将源程序中的字符串变换成单词符号流
遵循:语言的构词规则
语法分析
任务:根据语法规则,从单词符号中识别出各种语法单位(如表达式、说明、程序段等),并检查语法结构的正确性
遵循:语言的语法规则,成使用上下文无关文法
语义分析及中间代码生产
任务:1、对每种语法单位(范畴)进行静态语义审查(验证语法结果合法的程序是否真正有意义)
2、在语义检查正确下进行中间代码的翻译
遵循:语言语义规则(语法单位翻译成中间代码)
中间代码:介于高级语言和低级语言的指令之间一种独立于具体硬件的符号系统,一定抽象性有于低级语言指令十分接近,因此转化成目标代码比较容易
中间代码常见表示形式:四元式、三元式、间接三元式和逆波兰几号等。
中间代码优化
任务:中间代码等价变换或改造,以期更高效(节省时间、空间)的目标代码
遵循:等价变化规则
手段:删冗余运算、删无用赋值、合并已知量、循环优化
目标代码生成
任务:把中间代码换成特定机器上的机器语言或汇编语言代码
依赖:硬件及其指令系统
表格管理
变量、函数、常量表、分程序入口表及中间代码表等
必须有一个管理各种表格的程序(编译程序)
出错管理
定位、跟踪、捕获错误等
编译程序的开发技术
自编译(用已有编译程序编写更强的编译程序)
交叉编译(用A机已有编译程序生成B机可运行代码)