Оператор «метка списка» не работает для набора альтернатив

Кажется, следующее правило не будет работать в antlr4

testSetLabel
    : (flags+=( 'A' | 'B' | 'C' | 'D' ))* ;

Это даст эту ошибку:

TestSetLabelParser.java:69: error: incompatible types
                ((TestSetLabelContext)_localctx).flags = _input.LT(1);
                                                                  ^
  required: List<Token>
  found:    Token

Если я изменю правило на это:

testSetLabel2
: ( flags+= 'A' | flags+='B' | flags+='C' | flags+='D' )* ;

Я получаю предупреждение: "Ярлык фактора не установлен"

Это ошибка или ожидаемое поведение?


person Yang L    schedule 28.05.2013    source источник


Ответы (1)


Это похоже на ошибку. Оператор = работает, как в следующем случае.

flags=('A' | 'B' | 'C' | 'D')

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

Вот отчет о проблеме

person Sam Harwell    schedule 29.05.2013