banli17 / note

学习记录
https://banli17.github.io/note/docs/intro
MIT License
17 stars 2 forks source link

编译程序总体结构 #119

Open banli17 opened 2 years ago

banli17 commented 2 years ago

翻译程序 一种语言的程序(源程序)翻译成等价的另一种语言程序(目标程序)

源程序是高级语言程序,目标程序是汇编或机器程序。

解释程序 源程序一句一句输入,翻译成目标程序

编译程序 源程序全部一次翻译成目标程序。

编译系统 编译系统 = 编译程序 + 运行系统(为程序运行提供环境,如运行库、链接等)

其它翻译程序

八大模块

image
banli17 commented 2 years ago

词法分析

image

为了语法分析,需要把单词进行归类。

比如描述赋值语句: 标识符 + 赋值号 就是赋值语句

词法分析由词法分析器 ( Lexical Analyzer, 或 Scanner)完成。 词法分析器一个个扫描字符,输出一个个 token。

banli17 commented 2 years ago

语法分析

image

将词组合成句子的过程。如汉语中的 主语 + 谓语 + 宾语 -》 句子

image

将 token 变成树。自底向上。

banli17 commented 2 years ago

语义分析

image image
banli17 commented 2 years ago

中间代码生成

image

好处是没有括号,执行顺序和计算顺序一致。

可以用串表示,也可以用树表示。树结构清晰,但是串运算简单。

最后输出四元表达式。

中间代码特点:简单规范、与机器无关、易于优化和转换

banli17 commented 2 years ago

代码优化

image

适当优化即可,越到后面花大力气优化提升的会很少。

机器无关的优化

局部优化

循环优化

机器有关的优化

banli17 commented 2 years ago
image
banli17 commented 2 years ago
image image
banli17 commented 2 years ago

模块分类 分析:词法分析 语法分析 语义分析 综合:中间代码生成,代码优化,目标代码生成 辅助: 符号表管理,出错处理