2013-04-26 18 views
10

Group terminals into setsTerminali di gruppo nel set

Cosa significa questo avviso? Come lo risolvo?

Ecco il codice mi riferisco a

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

risposta

12

Il generatore parser ANTLR 4 può combinare gruppi di transizione per formare un unico "transizione set" in taluni casi, riducendo il carico di memoria statica e dinamica, nonché migliorare le prestazioni di runtime. Questo può accadere solo se tutte le alternative di un blocco contengono un singolo elemento o insieme. Ad esempio, il seguente codice consente INT e FLOAT per essere combinati in un unico passaggio:

// example 1 
number 
    : INT 
    | FLOAT 
    ; 

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

Tuttavia, nella seguente situazione gli elementi non possono essere combinati dal compilatore in modo da essere trattati separatamente:

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

il suggerimento suggerisce luoghi in cui la semplice aggiunta di ( ... ) è sufficiente per permettere al compilatore di crollare un set che sarebbe altrimenti non essere in grado di. L'alterazione del codice di seguito avrebbe indirizzato l'avviso.

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