Java7 规范中的语法真的等效吗?
JLS v7 第 18 章中的语法似乎与文档中其他部分的结构不同,但对我来说似乎存在差异。特别是在第15章中,规则是:
RelationalExpression:
ShiftExpression
RelationalExpression < ShiftExpression
RelationalExpression > ShiftExpression
RelationalExpression <= ShiftExpression
RelationalExpression >= ShiftExpression
RelationalExpression instanceof ReferenceType
它产生了一个关系表达式(因此是一个相等表达式),而它反过来又可以用作相等表达式规则中的LHS,该规则产生一个相等表达式。foo instanceof Bar
foo instanceof Bar == false
但是当查看第18章中的语法时,他们将其简化了一点:
Expression2:
Expression3 [Expression2Rest]
Expression2Rest:
{ InfixOp Expression3 }
instanceof Type
这看起来很奇怪,这意味着我们可以用二元运算符将s链接在一起,或者我们可以检查一个的类型。具体来说,现在是一个,但我不认为使用一个作为等式比较的LHS是有效的。Expression3
Expression3
foo instanceof Bar
Expression2
Expression2
我是否遗漏了第18章语法中有效表达的内容?请注意,根据第15章中的规则和我的编译器,它是一个有效的表达式。foo instanceof Bar == false