Advertisement

编译原理知识点汇总

阅读量:

​​​​​​第一章 概述

第一章因为是概述,就是统领整本书的部分,这部分只考小题没有大题。主要就是概念的理解。

1.翻译程序

输入的是源程序,转换为目标程序。

包括汇编程序(源程序是汇编语言,目标语言是机器语言)和编译程序(源程序是高级语言,目标程序是机器语言或者汇编语言)

编译程序:1.源程序和数据在不同时间处理

2.解释方式

同时处理源程序和数据,这种翻译程序叫做解释程序,不生成目标程序(根本区别)

BASIC在解释环境下运行

78f58c286caf408d81ed5f22421b1f4f.png
c724ae09c2744d5c84117ea575143ea4.png

2.编译程序

分析阶段:词法分析,语法分析,语义分析和中间代码生成

综合阶段:代码优化,目标代码生成

8aee1a8edff14dcf8fe30fce351db2e5.png
595aadd258464d1c8cd25b06c090de70.png

词法分析

读入源程序,输出单词23789361c8f74426841cd95258a91d0b.png

语法分析

读入单词,输出语法树,进行语法归类

如a=10+c*20

faadfa859d9a4f73aa32fa1194b4c802.png
ee09cd2c935c4e76bd0991265310e450.png

语义分析及中间代码生成

语义分析:确定源程序的语义是否正确,能识别的语义错误有变量未经声明就使用,变量重复声明,运算对象类型是否匹配。

中间代码:

代码优化

首选在中间代码进行

目标代码生成

目标代码形式:绝对指令代码(可立即执行),可重定位的机器指令代码,汇编指令代码(需要经过汇编程序的翻译,然后才能运行)

可重定位的机器指令代码:运行前必须借助一个连接装配程序把各个目标模块连接在一起,确定程序中的变量在内存中的位置,装入内存中指定起始位置,使之成为一个可以运行的绝对指令代码程序。

927394b4f70546f2af9db8a295355ed4.png

符号表管理(贯穿编译整个过程)

标识符的各种属性是在编译的不同阶段填入符号表的。

错误处理(贯穿编译整个过程)

编译的各个阶段都能发现源程序的错误。

单遍编译程序

只对源程序进行一次扫描,不产生中间代码,以语法分析程序为中心

多遍编译程序

分几遍来完成,每遍完成部分任务

a2b61620ca004d94b74ddcfd3bfd2dce.png

分遍的优缺点:

优点:(1)减少内存容量的需求

(2)使各遍程序相互独立,结构清晰(主要)

(3)能够进行充分优化,产生高质量的目标程序

(4)将编译程序分为"前端"和"后端",有利于编译程序的移植

缺点:增加重复性工作,降低效率

556f866adf384bbab7427376471f9ea7.png

选B

端的概念

前端:与源语言有关,包括词法分析,语法分析,语义分析和中间代码生成,符号表的建立,相应的错误处理和符号表操作

后端:与目标机器有关,包括代码优化,目标代码生成,以及相应的错误处理和符号表操作

分端优点:便于移植和编译程序构建

比如:有m种高级语言,n种机器语言,不分前后端需要建立M*N套编译程序。

若分前后端,可以先建立M套前端编译程序将M种高级语言翻译成相同的中间语言,再建立N套后端翻译程序将中间语言翻译成N种机器的目标语言,这样只需要建立M套前端编译程序和N套后端编译程序。

c735476a076a41328a2c1aec72bb55d6.png

编译程序的前后处理器

c8e11b14754a43859a14203a9bef1cdb.png

全部评论 (0)

还没有任何评论哟~