gpt4 book ai didi

+的Java语法

转载 作者:太空狗 更新时间:2023-10-29 22:42:35 25 4
gpt4 key购买 nike

为什么以下语法正确:

x = y+++y;

Where it means y++ + y or y + ++y which means y * 2 + 1 (not sure about this, though: very ambiguous)

但是这个语法不正确:

x = y+++++y;

Which should mean y++ + ++y, which means y * 2 + 2

是否有导致此语法不正确的原因? (编辑:感谢您解释为什么它是无效语法,但这不是我提出这个问题的意图。)

(编辑:当然我没有在真正的代码中使用它,纯粹是为了解析器/词法分析器的兴趣;但我想知道为什么解析器不喜欢这个; 最后一个例子甚至看起来比第一个例子更明确。)

(编辑:

    int i = 0;
int j = (i = 3)+++i;

也是无效的,尽管对我来说似乎很明确,(i = 3) 是一个值,因此 (value + value) 然后是 ++i 值 token 。)

最佳答案

解析是贪心的,即先寻找最长匹配的token。这大大简化了实现(大概)。还有 Java language spec (3.2) 说

Java always uses the longest possible translation at each step, even if the result does not ultimately make a correct Java program, while another lexical translation would

因此,对于 y+++++y;,解析器/分词器会将其分解为如下所示:

  • 变量y
  • 运算符++(因为没有+++运算符,所以++是最长的,符合java的语法)
  • 运算符++(因为没有+++运算符,所以++是最长的,符合java的语法)
  • operator +(这是现在符合语法的第一个)
  • 变量y

实际上它被解析为 (y++) (++) (+y)++ 运算符是为变量定义的,但是第一个表达式 (y++) 返回一个值。您不能将下一个运算符 (++) 应用于值。

这意味着 x = y+++y; 将被解析为 y++ + y,这没有错。

关于+的Java语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2623966/

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