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

汇编、编译、解释系统

1.编译方式和解释方式

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

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

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

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

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

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

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

2.编译方式具体过程

(1)词法分析

输入:源程序

输出:记号流

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

(2)语法分析

输入:记号流

输出:语法树(分析树)

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

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

(3)语义分析

输入:语法树(分析树)

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

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

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

(4)中间代码生成

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

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

中间代码可以跨平台。

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

(5)代码优化

(6)目标代码生成

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

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

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

3.其他

符号表

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

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

反编译

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

编译过程地址分配

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

相关推荐
Zevalin爱灰灰1 小时前
Linux入门第二部分(ARM裸机篇) 第三章 汇编LED驱动实验
linux·汇编·arm开发
水饺编程1 天前
第2章:Linux 基础,制作【.tar.xz】压缩包文件
linux·c语言·汇编
小向是个Der3 天前
嵌入式进阶——编译与链接
汇编·单片机·学习·编译原理·交叉编译
二十七日秋3 天前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
银河麒麟操作系统3 天前
两案例入选全球计算联盟年度产业应用案例汇编
大数据·汇编·人工智能
abc light3 天前
ARM 裸机开发(2)——ARM 汇编与启动代码
汇编·arm开发
soso19684 天前
Modbus协议开发实战指南
汇编
水饺编程5 天前
第2章:Linux 基础,解压缩【.tar.gz】压缩包
linux·c语言·汇编
水饺编程6 天前
第2章:Linux 基础,exit 命令
linux·c语言·汇编
水饺编程6 天前
第2章:Linux 基础,删除用户
linux·c语言·汇编