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

汇编、编译、解释系统

1.编译方式和解释方式

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

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

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

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

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

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

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

2.编译方式具体过程

(1)词法分析

输入:源程序

输出:记号流

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

(2)语法分析

输入:记号流

输出:语法树(分析树)

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

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

(3)语义分析

输入:语法树(分析树)

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

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

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

(4)中间代码生成

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

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

中间代码可以跨平台。

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

(5)代码优化

(6)目标代码生成

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

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

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

3.其他

符号表

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

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

反编译

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

编译过程地址分配

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

相关推荐
一品人家4 天前
win32汇编环境,得到当前日期时间的例子
汇编
试试看1685 天前
自制操作系统第三天
汇编·系统架构
0xCC说逆向7 天前
Windows逆向工程入门之汇编位运算
c语言·汇编·windows·安全·逆向
矮油0_o7 天前
30天开发操作系统 第 20 天 -- API
c语言·汇编·操作系统
charlie1145141918 天前
从0开始的操作系统手搓教程 4:做好准备,跳到加载器(Loader)
汇编·学习·操作系统·调试·mbr·手搓教程·bochs
官子无敌刘小路10 天前
汇编简介&常用语法
汇编
二进制怪兽14 天前
[笔记] 汇编杂记(持续更新)
汇编
bae-唯一15 天前
关于32位和64位程序的传参方法及虚拟机调试工具总结
汇编·学习
E_han16 天前
7.list
开发语言·汇编·数据结构·c++·算法·list
二进制怪兽16 天前
[笔记] x86汇编语言:从实模式到保护模式之第一章 十六进制计数法
汇编