集团终端成套

Gau*_*tam 10 grammar set antlr4

集团终端成套

这个警告意味着什么?我该如何解决?

这是我所指的代码

expression : expression operator=DIV expression
           | expression operator=MUL expression
           | expression operator=ADD expression
           | expression operator=SUB expression
           | INT
           | FLOAT
           | BOOLEAN
           | NULL
           | ID
           ;
Run Code Online (Sandbox Code Playgroud)

Sam*_*ell 12

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

// example 1
number
    :   INT
    |   FLOAT
    ;

// example 2, elements grouped into a set
primary
    :   '(' expression ')'
    |   (INT | FLOAT)
    ;
Run Code Online (Sandbox Code Playgroud)

但是,在以下情况下,编译器不能组合元素,因此它们将被单独处理:

primary
    :   '(' expression ')'
    |   INT
    |   FLOAT
    ;
Run Code Online (Sandbox Code Playgroud)

提示建议简单添加(...的)位置足以允许编译器折叠一个否则将无法复制的集合.将代码更改为以下内容将解决警告问题.

expression
    :   expression operator=DIV expression
    |   expression operator=MUL expression
    |   expression operator=ADD expression
    |   expression operator=SUB expression
    |   (   INT
        |   FLOAT
        |   BOOLEAN
        |   NULL
        |   ID
        )
    ;
Run Code Online (Sandbox Code Playgroud)