【编译原理--- 汇编、编译、解释系统】

汇编、编译、解释系统

1.编译方式和解释方式

程序种类 是否生成目标程序 是否参与程序的运行过程 程序执行速度 可移植性
编译程序 生成 不参与
解释程序 不生成 参与

编译方式过程:词法分析、语法分析、语义分析、(中间代码生成、代码优化、)目标代码生成。

解释方式过程:词法分析、语法分析、语义分析。

  • 编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换。

  • 即词法分析、语法分析、语义分析是必须的。

  • 编译器方式中中间代码生成和代码优化不是必要,可省略。

  • 即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码。

2.编译方式具体过程

(1)词法分析

输入:源程序

输出:记号流

词法分析阶段的主要作用是:分析构成程序的字符 及由字符按照构造规则构成的符号,是否符合程序语言的规定。

(2)语法分析

输入:记号流

输出:语法树(分析树)

语法分析阶段可以发现程序中所有的语法错误。包括确定变量是否定义声明。

语法分析阶段的主要作用是:对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确。(例如括号不匹配)

(3)语义分析

输入:语法树(分析树)

语义分析阶段的主要作用是进行类型分析和检查。

语义分析阶段不能发现程序中所有的语义错误。

语义分析阶段可以发现静态语义错误,不能发现动态语义错误,动态语义错误运行时才能发现(除数为0时只能在运行阶段检查出来)

(4)中间代码生成

常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。

中间代码与具体的机器无关(不依赖具体的机器),可以将不同的高级程序语言翻译成同一种中间代码。

中间代码可以跨平台。

因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理提高编译程序的可移植性

(5)代码优化

(6)目标代码生成

目标代码生成阶段的工作与具体的机器密切相关。

寄存器的分配工作处于目标代码生成阶段。

目标程序完全独立于源程序。

3.其他

符号表

不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。

记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。

反编译

编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高级语言源代码,只能转化成功能上等价的汇编程序。

编译过程地址分配

编译过程为变量分配存储单元所用的地址是逻辑地址 ,程序运行时再映射为物理地址

相关推荐
small_wh1te_coder2 天前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
白书宇3 天前
5.从零开始写LINUX内核--从实模式到保护模式的过渡实现
linux·汇编·数据库·开源
浩浩测试一下3 天前
02高级语言逻辑结构到汇编语言之逻辑结构转换 if (...) {...} else {...} 结构
汇编·数据结构·数据库·redis·安全·网络安全·缓存
蚰蜒螟4 天前
JVM安全点轮询汇编函数解析
汇编·jvm·安全
要记得喝水8 天前
汇编中常用寄存器介绍
开发语言·汇编·windows·c#·.net
技术领导力10 天前
华为开源CANN,再次释放“昇腾转向”信号
汇编
DONG91314 天前
Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
开发语言·汇编·数据结构·python·算法·青少年编程·排序算法
embrace9917 天前
【C语言学习】scanf函数
c语言·开发语言·汇编·学习·青少年编程·c#·编辑器
麦兜*17 天前
【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
java·汇编·jvm·算法·spring cloud·ai·排序算法
会掉头发18 天前
x86_64汇编
汇编