2010-01-01 6 views
3

moi avons écrit ceci:définitions Java: Étiquette, Jeton

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

et reçu l'erreur suivante:

Erreur de syntaxe sur des jetons, l'étiquette prévue à la place. Est-ce que quelqu'un peut expliquer ce que les jetons et les étiquettes sont dans ce contexte?

Editer: Merci d'avoir corrigé mon code, mais pourriez-vous expliquer quand même ce que sont les jetons et les étiquettes, pour référence future?

Répondre

6

Les jetons sont les caractères individuels et les chaînes qui ont un sens.

Tokens, tel que défini dans Chapter 3: Lexical Structure de The Java Language Specification, sont:

identifiers (§3.8), keywords (§3.9), literals (§3.10), separators (§3.11), and operators (§3.12) of the syntactic grammar.

Les jetons dans la même ligne sont:

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

(également Whitespace dénombre, mais je les ai omis de la ci-dessus.)


Les étiquettes en Java sont utilisées pour le contrôle du débit dans un pr ogram, et est un identifiant, suivi d'un deux-points. Un exemple d'étiquette est hello:.

Les étiquettes sont utilisées conjointement avec continue et break déclarations, pour spécifier la structure de contrôle à continue ou à break.

Il y a plus d'informations sur les déclarations étiquetées dans Section 14.7 de The Java Language Specification.


Le problème est ici avec la déclaration return:

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

Il y a un : immédiatement après la return 1, ce qui fait penser au compilateur qu'il est censé être une étiquette là. Cependant, le return 1 est une instruction en soi, par conséquent, il n'y a aucun identificateur d'étiquette, donc le compilateur se plaint qu'il attendait une étiquette, mais il n'a pas pu trouver une étiquette correctement formée.

(fitness>g.fitness) ? return 1 : return -1; 
         ^^^^^^^^ ^
         statement label without an identifier 
1

que vous devez faire:

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

Retour est une déclaration et: a besoin d'expressions et il est donc pas acceptée.

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

est probablement ce que vous voulez.

Lors de l'analyse syntaxique, le code est d'abord divisé afin qu'il soit plus facile à comprendre, ces unités sont appelées jetons. Je suppose que l'étiquette fait référence à une construction d'une langue qui se trouve être la première possible dans une déclaration.

Pour comprendre comment l'analyseur décide de donner ce message d'erreur, il faut creuser dans l'analyseur. Donner de bons messages d'erreur à partir de l'analyseur n'est pas trivial.

0

Je pense que le compilateur vous dit que puisqu'il y a un deux-points dans votre code, il pense que vous essayez de déclarer un label statement, mais il ne peut pas l'analyser car votre syntaxe est incorrecte.