如何获得程序的控制流程图?

时间:2018-08-22 14:11:09

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

一种常见的方法是

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

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

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