1

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

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

4

1 回答 1

2

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

一种常见的方法是

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

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

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

于 2018-08-22T16:05:47.163 回答