2012-03-14 9 views
2

私はjavaの大きなサブセット用にコンパイラを作成しています。私は現在、ステートメントの到達可能性をチェックしようとしています。私はこれに対処するJLSセクションを見つけましたが、 "ハードコーディング"する必要がある多くのルールがあるようです。彼らはきれいな方法でこれをチェックするアルゴリズムですか?私は周りを捜しましたが、運はありません!Javaでの文の到達可能性をチェックする方法

リンク:http://docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#236365

+1

これらはルールですが、これらのルールに厳密に従うが、複雑ではない巧妙なアルゴリズムを見つけることはできません。その理由はおそらく、彼らはおそらくそのアルゴリズムの記述をJLSに入れていたからです。 :)そこにはたくさんのルールがあるようですが、ほとんどの人は、「Xが到達可能であれば正常に完了できる」と言っています。これは何もしないルールです。 – biziclop

答えて

2

アカデミック答え:この問題は、決定不能である、すなわち厳密に質問に答えることができます何のアルゴリズムはありません。

実用的な答え:静的解析の教科書をチェックしてください。これは非常に難しい問題です。あなたはここで全面的な答えを得ることはできません(私は思う)。 現在のコンパイラは、問題にはかなり限定された解決策を試しています。他の非コンパイラツールは、他のことを試しています。結局のところ、実装のためには、どの実現可能なケースをカバーしたいのか、どの程度の時間がかかるのかを決定する必要があります。明らかに、解析の精度が高いほど、時間がかかります。

教科書を見ると、実際にどのようなことができ、どのように「高価」であるかが教えられます。

関連する問題