【问题标题】:Why won't javac accept `x = x+++++y`?javac为什么不接受`x = x++++++y`?
【发布时间】:2013-05-10 08:11:48
【问题描述】:

从编译器理论的角度来看,为什么javac编译器不接受x = x+++++y形式的语句,而是接受x = x+++ ++y

【问题讨论】:

    标签: java compiler-construction javac


    【解决方案1】:

    因为++ 是Java 词法分析器的有效标记,所以x+++ ++y 语句将被解析为标记为:

    (x)(++)(+)( )(++)(y)
    

    x+++++y 将被标记为无效:

    (x)(++)(++)(+)(y)
    

    上面是无效的java,因为++操作符只能应用于数值变量,(x++)的结果不是。这种类型的标记是 maximal munch 概念的一个很好的例子。

    来自JLS section 3.2

    每个步骤都使用尽可能长的翻译,即使结果最终不会产生正确的程序,而另一个词法翻译会。

    因此,输入字符 a--b 被标记化(第 3.5 节)为 a、-、b,这不是任何语法正确程序的一部分,即使标记化 a、-、-、b 可能是一部分一个语法正确的程序。

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多