1.入门
汇编指令:用符号表示的指令被称为汇编指令
汇编语言:汇编指令的集合称为汇编语言
2.语言之间的转换
![](https://i-blog.csdnimg.cn/blog_migrate/712290efa6271d0ee9a6430a6907ea33.png)
-
编译:高级语言可以直接翻译成机器语言,也可以翻译成汇编语言,这两个翻译过程称为编译
-
汇编:从汇编语言到机器语言的翻译被称为汇编
-
反汇编:把机器语言翻译成汇编语言
-
反编译:把汇编语言翻译成高级语言
-
交叉汇编:将一个汇编语言程序汇编成为可在另一机器上运行的机器指令成为交叉汇编
3.编译器与解释器
![](https://i-blog.csdnimg.cn/blog_migrate/62b073da808660a1c380284657c4362c.png)
-
区别:运行目标程序时的控制权在解释器而不在目标程序
-
特点:
-
编译器:工作效率高,即时间快、空间省;交互性与动态性差,可移植性差;
-
解释器:工作效率低,,即时间慢、空间费;交互性与动态性好,可移植性好;
-
编译器和解释器均完成对源程序的翻译,不同点在于编译器采用先翻译后执行,解释器采用边翻译边执行
4. 编译器的工作原理与基本组成
①声明+操作=完整定义;
②以过程为基本结构的程序设计语言的组成
-
声明性语句:提供操作对象的性质,如数据类型、值、作用域等;
-
操作性语句:确定操作的计算次序,完成实际操作。
-
过程定义 = 过程头+过程体
③以阶段划分编译器
![](https://i-blog.csdnimg.cn/blog_migrate/542986f65d03ee69b23056c8f474d781.png)
注: 表格管理和出错处理贯穿编译器工作的各个阶段
④编译器各个阶段工作
1. 词法分析:词法分析的输入是源程序,输出是识别出的记号流.目的是识别单词. 至少分以下几类:关键字(保留字)、标识符、字面量、特殊符号
2. 语法分析: 输入是词法分析器返回的记号流,输出是语法树.目的是得到语言结构并以树的形式表示.对于声明性语句,进行符号表的查填,对于可执行语句,检查结构合理的表达式运算是否有意义.
3. 语义分析:根据语义规则对语法树中的语法单元进行静态语义检查,如类型检查和转换等,目的在于保证语法正确的结构在语义分析上也是合法的.
4. 中间代码生成(可选):生成一种既接近目标语言,又与具体机器无关的表示,便于代码优化与代码生成.
(到目前为止,编译器与解释器可以一致)
5. 中间代码优化(可选):局部优化、循环优化、全局优化等;优化实际上是一个等价变换,变换前后的指令序列完成同样的功能,但在占用的空间上和程序执行的时间上都更省、更有效
6. 目标代码生成:不同形式的目标代码—汇编语言形式、可重定位二进制代码形式、内存形式(Load-and-Go)
7. 符号表管理:合理组织符号,便于各阶段查找/填写等.
8.出错处理:
-
动态错误:源程序中的逻辑错误,发生在程序运行的时候。也称为动态语义错误
-
静态错误:静态错误分为语法错误和静态语义错误.
-
语法错误:有关语言结构上的错误,如单词拼写错误、表达式缺少操作数、begin和end不匹配
-
静态语义错误:分析源程序时可以发现的语言意义上的错误,如加法的两个操作数一个是整形变量,另一个是数组名
⑤编译器的分析/综合模式
![](https://i-blog.csdnimg.cn/blog_migrate/79820fa77d63d572bb2943e542f9cb7e.png)
逻辑上把编译器分为分析(前端)部分和综合(后端)部分:
-
分析(前端):语言结构和意义的分析; 从词法分析到中间代码生成各阶段的工作
-
综合(后端):语言意义处理;从中间代码生成到目标代码生成的各阶段的工作
-
编译器和解释器的区别往往是在形成中间代码之后开始的.