Java パーサーはあいまいな単項演算子をどのように処理しますか?
たとえば、int x
どこかで宣言したと仮定すると、+--x
完全に有効なコードです。---x
も理論的には有効ですが、コンパイラはエラーをスローします。同様に、+~~~~~~+--x
は受け入れられ~~~~~~++--x
ますが、どちらも有効な式に解析できますが、受け入れられません。
私が知る限り、文法があいまいであるため、トークン化中に処理する必要がありますが、それを説明するものは何も見つかりません。
Java パーサーはあいまいな単項演算子をどのように処理しますか?
たとえば、int x
どこかで宣言したと仮定すると、+--x
完全に有効なコードです。---x
も理論的には有効ですが、コンパイラはエラーをスローします。同様に、+~~~~~~+--x
は受け入れられ~~~~~~++--x
ますが、どちらも有効な式に解析できますが、受け入れられません。
私が知る限り、文法があいまいであるため、トークン化中に処理する必要がありますが、それを説明するものは何も見つかりません。
---x
意味がある可能性があるため、または-(--x)
可能性がないためにあいまいではない間、あいまいです。--(-x)
-(-(-x))
+--x
+-(-x)
Stephen Pが示唆しているように、Javaでは単項演算子は右から左にグループ化されます。つまり、さまざまな演算子が右にグループ化される可能性があるため、これらの式はあいまいです。単項演算子の規則については、Java7仕様のセクション15.15を参照してください。
編集
ある程度、あなたはあなた自身の質問に答えたと思います。--- xのようにあいまいな式は、コンパイラが何をしたいかわからないため、コンパイルエラーを引き起こすようです。このような場合、式をより具体的にすることによって、たとえば括弧を追加してあいまいさを取り除くことによって、あいまいさを解決する必要があるのはプログラマーです。