如何在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 ')'
;