温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Are ">>"s in type parameters tokenized using a special rule?
java parsing token

java - 类型参数中的“ >>”是否使用特殊规则进行标记?

发布于 2020-04-20 18:19:23

Java规范对如何对这些代码进行标记感到困惑

ArrayList<ArrayList<Integer>> i;

规格说明:

即使结果最终不能构成正确的程序,而另一词法翻译却可以使用,也可能在每个步骤中使用最长的翻译。

据我了解,应用“最长匹配”规则将导致令牌:

  • 数组列表
  • <
  • 数组列表
  • <
  • 整数
  • >>
  • 一世
  • ;

不会解析。但是当然可以对这段代码进行解析。

这种情况的正确规范是什么?

这是否意味着正确的词法分析器必须与上下文无关?使用常规词法分析器似乎不可能

查看更多

提问者
Matt Fenwick
被浏览
56
Matt Fenwick 2013-05-29 10:03

基于阅读@ sm4链接的代码,该策略看起来像是:

  • 通常将输入标记化。因此A<B<C>> i;将被标记为A, <, B, <, C, >>, i, ;-8个令牌,而不是9个。

  • 层次分析过程中,对仿制药的解析工作和时>是必要的,如果与记号开始>- ,>>>>>>=>>=>>>=-只敲>断,推动缩短令牌返回到令牌流。例如:当解析器到达>>, i, ;,而在typeArguments工作规则,它成功地解析typeArguments,剩下的记号流是现在的略有不同>, i, ;,因为第一>>>是被拉断,以匹配typeArguments。

因此,尽管令牌化确实会正常发生,但是如果需要,在层次分析阶段会发生一些重新令牌化。