2013-04-26 19 views
10

Group terminals into setsGrup klemensler set halinde

Bu uyarı ne anlama geliyor? Bunu nasıl çözebilirim? İşte

Ben yanı sıra

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

cevap

12

statik ve dinamik hafıza yükünü azaltarak, bazı durumlarda tek bir "set geçişi" oluşturmak üzere geçişlerin gruplarını birleştirebilir ANTLR 4 ayrıştırıcı jeneratör bahsediyorum koddur çalışma zamanı performansını iyileştirmek. Bu, yalnızca bir bloğun tüm alternatifleri tek bir öğe veya set içerdiğinde gerçekleşebilir. bunlar ayrı ayrı tedavi edilmeleri için elemanlar derleyici tarafından birleştirilemez aşağıdaki durumda,

// example 1 
number 
    : INT 
    | FLOAT 
    ; 

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

Ancak: Örneğin, aşağıdaki kod INT ve FLOAT tek geçiş halinde birleştirilebilir sağlar

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

ipucu ( basit eklenmesi ... ) derleyici aksi mümkün olmazdı bir dizi daraltmak için izin verecek kadar olan yerleri göstermektedir. Kodunuzu aşağıdaki şekilde değiştirmek, uyarıya hitap eder.

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