此警告是什么意思?
我该如何解决?

这是我指的代码

expression : expression operator=DIV expression
           | expression operator=MUL expression
           | expression operator=ADD expression
           | expression operator=SUB expression
           | INT
           | FLOAT
           | BOOLEAN
           | NULL
           | ID
           ;

最佳答案

在某些情况下,ANTLR 4解析器生成器可以组合转换组以形成单个“设置转换”,从而减少了静态和动态内存开销,并提高了运行时性能。仅当块的所有替代都包含单个元素或集合时,才会发生这种情况。例如,以下代码允许将INTFLOAT组合为一个过渡:

// example 1
number
    :   INT
    |   FLOAT
    ;

// example 2, elements grouped into a set
primary
    :   '(' expression ')'
    |   (INT | FLOAT)
    ;

但是,在以下情况下,编译器无法合并这些元素,因此将对它们进行单独处理:
primary
    :   '(' expression ')'
    |   INT
    |   FLOAT
    ;

该提示建议在简单添加( ... )的地方可以使编译器折叠本来无法折叠的集合。 将代码更改为以下内容将解决警告。
expression
    :   expression operator=DIV expression
    |   expression operator=MUL expression
    |   expression operator=ADD expression
    |   expression operator=SUB expression
    |   (   INT
        |   FLOAT
        |   BOOLEAN
        |   NULL
        |   ID
        )
    ;

09-27 21:37