Анализатор javac OpenJDK, JavacParser
, массирует токены лексера GTGTGTEQ
(>>>=
), GTGTEQ
, GTEQ
, GTGTGT
(>>>
) и GTGT
в токен меньше символа '>
' при разборе аргументов типа.
Вот фрагмент магии из JavacParser#typeArguments()
:
switch (S.token()) {
case GTGTGTEQ:
S.token(GTGTEQ);
break;
case GTGTEQ:
S.token(GTEQ);
break;
case GTEQ:
S.token(EQ);
break;
case GTGTGT:
S.token(GTGT);
break;
case GTGT:
S.token(GT);
break;
default:
accept(GT);
break;
}
Хорошо видно, что это действительно уловка, и она в грамматике:)