2013-04-26 145 views
10

Group terminals into sets集团终端成集

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

这里是我指的是

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

回答

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 
     ) 
    ;