我有以下可以正常工作的鹿茸 g 文件:
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!;
问题是我需要 AND 具有比 OR 更高的优先级。所以我修改了最后四行如下:
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
生成以下树,它完全缺少 OR 分支:
我究竟做错了什么?