2012-03-14 37 views
2

我正在为java的一大部分编写编译器。我目前正在尝试检查语句的可达性。我发现了解决这个问题的JLS部分,但似乎有很多规则需要“硬编码”。他们是否有任何算法能够以一种干净的方式检查它?我搜查了周围,但没有运气!如何在Java中检查语句可达性

链接:http://docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#236365

+1

这些是规则,我不认为你可以找到一个聪明的算法,完全服从这些规则,但并不复杂。原因是他们可能会将该算法的描述放在JLS中。 :)尽管这里似乎有很多规则,但大多数规则都表示“如果X可以到达,X可以正常完成”,这是无所作为的规则。 – biziclop 2012-03-14 20:22:18

回答

2

学术回答:这个问题是不可判定的,即没有算法,可以严格地回答这个问题。

实用答案:查看关于静态分析的教科书。这是一个非常难的问题,你不会在这里得到一个完整的答案(我认为)。当前的编译器尝试一个相当有限的解决方案来解决这个问题,其他非编译工具尝试其他的东西。最后,对于实现,您必须决定要覆盖哪些可行的案例,以及编译器允许的速度。因为显然,分析越精确,分析时间就越长。

这就是说,看一本教科书实际上会告诉你可以做什么样的事情,以及它们是多么“昂贵”。