前言
编译原理啊...也是没想到就期末了,课上基本没怎么听,这下只能靠自己来复习了,唉不过问了一下课上听了的朋友,说是听了和没听一个样,哈哈哈哈.
文章里写的内容不会很细致,会着重于自己感觉有些理解起来有难度的点,其他的基本上就是提两句略过.
OK现在开始.
语言的发展
- 机器语言:机器能直接理解并执行的语言,对硬件依赖大,对cpu有区别
- 汇编语言:使用助记符表示指令和地址而不是二进制代码.提高可读性和可写性,引入翻译程序,仍然依赖于硬件.
- 高级语言:与机器无关,更契合人类思维,不能直接运行引入编译程序--编译器.
语言层次
- 翻译程序:将一种语言变成另一种语言,上图椭圆形和平行四边形
- 转换程序:在高级语言之间转换
- 编译程序:将高级语言代码变成机器语言或者汇编语言
- 解释程序:同直接翻译为机器语言的编译程序但不保存结果,直接执行
- 汇编程序:将汇编语言变成机器语言.
高级语言的运行方式
- 编译方式:先产生源代码对应的机器语言程序,逻辑等价
- 解释方式:不会产生程序,逐语句解释再执行.如Ruby,Perl
编译方法执行效率高,解释方法便于交互.
何为编译原理
编译原理就是在探讨编译程序设计的基本理念基本概念基本方法.
编译过程和编译程序的结构
这里粗略给出给部分整体介绍,详见后续对应章节
- 词法分析:对源程序的字符串进行扫描和分析,识别出每个单词符号
- 语法分析:根据语言的语法规则,把单词符号变成语法单元,并检查是否有语法错误.
- 语义分析:通过对源程序中的各种符号进行信息收集并填入符号表.
- 中间代码生成:一种含义明确便于处理的记号系统,以便实现优化功能
- 代码优化:对中间代码实现等价变换,以产生高质量的代码.涉及机器相关的优化包括寄存器分配指令选择等和中间代码的优化如局部优化循环优化全局优化.
- 目标代码生成:根据是标的语法单元翻译出目标机的指令,生成汇编语言.
编译程序的结构
编译过程的每一个阶段都对应一个模块.此外还有错误处理程序和表格管理程序.
- 错误处理程序:对源程序的错误进行处理并向用户提供错误信息.错误类型:字符错误、词法错误、语法错误、语义错误、逻辑错误.
- 表格管理程序:登记源程序的各类信息和编译各阶段的进展情况.最重要的表格是符号表.
遍:对源程序从头到尾扫描一次并加工处理 编译前段:到代码优化为止,但仅含部分与机器无关的代码优化 编译后端:此外都是.
前文的图片是错的.
编译语言的构造方法和要求
- 源语言:理解其结构和含义
- 目标语言:理解对应的硬件的系统结构和指令格式
- 编译方法:
- 直接使用机器语言或汇编语言
- 使用高级语言.普遍采用
- 自编译
- 使用编译工具生成
- 移植(同语言的编译程序在不同机器之间)