问题描述
我知道可以从抽象语法树 (AST) 构建控制流图 (CFG)。
但是,我不清楚 CFG 是否是 AST 的子集?
举个例子,给定一个 CFG,我们可以回到 AST 吗?
解决方法
但是,我不清楚 CFG 是否是 AST 的子集?
不,AST 是一个完全语法结构。但是 CST 与语言的语义很好地集成在一起。它们也代表不同的东西。
举个例子,给定一个 CFG,我们可以回到 AST 吗?
这取决于语言,以及该语言中的构造如何映射到控制流。例如,这两个片段将构建完全不同的 AST;
print('a') if a else print('b')
if a:
print('a')
else:
print('b')
但是生成的 CFG 对这两者来说是相等的。