3

私はこれを書いた:

(fitness>g.fitness) ? return 1 : return -1;

次のエラーが発生しました。

トークンの構文エラー。代わりにラベルが必要です。

誰かがこの文脈でどのトークンとラベルがあるか説明できますか?

編集:私のコードを修正してくれてありがとう、しかし将来の参考のために、とにかくトークンとラベルが何であるかを説明できますか?

4

4 に答える 4

6

トークンは、ある種の意味を持つ個々の文字と文字列です。

第3章:Java言語仕様の字句構造で定義されているトークンは次のとおりです。

構文文法の識別子(§3.8)、キーワード(§3.9)、リテラル(§3.10)、セパレーター(§3.11)、および演算子(§3.12)。

指定された行のトークンは次のとおりです。

"(", "fitness", ">", "g.fitness", ")", "?", "return", "1", ":", "return", "-1", ";"

(空白もカウントされますが、上記から省略しました。)


Javaのラベルは、プログラム内のフローの制御に使用され、識別子の後にコロンが続きます。

ラベルの例はですhello:

continueラベルは、およびステートメントと組み合わせて使用​​され、breakどの制御構造を使用するか、continueまたは使用するかを指定しますbreak

ラベル付きステートメントの詳細については、Java言語仕様のセクション14.7を参照してください。


ここでの問題は、次のreturnステートメントにあります。

(fitness>g.fitness) ? return 1 : return -1;
                      ^^^^^^

:の直後にがありreturn 1、コンパイラはそこにラベルがあるはずだと思わせます。

ただし、これreturn 1はそれ自体がステートメントであるため、そこにラベルIDがないため、コンパイラーはラベルを予期していると文句を言いますが、適切に形成されたラベルを見つけることができませんでした。

(fitness>g.fitness) ?  return 1   :   return -1;
                       ^^^^^^^^   ^
                      statement   label without an identifier
于 2010-01-01T08:13:32.670 に答える
5

Returnはステートメントであり、?:式が必要なため、受け入れられません。

return (fitness > g.fitness) ? 1 : -1;

おそらくあなたが望むものです。

理解しやすいようにコードを最初に分割するとき、これらの単位はトークンと呼ばれます。labelは、ステートメントで最初に考えられる言語構造を指していると思います。

パーサーがそのエラーメッセージを表示することを決定する方法を理解するには、パーサーを掘り下げる必要があります。パーサーから適切なエラーメッセージを送信することは簡単ではありません。

于 2010-01-01T07:48:24.343 に答える
1

あなたがする必要があります:

return (fitness>g.fitness) ? 1 : -1;
于 2010-01-01T07:47:40.897 に答える
0

コンパイラは、コードにコロンがあるため、 labelステートメントを宣言しようとしていると考えていると言っていると思いますが、構文が正しくないため、解析できません。

于 2010-01-01T08:11:06.763 に答える