整体contents

compiler (source code ——> machine code)
non-trivial非平凡的
经过 语义分析->语法分析->类型检查等各种trivial的分析(前端),生成中间代码IR->进行non-trivial的分析(及静态分析)。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vmEsiRzh-1677574742921)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228142107245.png)]](https://img-blog.csdnimg.cn/d2ad9878809b47ba942fea6cf8b4ac4d.png)
IR介绍
IR为三地址码(3-address)(一个运算符,运算对象1,运算对象2,结果)(因为每个陈述都包含了三个变量,所以它被称为三地址码。)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y44e3nXv-1677574742922)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228144449506.png)]](https://img-blog.csdnimg.cn/fc0395f88f34410b8d381da32fea22d2.png)
常用三地址码(简单的)举例:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6EdzBnu0-1677574742922)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228145923576.png)]](https://img-blog.csdnimg.cn/147d8b72bef14b3db705c19d0286bb7b.png)
AST vs IR
IR特点:
- 更接近机器语言
- 通常语言都可以转换成IR,对语言无依赖性
- 简洁统一
- 保留了控制流信息
- 有利于进行静态分析

SSA(static single assignment)
给每个definition一个fresh name,如下图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bbwapkkd-1677574742922)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228154319402.png)]](https://img-blog.csdnimg.cn/70e1faeac9c644d69c4e498420b79486.png)
针对最后一条(每个变量只有一个定义)引入的一种function(phi-function 类似于不只一个definition)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYZCEoGB-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228154521599.png)]](https://img-blog.csdnimg.cn/2767c926eb664296a627fb3e84aac5fa.png)
SSA优势:流信息有所保存、定义-使用更明确清楚
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3OrHKIoh-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228155241711.png)]](https://img-blog.csdnimg.cn/6fe347f3cf2144b5a8e6db9640108605.png)
控制流图:
静态分析的基础结构
3AC to CFG
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MdQw0OYJ-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228155558924.png)]](https://img-blog.csdnimg.cn/ede73d3cd5df4867a76a7847d08ff9e0.png)
BB块的构建
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNTPtuD4-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228160947225.png)]](https://img-blog.csdnimg.cn/0adee89a772149aabd0bb73ce16ac80a.png)
1.确认leader
- 第一个instruction
- target instruction
- jump之后的第一个instruction
2.构造BB
例子:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GmXKKFi-1677574742924)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228161416045.png)]](https://img-blog.csdnimg.cn/5d85557709604531a1a90fd4bfcbd7be.png)
CFG构造:在BB的基础上添加边(哪些需要加,哪些不需要)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdXna6TI-1677574742924)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228162053523.png)]](https://img-blog.csdnimg.cn/188ccb34ad18464eaaffc4972fc0fab7.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aydbHMDj-1677574742924)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228162848943.png)]](https://img-blog.csdnimg.cn/59eb804525f949268366ba5dbc5ef96c.png)
PL ---- JVM(方法调用简单介绍)
![片转存中...(img-aydbHMDj-1677574742924)]](https://img-blog.csdnimg.cn/a4ade8aa265f4fd9b11a2cc129417c62.png)



















