10

将端子分组

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

这是我指的代码

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

1 回答 1

12

在某些情况下,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
        )
    ;
于 2013-04-26T13:35:52.533 回答