2013-04-26 103 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 
     ) 
    ;