为什么a=b+++c解析为a=b++,+,c?可以是a = b,+,++ c吗?词典工具后是否有任何顺序或规则? int a = 20, b = 10, c = 0; // a=b+++c is compiled as // b++ +c // a=b+c then b=b+1 a = b+++c; System.out.println("Value of a(b+c),b(b+1),c = " + a + "," + b + "," + c);输出 :Value of a(b+c),b(b+1),c = 10,11,0
2 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
对Java代码进行标记后,它将采用Java语言规范第3.2节中规定的最长的Token :
3.2。词汇翻译
使用以下三个词法转换步骤,原始的Unicode字符流被转换为一系列标记:
将Unicode字符原始流中的Unicode转义(第3.3节)转换为相应的Unicode字符。形式的Unicode转义
\uxxxx
,其中xxxx
是一个十六进制值,表示其编码为的UTF-16代码单元xxxx
。此翻译步骤允许仅使用ASCII字符来表示任何程序。将步骤1产生的Unicode流转换为输入字符和行终止符流(第3.4节)。
将步骤2产生的输入字符和行终止符流转换为一系列输入元素(§3.5),这些元素在空格(§3.6)和注释(§3.7)之后被丢弃,由标记(§3.5)组成它们是句法语法(第2.3节)的结尾符号。
即使结果最终不能做出正确的程序,而每个词法都可以使用,最长的翻译也会在每个步骤中使用。
因此,输入的字符- B是记号化(§3.5)为
a
,--
,b
,这是不任何语法正确的方案的一部分,即使该标记化a
,-
,-
,b
可能是一个语法正确的程序的一部分。
holdtom
TA贡献1805条经验 获得超10个赞
是的,词法学家只是贪婪的。当找到新的+时,其首要任务是检查它是否可以通过构成多字符运算符的字符(例如++或+ =)来完成
您可以通过a ++ 1和+++ 1之间的差异看到它。一个无效,另一个虽然有效,但仍然有效。
添加回答
举报
0/150
提交
取消