8
从编译器理论的角度来看,为什么javac编译器不接受x = x+++++y
格式的语句,但接受x = x+++ ++y
?为什么javac不接受`x = x +++++ y`?
从编译器理论的角度来看,为什么javac编译器不接受x = x+++++y
格式的语句,但接受x = x+++ ++y
?为什么javac不接受`x = x +++++ y`?
因为++
是Java词法分析器有效令牌,声明x+++ ++y
将被解析为标记为:
(x)(++)(+)()(++)(y)
而x+++++y
将被标记化到无效:
(x)(++)(++)(+)(y)
以上是无效的java,因为++
运算符只能应用于数值变量,(x++)
的结果不是。这种类型的标记化是maximal munch这个概念的一个很好的例子。
最长可能的翻译使用的每一步,即使结果最终并没有做出正确的程序,而另一个词汇翻译会。因此,输入字符a-b被标记(§3.5)为a, - ,b,它不是任何语法正确的程序的一部分,即使标记化a, - , - ,b可能是作为语法正确的程序的一部分。
很好的答案。谢谢。 – DSF 2013-05-13 17:46:28