ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 运算符优先级或最大蒙克规则首先出现在一元运算符中

2019-06-12 13:50:28  阅读:253  来源: 互联网

标签:java operator-precedence unary-operator


在这里,我有以下代码:

int a,b,x;
a=b=1;
x=a+++b;

现在x的值将为2,因为a首先是后递增,然后将其添加到b.

以下是编译的字节代码:

 0  iconst_1
 1  dup
 2  istore_2 [b]
 3  istore_1 [a]
 4  iload_1 [a]
 5  iinc 1 1 [a]
 8  iload_2 [b]
 9  iadd
10  istore_3 [x]

所以表达式将等于x =(a)b.

现在另一个表达式x = a b,由于最大的munch规则而不会编译.它将变为x =(a)b,因此编译错误.

上述行为是x = a b,因为运算符的优先级还是因为最大的munch规则?

解决方法:

引自Lexical Translations

The longest possible translation is used at each step, even if the
result does not ultimately make a correct program while another
lexical translation would.

Thus, the input characters a–b are tokenized (07001) as a, , b,
which is not part of any grammatically correct program, even though
the tokenization a, , , b could be part of a grammatically correct
program.

这可以解释原因

x=a+++b

被解析为

x=(a++)+b

另一方面,b被标记为a,b,这导致错误.

标签:java,operator-precedence,unary-operator
来源: https://codeday.me/bug/20190612/1226204.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有