0

似乎以下规则在 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' )* ;

我收到警告:“因子标签不正确”

这是错误还是预期行为?

4

1 回答 1

0

这听起来像一个错误。操作员工作,=如下例所示。

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

您看到的消息只是一个性能建议,所以我现在会使用这种工作方法,并在 ANTLR 4.1 于 6 月底发布时将标签从集合中剔除。

这是问题报告

于 2013-05-29T13:33:44.800 回答