【问题标题】:Is Control Flow Graph(CFG) subset of Abstract Syntax Tree (AST)?控制流图(CFG)是抽象语法树(AST)的子集吗?
【发布时间】:2021-09-06 17:19:45
【问题描述】:

我知道控制流图 (CFG) 可以从抽象语法树 (AST) 构建。

但是,我不清楚 CFG 是否是 AST 的子集?

例如,给定一个 CFG,我们可以回到 AST 吗?

【问题讨论】:

  • 它不是一个子集,它是一个新结构。但显然它们是相关的。而且你总是可以设计一个可逆的变压器,所以“我们能回去吗”是微不足道的。 (Q.v. 函数式编程。,)
  • 您如何定义 CSG? Wikipedia's page on CFGs 有一张图片,其中包含一些很明显不能用于恢复 AST 的示例,因为除了每个基本块的节点和每个可能的转换的边之外,该图不包含任何信息。跨度>

标签: abstract-syntax-tree control-flow-graph


【解决方案1】:

但是,我不清楚 CFG 是否是 AST 的子集?

不,AST 是一个完全语法结构。但是 CST 与语言的语义很好地集成在一起。它们也代表不同的东西。

例如,给定一个 CFG,我们可以回到 AST 吗?

这取决于语言,以及该语言中的结构如何映射到控制流。例如,这 2 个 sn-ps 将构建完全不同的 AST;

print('a') if a else print('b')
if a:
    print('a')
else:
    print('b')

但是生成的 CFG 对于这两者来说是相等的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多