2013-11-28 24 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。它有关于如何解决你的错误的信息。