2013-04-26 11 views
10

Group terminals into setsterminale grupy w określonym

Co oznacza to ostrzeżenie? Jak mogę to rozwiązać?

Oto kod mam na myśli

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

Odpowiedz

12

ANTLR 4 parser generator może łączyć grupy przejściami tworząc pojedynczy „set przejście” w niektórych przypadkach zmniejszenie statyczne i dynamiczne obciążenie pamięci, jak również poprawa wydajności środowiska wykonawczego. Może się to zdarzyć tylko wtedy, gdy wszystkie alternatywy bloku zawierają pojedynczy element lub zbiór. Na przykład, następujące kod umożliwia INT i FLOAT być połączone w jednym przejściu:

// example 1 
number 
    : INT 
    | FLOAT 
    ; 

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

Jednakże w następującej sytuacji gdy elementy te nie mogą być łączone przez kompilator więc być traktowane oddzielnie:

primary 
    : '(' expression ')' 
    | INT 
    | FLOAT 
    ; 

Podpowiedź wskazują miejsca, w których proste dodanie ( ... ) wystarczy pozwolić kompilator aby zwinąć zestaw, który w przeciwnym razie nie byłoby w stanie. Zmiana kodu na poniższe spowoduje usunięcie ostrzeżenia.

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