DSF*_*DSF 8 java compiler-construction javac
从编译器理论的角度来看,为什么javac编译器不接受表单声明x = x+++++y但接受x = x+++ ++y?
因为它++是java词法分析器的有效标记,所以该语句x+++ ++y将被解析为标记,如下所示:
(x)(++)(+)( )(++)(y)
Run Code Online (Sandbox Code Playgroud)
而x+++++y将被标记为无效:
(x)(++)(++)(+)(y)
Run Code Online (Sandbox Code Playgroud)
以上是无效的java,因为++运算符只能应用于数值变量,而结果(x++)不是.这种类型的标记化是称为最大蒙克的概念的一个很好的例子.
来自JLS部分3.2
每个步骤都使用尽可能长的翻译,即使结果最终没有形成正确的程序而另一个词汇翻译也会如此.
因此,输入字符a-b被标记化(§3.5)为a, - ,b,它不是任何语法正确程序的一部分,即使标记化a, - , - ,b可能是语法的一部分正确的程序.
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |