2^3
之类的内容以创建power
运算符?negation : '!'* term ;
unary : ('+'!|'-'^)* negation ;
mult : unary (('*' | '/' | ('%'|'mod') ) unary)* ;
add : mult (('+' | '-') mult)* ;
relation : add (('=' | '!=' | '<' | '<=' | '>=' | '>') add)* ;
expression : relation (('&&' | '||') relation)* ;
// LEXER ================================================================
HEX_NUMBER : '0x' HEX_DIGIT+;
fragment
FLOAT: ;
INTEGER : DIGIT+ ({input.LA(1)=='.' && input.LA(2)>='0' && input.LA(2)<='9'}?=> '.' DIGIT+ {$type=FLOAT;})? ;
fragment
HEX_DIGIT : (DIGIT|'a'..'f'|'A'..'F') ;
fragment
DIGIT : ('0'..'9') ;
我尝试了类似power : ('+' | '-') unary'^' unary
的内容,但这似乎不起作用。
我也试过mult : unary (('*' | '/' | ('%'|'mod') | '^' ) unary)* ;
,但这也不起作用。
答案 0 :(得分:2)
要使^
的优先级高于negation
,请执行以下操作:
pow : term ('^' term)* ;
negation : '!' negation | pow ;
unary : ('+'! | '-'^)* negation ;
答案 1 :(得分:1)
如果你想在语法中考虑正确的关联性,你也可以使用递归:
pow : term ('^'^ pow)?
;
negation : '!'* pow;
...