Синтаксическая ошибка ANTLR: неожиданный токен: + - PullRequest
2 голосов
/ 30 апреля 2011

Привет, у меня небольшая проблема в моей древовидной грамматике ANTLR.Я использую ANTLRWorks 1.4.В грамматике синтаксического анализатора у меня есть такое правило:

declaration
:       'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';'
->    ^('variable' IDENTIFIER TYPE)+

Поэтому я хотел, чтобы по одному ИДЕНТИФИКАТОРУ было по одному дереву.

А в грамматике дерева я оставил только правила перезаписи:*

Но когда я проверяю грамматику, я получаю неожиданную ошибку синтаксиса +.И именно этот знак + в конце правила объявления в древовидной грамматике.Так что я делаю не так?

грамматика парсера работает нормально и строит дерево AST, как и ожидалось.Я сгенерировал лексер и парсер для C # и проверил его на наличие ввода.

1 Ответ

2 голосов
/ 30 апреля 2011

При разборе источника:

variable a, b, c : int;

вы пытаетесь создать AST, который выглядит следующим образом:

variable variable variable
    /        |        \
   a         b         c
  /          |          \
int         int         int

Но так как 'variable' и TYPE всегда являютсятот же токен, я не вижу необходимости создавать все эти дублирующие узлы.Почему бы просто не сделать:

declaration
  :  'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';' 
     -> ^('variable' TYPE IDENTIFIER+)
  ;

, что создаст AST, как:

 variable
  / | | \
int a b  c

?

...