2012-09-21 60 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

我爱上这个为好,不时。不要忘记接受你自己的答案! –