#001 //
#002 void walk(Tree tp, int tlab, int flab)
#003 {
#004 //创建DAG森林.
#005 listnodes(tp, tlab, flab);
#006
#007 //如果DAG森林生成.
#008 if (forest)
#009 {
#010 Node list = forest->link;
#011 forest->link = NULL;
#012
#013 //把多次引用的DAG节点,修改为对临时变量的引用.
#014 if (!IR->wants_dag && errcnt == 0)
#015 {
#016 list = undag(list);
#017 }
#018
#019 //创建代码块保存DAG的列表.
#020 AppendCode(code::Gen)->u.forest = list;
#021 forest = NULL;
#022 }
#023
#024 reset();
#025 deallocate(STMT);
#026 }
本文介绍了一个涉及DAG(有向无环图)森林创建的过程,通过遍历树结构来生成中间代码,并最终转化为代码块。文章详细阐述了如何处理DAG节点的重复引用,以及如何将这些节点转换为对临时变量的引用,从而优化生成的代码。
8072

被折叠的 条评论
为什么被折叠?



