作为学校的工作,我正在编写一个非常简单的编译器,到目前为止,我对CFG在代码生成过程中的作用感到非常困惑。我清楚地知道什么是CFG。我只是想念它的用法或重要性。让我们澄清这个问题。我已经看到一些编译器(特别是Python编译器)首先从AST构建CFG,然后以某种拓扑顺序将CFG展平以生成最终代码。从这里出现两个问题。
如果我不构建CFG而是在以深度优先的顺序遍历AST时直接发出代码怎么办?会导致错误的代码生成吗?
请稍等。 CFG通常不是DAG,因为存在用于循环构造的后沿。我们如何从拓扑上整理或整理这种东西?
我隐约感到CFG是在程序上执行各种分析的基石,以优化代码或进行诊断。但是,将这些分析放在一边,以正确的代码生成为唯一目的,CFG是否必要?它的作用是什么?