ANTLR Семантические предикаты - PullRequest
2 голосов
/ 24 сентября 2010

Я пытаюсь использовать семантические предикаты в ANTLR для следующего правила грамматики

test[n]
       :({n==0}? => ~('a'))
       |({n==1}? => ~('b'))
       |({n==2}? => ~('c'))
       ;

Однако ANTLR не позволяет мне определять грамматику таким образом, требуя, чтобы по крайней мере одна из альтернатив была по умолчанию. Точная ошибка отображается является ссылкой ошибки, для параметра п.

Моя цель состоит в том, чтобы я хотел, чтобы одна и только одна альтернатива была видна в любой данный момент времени. Есть идеи, как это сделать?

Спасибо!

1 Ответ

1 голос
/ 24 сентября 2010

Это не может быть правдой: вы забыли указать тип n, поэтому компиляция сгенерированного парсера не будет работать. Должно быть:

test[int n]
  :  ({n==0}? => ~('a'))
  |  ({n==1}? => ~('b'))
  |  ({n==2}? => ~('c'))
  ;

Когда я создаю небольшую грамматику с приведенным выше правилом, я не получаю ошибку, однако.

Можете ли вы опубликовать полную грамматику и проверить строку ввода, которая приводит к этой ошибке? Вы также можете скопировать и вставить точное сообщение об ошибке?

...