控制流图CFG是抽象语法树AST的子集吗?

问题描述

我知道可以从抽象语法树 (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 对这两者来说是相等的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...