voidtranslate1();/*生成四元式翻译函数,即主函数*/ voidactionprep();/*四元式预处理,使之更适应生成目标代码*/ 这里需要注意到的是,动作序列的获取,其实是在LL1语法分析的时候已经获取道理相应动作,方法很简单,通过不断确定语法分析栈顶,直接确认其所可能具有的动作序列,并逐个直接导入文件中。 3.5.5运行截图
3.6中间代码优化模块 (负责人:宋世波) 3.6.1 功能 1.划分基本块 2.产生DAG图 3.优化节点
4.输出优化后的四元式到文件中
49
我们在编写程序中,很难做到所书写的程序是最优的,比如定义了后面不曾使用的变量,对同一对象赋了多个不同的变量名,这些虽然不影响程序的正确性,但是在程序进行编译成目标代码的过程中,会无端增加四元式的个数从而生成众多不必要的目标代码,
因此,在生成目标代码前,我们有必要进行这样一个优化的操作来尽可能的缩短最终四元式的个数,为产生更高效的目标代码提供前提保障。 优化方法:
DAG(Directed Acyclic Graph)是指无环有向图;这里用 来对基本块内的四元式序列进行优化。
采用老师上课时所讲的基于DAG的局部优化算法,重组中间代码生成
过程中生成的四元式序列,以达到对表达式的优化。 3.6.2 数据结构
structDAG_node {/*DAG图节点及链节点*/ };
structDAG {/*DAG图*/
char mes[15];/*节点信息*/ tvp it;/*节点类型*/ structDAG_node *synonymous;
int ope;/*节点运算符*/ int level;
structDAG *left;/*左叶子*/ structDAG *right;/*右叶子*/
50
相关推荐: