gpt4 book ai didi

Java语法变量声明产生式规则

转载 作者:行者123 更新时间:2023-11-30 06:05:02 25 4
gpt4 key购买 nike

如果我尝试使用大括号初始化一个不是数组的变量,则会出现编译错误。

例如:

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 规范文件试过了)。为什么这是可能的?有什么我忽略的吗?

谢谢。

最佳答案

是的,语法是对的,但没有任何意义。

“ pig 在天上飞。”是合乎语法的英语句子,但没有意义。

你已经写了一个符合语法的 Java 语句,但是编译失败了,因为编译不仅仅是匹配语法,类型也必须匹配(还有很多其他事情)。这里,= 的左边是一个双类型变量,右边是 double[] 类型的表达式。这 2 种类型不可隐式转换,因此代码无法编译。

为了让它编译成功,尝试将 double 更改为 double[]

关于Java语法变量声明产生式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com