Java定义:标签,令牌

时间:2010-01-01 07:46:10

标签: java token definitions

我写了这个:

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

并收到以下错误:

令牌上的语法错误,而不是标签。

任何人都可以解释在这种情况下令牌和标签是什么吗?

编辑:感谢您修复我的代码,但是您能解释一下代币和标签是什么,以备将来参考吗?

4 个答案:

答案 0 :(得分:6)

标记是具有某种含义的单个字符和字符串。

Chapter 3: Lexical StructureThe Java Language Specification中定义的标记为:

  

标识符(§3.8),关键字(§3.9),   文字(§3.10),分隔符(§3.11),   和句法的运算符(§3.12)   语法。

给定行中的标记是:

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

(空白也很重要,但我从上面省略了它们。)


Java中的标签用于控制程序中的流,它是一个标识符,后跟一个冒号。

标签的示例是hello:

标签与continuebreak语句结合使用,以指定continuebreak到哪个控制结构。

Section 14.7 The Java Language Specification中有关于标记语句的更多信息。


这里的问题是return声明:

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

紧跟:之后有一个return 1,这使得编译器认为那里应该有一个标签。

但是,return 1本身就是一个语句,因此,那里没有标签标识符,所以编译器抱怨它期待一个标签,但它无法找到一个正确形成的标签。

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

答案 1 :(得分:5)

返回是一个语句,而?:需要表达式,因此不被接受。

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

可能就是你想要的。

首先拆分解析代码以便更容易理解,这些单位称为令牌。我猜标签是指一种恰好是语句中第一个可能的语言结构。

要了解解析器如何决定提供该错误消息,需要深入了解解析器。从解析器中提供良好的错误消息并非易事。

答案 2 :(得分:1)

你需要这样做:

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

答案 3 :(得分:0)

我认为编译器告诉你,因为代码中有一个冒号,它认为你试图声明一个label statement,但它无法解析它,因为你的语法不正确。