Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tree 如何更改ANTLR布尔优先级?_Tree_Boolean_Antlr_Operator Precedence - Fatal编程技术网

Tree 如何更改ANTLR布尔优先级?

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' | '(' | '

我有以下鹿角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!;
问题是我需要和比或有更高的优先级。因此,我将最后四行修改如下:

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”。在我将其更改为“表达式”后,程序运行良好,我得到以下树:


我有时也会爱上这一点。别忘了接受你自己的答案!我有时也会爱上这个。别忘了接受你自己的答案!