Tree 如何更改ANTLR布尔优先级?
我有以下鹿角g锉刀,效果很好:Tree 如何更改ANTLR布尔优先级?,tree,boolean,antlr,operator-precedence,Tree,Boolean,Antlr,Operator Precedence,我有以下鹿角g锉刀,效果很好: grammar BoolTest; LEFT_PAREN : '(' ; RIGHT_PAREN : ')' ; AND : 'AND'; OR : 'OR'; WHITESPACE : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;} ; WORD : (~( ' ' | '\t' | '\r' | '\n' | '(' | '
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
生成以下树,该树完全缺少或分支:
我做错了什么?发现了这个bug,实际上是我使用ANTLRWorks IDE的问题。当您运行调试模式时,它会要求您输入文本,其中一个下拉列表会显示开始规则:。它被设置为“and_expression”。在我将其更改为“表达式”后,程序运行良好,我得到以下树:
发现了这个bug,这实际上是我使用ANTLRWorks IDE的一个问题。当您运行调试模式时,它会要求您输入文本,其中一个下拉列表会显示开始规则:。它被设置为“and_expression”。在我将其更改为“表达式”后,程序运行良好,我得到以下树:
我有时也会爱上这一点。别忘了接受你自己的答案!我有时也会爱上这个。别忘了接受你自己的答案!