【发布时间】:2017-11-30 17:37:02
【问题描述】:
如果我尝试使用大括号初始化不是数组的变量,则会出现编译错误。
例如:
public class test1 {
public static void main(String[] args) {
double a = {1.5,6.3};
}
}
使用“javac”,我得到这个编译错误:
test1.java:13: error: illegal initializer for double
double a = {1.5,6.3};
^
1 error
但是,我正在学习 Java 语法,我发现了以下作品(来自 The Java Language Specification):
VariableDeclarators:
VariableDeclarator
VariableDeclarators , VariableDeclarator
VariableDeclarator:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
VariableDeclaratorId:
Identifier
VariableDeclaratorId [ ]
VariableInitializer:
Expression
ArrayInitializer
ArrayInitializer:
{ VariableInitializersopt ,opt }
通过这些规则,我可以成功编译上面的代码(我用一个使用 jflex 的编译器和一个指定了语法的 .cup 规范文件尝试了这个)。 为什么这可能?有什么我忽略的吗?
谢谢。
【问题讨论】:
-
@ElliottFrisch 这是来自官方 Java 规范的语法。我想我们可以假设它没有错。
-
@sepp2k 我的意思是说 OP(不存在)的实现必须不完整。
标签: java compiler-errors compilation grammar variable-declaration