【问题标题】: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】:
结果,它给了我一个解析树或类似东西的对象,现在我想知道从哪里开始。
一种常见的方法是
- 遍历树以生成中间表示,其中所有循环和条件构造都替换为跳转,
- 将 IR 的指令划分为基本块,方法是在每个跳转标签之前和每次跳转之后开始一个新块,然后
- 构建一个控制流图,其中基本块是节点,每个不以跳转结束的块都有一条到后面的块的边,每个以跳转结束的块都有一条边可能的跳转目标(传统条件跳转指令的跳转目标将包括以下块)。
主要目标是在给定编写语言的语法的情况下获得代码/程序的控制流图。
如果您只知道该语言的语法,则无法获得该程序的 CFG。您需要对语言的语义有所了解才能构建 CFG。