【问题标题】:How to get a control flow graph of a program?如何获得程序的控制流程图?
【发布时间】:2019-01-28 19:53:52
【问题描述】:

我想获得代码/程序的控制流图(无论是任何编程语言并给出其语法)。 我曾尝试在 python 中使用lark library 来解析一个基本的 C 示例程序 [我提供了基本 c 语法的语法 to lak]。结果,它给了我一个解析树或类似东西的对象,现在我想知道从哪里开始。

话虽如此,任何一种新方法都受到高度赞赏。主要目标是在给定编写语言的语法的情况下获得代码/程序的控制流图。

【问题讨论】:

    标签: python-3.x grammar control-flow-graph lark-parser


    【解决方案1】:

    结果,它给了我一个解析树或类似东西的对象,现在我想知道从哪里开始。

    一种常见的方法是

    1. 遍历树以生成中间表示,其中所有循环和条件构造都替换为跳转,
    2. 将 IR 的指令划分为基本块,方法是在每个跳转标签之前和每次跳转之后开始一个新块,然后
    3. 构建一个控制流图,其中基本块是节点,每个不以跳转结束的块都有一条到后面的块的边,每个以跳转结束的块都有一条边可能的跳转目标(传统条件跳转指令的跳转目标将包括以下块)。

    主要目标是在给定编写语言的语法的情况下获得代码/程序的控制流图。

    如果您只知道该语言的语法,则无法获得该程序的 CFG。您需要对语言的语义有所了解才能构建 CFG。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2013-04-22
      • 2019-11-07
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多