繁体   English   中英

了解Java中的Maximal Munch?

[英]Understanding Maximal Munch in Java?

我知道Maximal Munch Rule不是Java特有的,但我的问题只涉及JavaJava compiler

我还读了一些相关的答案:

但我仍然无法完全掌握Maximal Munch及其应用的概念。

如下面的代码所示:

int i = 3;
int j = +i;
System.out.println(i); //3
System.out.println(j); //3

语句int j = +i; Java compiler解释,为什么这有效?

另一个例子, int j = + +i; 也有效,但我不确定如何。

我试图自己理解这个概念,但我无法理解。

我想知道它是如何工作的,它背后的概念以及Java compiler如何处理这些语句。

加号可用作:

  • 1 + 2二进制数字加法运算符
  • "A" + "B"二进制字符串连接运算符
  • ++i一元增量运算符
  • +i一元正号运算符(不常见, -i一元否定符号运算符更常见)

由于正号运算符实际上没有任何事情,因此可以将其消除。

// All the same
int j = + +i;
int j = +i;
int j = i;
int j = +(+(i));
int j = +(i);

有关更多信息,请参见此处: https//docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html

这是一元加运算符,表示正值。 坦率地说,这是毫无意义的 - +ii

您可以从Java语言规范中查看有关词汇翻译的这一部分

每个步骤都使用尽可能长的翻译,即使结果最终没有制作正确的程序,而另一个词汇翻译也是如此。 有一个例外:如果词汇翻译发生在类型上下文(§4.11)中,并且输入流有两个或多个连续的>字符后跟非>字符,则每个>字符必须转换为令牌以用于数值比较运算符>

输入字符a--b被标记化(§3.5)为a--b ,它不是任何语法正确程序的一部分,即使标记化a--b可能是语法正确程序的一部分。

所以在你的情况下:

int j = +i;

被标记为:

  • int
  • j
  • = (赋值运算符)
  • + (表示正值的一元加运算符)
  • i

int j = + +i;

被标记为:

  • int
  • =
  • j
  • + (表示正值的一元加运算符)
  • 另一个一元加运算符+
  • i

因此,这两个语句与int j = i完全相同,因为所有+运算符都被解释为一元加号(无加法+或增量++ )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM