1) 消除仅初始化一次的临时变量:遍历所有中间变量,对于仅仅在t := x时进行
过一次赋值的临时变量t置标记,对于有标记的临时变量,遍历中间变量,将
t全部替换为x,并且删除原有的t := x,如return 0;会产生中间代码t1 := #0,
return t1经过优化后变为return #0
2) 常量计算:遍历所有中间变量,对于x := y +/-/*// z的中间代码,若y、z均为
常量,则计算出x的值,并将中间代码中的x全部替换为新的常量,并且移除
当前的中间代码,如x = #5 + #3, y = x会优化为y = #8
3) 相邻标签:遍历所有中间变量,对于相邻的标签,用后一个标签替换掉前面一
个,如LABEL label1,LABEL label2,…,GOTO label 1 会优化为LABEL label2,…,GOTO
label 2
4. 程序基本流程:由于没有全局变量,因此中间代码的生成在对一个函数的语义分析
结束后进行,语句的生成在每个函数里面进行,在每个CompSt里处理符号表index
的移动,处理变量定义和语句,生成中间代码到内存中的list 中,然后进行优化,
第一次优化是遍历list,消除仅初始化一次的临时变量,然后再次遍历list,进行第
二次优化,计算出常量运算的值和消除相邻的标签,最后将中间代码写入指定的文
件