note icon indicating copy to clipboard operation
note copied to clipboard

编译程序总体结构

Open banli17 opened this issue 2 years ago • 8 comments

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

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

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

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

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

其它翻译程序

  • 汇编 : 汇编-》机器
  • 反汇编
  • 交叉编译: 电脑上写的程序编译成 手机程序。

八大模块

image

banli17 avatar Sep 22 '22 15:09 banli17

词法分析

image

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

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

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

banli17 avatar Sep 22 '22 15:09 banli17

语法分析

image

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

image

将 token 变成树。自底向上。

banli17 avatar Sep 22 '22 15:09 banli17

语义分析

image image

banli17 avatar Sep 22 '22 15:09 banli17

中间代码生成

image

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

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

最后输出四元表达式。

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

banli17 avatar Sep 22 '22 15:09 banli17

代码优化

image

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

机器无关的优化

局部优化

  • 常量合并:常量运算在编译期间完成,如 8 + 9 * 4
  • 公共子表达式的提取,在基本块内进行的

循环优化

  • 强度削减:用较快的操作代替慢的操作
  • 代码外提:循环不变计算移除循环

机器有关的优化

  • 寄存器:将常量放入寄存器,减少访问内存的次数
  • 体系结构:MIMD/SIMD /SPMD /向量机/流水机
  • 存储策略:根据算法访问的要求安排:cache、并行存储体系 - 减少访问冲突

banli17 avatar Sep 22 '22 15:09 banli17

image

banli17 avatar Sep 22 '22 15:09 banli17

image image

banli17 avatar Sep 22 '22 15:09 banli17

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

banli17 avatar Sep 22 '22 15:09 banli17