程序编译过程
IR
AST与IR的区别
3-Address Code(3AC)
特点:一条指令中最多出现3个地址,右值只能有一个、
这里Address可以是:
- Variable name: x, y
- Constant: 3
- Compiler-generated temporary: t1, t2
如果有类似于x = 1 + 2 + 3的语句,就需要改为t1 = 1 + 2; x = t1 + 3;
Java Static Analysis Framework-Soot
IR: Jimple
https://github.com/soot-oss/soot
SSA
相当于是3AC Code+每个赋值都为新的变量
e.g:
对于这种情况下,translator就不明白x到底应该对应哪个分支的x,此时就引入phi-function。