Natty, переходящий из anlr3 в antlr 4

Поскольку я новичок в antlr, у меня много проблем с синтаксическими предикатами. Я пытался преобразовать эту грамматику, которая является частью изящной грамматики, чтобы разобрать ее с помощью antlr4, я действительно запутался, как изменить ее осмысленно.

date_time
 : (
      (date)=>date (date_time_separator explicit_time)?
      | explicit_time (time_date_separator date)?
    ) -> ^(DATE_TIME date? explicit_time?)
  | relative_time -> ^(DATE_TIME relative_time?)
  ;`

1 ответ

Решение

Синтаксические предикаты и правила перезаписи больше не поддерживаются в ANTLR4. Алгоритм синтаксического анализа ANTLR4 должен быть достаточно мощным, чтобы не нуждаться в синтаксических предикатах, и если вы хотите пройти по дереву разбора, взгляните на эти ссылки:

Итак, правило, которое вы разместили, будет выглядеть так в ANTLR4:

date_time
 : date ( date_time_separator explicit_time )?
 | explicit_time ( time_date_separator date )?
 | relative_time
 ;
Другие вопросы по тегам