我正在编写一些代码来生成特定中间表示的调用图,而不通过静态扫描IR代码来执行它。IR代码本身并不太复杂,我很清楚函数调用序列是什么样的,所以我需要做的就是跟踪调用。我目前的做法很明显:
我对我取得的进展感到满意,但我想确保我不会在这里和面对角落的情况下重新发明轮子。我想知道是否有任何公认的好算法(和/或设计模式)能够有效地做到这一点?
更新: IR代码是从一种自制的Java语言中反汇编的字节码,看起来像茉莉花规格。
发布于 2011-03-06 06:18:41
从学术角度来看,以下是一些考虑因素:
干杯。
更新3月6日
根据添加到原始帖子中的额外信息:
ArrayList<A>,而您有一个class B extends A。基于随机数生成器,您将向列表中添加A和B实例。现在为列表中的所有x调用x,其中foo()是A中的一个虚拟方法,在B中有一个覆盖。因此,只要查看源代码,就无法知道循环是在运行时调用A.foo、B.foo还是同时调用两者。https://stackoverflow.com/questions/5208880
复制相似问题