2012-09-21 117 views
1

我有以下鹿茸G文件工作正常:如何更改ANTLR布爾優先權?

grammar BoolTest; 

LEFT_PAREN : '(' ; 
RIGHT_PAREN : ')' ; 
AND : 'AND'; 
OR : 'OR'; 
WHITESPACE : (' ' 
     | '\t' 
     | '\r' 
     | '\n' 
     ) {$channel=HIDDEN;} 
    ;  
WORD : (~(' ' | '\t' | '\r' | '\n' | '(' | ')'))*; 

expression : and_expression; 
and_expression : or_expression (AND^ or_expression)*; 
or_expression : atom (OR^ atom)*; 
atom : WORD | LEFT_PAREN! expression RIGHT_PAREN!; 

的問題是,我需要的,具有比或更高的優先級。所以我修改了最後四行如下:

expression : or_expression; 
or_expression : and_expression (OR^ and_expression)*; 
and_expression : atom (AND^ atom)*; 
atom : WORD | LEFT_PAREN! expression RIGHT_PAREN!; 

但是由於某些原因它不能正常工作。而下面的表達式:

a AND b OR c 

產生下面的樹,這是完全缺失或分公司:

enter image description here

我在做什麼錯?

回答

1

找到了這個錯誤,實際上是使用ANTLRWorks IDE的問題。當您運行調試模式時,它會詢問您是否有文本,其中一個下拉菜單爲啓動規則:。它被設置爲'and_expression'。之後,我把它改成只是「表達」,該程序工作正常,我也得到了下面的樹:

enter image description here

+1

我愛上這個爲好,不時。不要忘記接受你自己的答案! –