下面的规则似乎不能在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' )* ;
我得到警告:'Factor label out of set'
这是错误还是预期行为?
听起来像是一个bug。=
操作符可以工作,如下例所示。
flags=('A' | 'B' | 'C' | 'D')
您看到的消息只是一个性能建议,所以我现在将使用工作方法,并在6月底ANTLR 4.1发布时将标签从集合中剔除。
这是问题报告