みたいな簡単な表現
(x) - y
x
が型名であるかどうかによって解釈が異なります。x
が型名でない場合は、から(x) - y
減算するだけです。ただし、が型名の場合は、の否定を計算し、結果の値を type にキャストします。y
x
x
(x) - y
y
x
典型的な C または C++ コンパイラではx
、パーサーが typedef または struct 宣言を処理するとすぐにそのような情報をレクサーに伝達するため、 が型であるかどうかという問題に答えることができます。(このように必要なレベル違反は、C の設計の最も厄介な部分だったと思います。)
ただし、Java ではx
、ソース コードの後半まで定義されない場合があります。Javaコンパイラはどのようにしてそのような式を明確にしますか?
Java は使用前の宣言を必要としないため、Java コンパイラーが複数のパスを必要とすることは明らかです。しかし、これは、最初のパスで式の解析に関して非常に雑な仕事をし、その後のパスで別のより正確な式の解析を行う必要があることを暗示しているようです。それは無駄に思えます。
より良い方法はありますか?