文件首先使用最大咀嚼规则进行标记化(转换为令牌序列) - 始终获得最长的有效令牌。您的文本将转换为以下顺序:
n ++ ++ n
这不是有效的表达式。
来自 JLS §3.2:
3.2. 词汇翻译
原始 Unicode 字符流使用以下三个词法转换步骤转换为一系列标记,这些步骤依次应用:
Unicode 的转换在 Unicode 字符的原始流中转义 (§3.3) 为相应的 Unicode 字符。格式为 \uxxxx 的 Unicode 转义(其中 xxxx 是十六进制值)表示编码为 xxxx 的 UTF-16 代码单元。此转换步骤允许仅使用 ASCII 字符表示任何程序。
将步骤 1 生成的 Unicode 流转换为输入字符和行终止符流 (§3.4)。
将步骤 2 产生的输入字符和行终止符流转换为一系列输入元素 (§3.5),在丢弃空格 (§3.6) 和注释 (§3.7) 之后,这些元素包含作为句法语法 (§2.3) 的终端符号的标记 (§3.5)。
在每一步都使用尽可能长的翻译,即使结果最终没有做出正确的程序,而另一个词法翻译会。
(因此,输入字符被标记化 (§3.5) 为 ,这不是任何语法正确程序的一部分,即使标记化可能是语法正确程序的一部分。a--b
a, --, b
a, -, -, b