我正在编写一些代码,用于生成特定中间表示的调用图,而无需通过静态扫描IR代码来执行它。 IR代码本身并不太复杂,我对函数调用序列的样子有很好的理解,所以我只需要跟踪调用。 我目前正在按照显而易见的方式进行:
- 跟踪我们的位置
- 如果我们遇到函数调用,请转到该位置,执行并返回
- 在分支时,在调用者和被调用者之间放置一个边缘
我对我所得到的结果感到满意,但我想确保我没有重复造轮子,并且面对角落情况。 我想知道是否有任何已接受的良好算法(和/或设计模式),可以高效地执行此操作?
更新: IR代码是自制Java类语言的字节码反汇编,并且看起来像Jasmine规范。