Ответ 1
Основываясь на чтении кода, связанного с @sm4, похоже, что стратегия такова:
-
токенизировать вход нормально. Таким образом,
A<B<C>> i;
будет обозначаться какA, <, B, <, C, >>, i, ;
- 8 токенов, а не 9. -
при иерархическом разборе, когда требуется работать с синтаксическими анализами дженериков и
>
, если следующий токен начинается с>
->>
,>>>
,>=
,>>=
, или>>>=
- просто отбросьте>
и вытащите укороченный токен обратно в поток токенов. Пример: когда парсер получает значение>>, i, ;
во время работы над правилом typeArguments, он успешно разбирает typeArguments, а оставшийся токен ток теперь немного отличается от>, i, ;
, так как первый>
of>>
был снят с match typeArguments.
Итак, хотя токенизация происходит нормально, при необходимости происходит повторная токенизация в иерархической фазе разбора.