我正在编写一些代码来为特定的中间表示生成调用图,而无需通过静态扫描 IR 代码来执行它。IR 代码本身并不太复杂,我对函数调用序列的外观有很好的理解,所以我需要做的就是跟踪调用。我目前正在以明显的方式进行操作:
- 跟踪我们的位置
- 如果我们遇到一个函数调用,分支到那个位置,执行并返回
- 分支在调用者和被调用者之间设置边缘
我对自己的进展感到满意,但我想确保我不会在这里重新发明轮子并面对极端情况。我想知道是否有任何公认的好的算法(和/或设计模式)可以有效地做到这一点?
更新: IR 代码是从自制的类似 Java 语言的字节码反汇编,看起来像Jasmine 规范。