我正在为 java 的一个大子集编写一个编译器。我目前正在尝试检查语句的可达性。我发现 JLS 部分解决了这个问题,但似乎有很多规则需要“硬编码”。它们是否有任何算法可以以干净的方式检查这一点?我四处寻找但没有运气!
链接:http://docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#236365
最佳答案
学术回答:这个问题是不可判定的,即没有算法可以严格回答这个问题。
实际答案:查看静态分析教科书。这是一个非常困难的问题,在这里你不会得到完整的答案(我认为)。 当前的编译器尝试了相当有限的解决方案来解决问题,其他非编译器工具则尝试其他方法。最后,对于实现,您必须决定要涵盖哪些可行的情况,以及允许编译器的速度有多慢。因为显然,你的分析越精确,花费的时间就越长。
话虽这么说,看教科书实际上会告诉你可以做什么样的事情,以及它们有多“昂贵”。
关于java - 如何检查Java中语句的可达性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709589/