2013-11-28 32 views
0

我用ANTLR來創建一個語法,但我得到這個錯誤錯誤(211):致命]規則條件具有非LL(*)

error(211): [fatal] rule conditions has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2. Resolve by left-factoring or using syntactic predicates or using backtrack=true option. 

我的語法規則:

conditions 
    : '(' conditions ')' 
    |  condition (C_BINARY_OPERATOR conditions)? 
    ; 
condition 
    : expression C_CONDITIONAL_OPERATOR expression 
    ; 

expression 
    : (term) (('+'|'-') term)* 
    ; 

term 
    : (factor) (('*' | '/') factor)* 
    ; 

factor 
    : C_ID 
    | C_NUMBERS 
    | '(' expression ')' 
    ; 

// Binary Operators for Logical Calculation 
C_BINARY_OPERATOR 
    : '&&' 
    | '||' 
    ; 

// Conditonal Operators 
C_CONDITIONAL_OPERATOR 
    : '>' 
    | '<' 
    | '==' 
    | '!=' 
    | '=<' 
    | '=>' 
    ; 

我該如何解決這個錯誤?

回答

1

嗯,錯誤確實說「通過左因式分解或使用句法謂詞或使用backtrack = true選項」來解決。這是否令人困惑?

1

在ANTLR網站上看到這個page。它有關於如何解決你的錯誤的信息。