如何在antlr4中编写上下文无关语法方面的操作优先级

如何在antlr4中编写上下文无关语法方面的操作优先级,antlr4,context-free-grammar,Antlr4,Context Free Grammar,我们知道逻辑操作的优先级从强到低: 不 及 或 我想在语法中加入逻辑运算,以尊重逻辑运算的优先性。。。 我的语法是: expression : factor ( PLUS factor | MINUS factor )* ; factor : term ( MULT term | DIV term )* ; term : NUMBER | ID | PAR_OPEN expression PAR_CLOSE ; 使用ANTLR3和ANTLR 4,您可以执行如下操作: expressi

我们知道逻辑操作的优先级从强到低: 不 及 或
我想在语法中加入逻辑运算,以尊重逻辑运算的优先性。。。 我的语法是:

   expression : factor ( PLUS factor | MINUS factor )* ;
 factor : term ( MULT term | DIV term )* ;
 term : NUMBER | ID | PAR_OPEN expression PAR_CLOSE ;

使用ANTLR3和ANTLR 4,您可以执行如下操作:

expression
 : or_expression
 ;

// lowest precedence
or_expression
 : and_expression ( '||' and_expression )*
 ;

and_expression
 : rel_expression ( '&&' rel_expression )*
 ;

rel_expression
 : add_expression ( ( '<' | '<=' | '>' | '>=' ) add_expression )*
 ;

add_expression
 : mult_expression ( ( '+' | '-' ) mult_expression )*
 ;

mult_expression
 : unary_expression ( ( '*' | '/' ) unary_expression )*
 ;

unary_expression
 : '-' atom
 | atom
 ;

// highest precedence
atom
 : NUMBER
 | ID
 | '(' expression ')'
 ;
表达式
:或_表达式
;
//最低优先级
或_表达式
:和|表达式(“| |”和|表达式)*
;
和_表达式
:rel_表达式('&&'rel_表达式)*
;
rel_表达式
:add_表达式(('=')add_表达式)*
;
添加表达式
:mult_表达式((“+”|“-”)mult_表达式)*
;
多重表达
:一元_表达式((“*”|“/”)一元_表达式)*
;
一元表达式
:“-”原子
|原子
;
//最高优先级
原子
:号码
|身份证
|“(“表达式”)”
;
使用ANTLR4,您也可以这样编写它(与上面的语法相同!):

表达式
: '!' 表达
|表达式(“*”|“/”)表达式//高于“+”|“-”
|表达式(“+”|“-”)表达式//高于“=”
|表达式(“=”)表达式//高于“&&”
|表达式“&&”表达式//高于“||”
|表达式“| |”表达式
|数
|身份证
|“(“表达式”)”
;

所以我只能写:表达式:“!”表达式|表达式&&“表达式//高于”| | |表达式| |表达式|因子(正因子|负因子)*@Bart非常感谢你@Bart
expression
 : '!' expression
 | expression ( '*' | '/' ) expression               // higher than '+' | '-'
 | expression ( '+' | '-' ) expression               // higher than '<' | '<=' | '>' | '>=' 
 | expression ( '<' | '<=' | '>' | '>=' ) expression // higher than '&&'
 | expression '&&' expression                        // higher than '||'
 | expression '||' expression
 | NUMBER
 | ID
 | '(' expression ')'
 ;