Antlr 如何创建与2^3匹配的规则以创建power运算符? 如果我有以下语法,我将如何添加规则来匹配2^3之类的内容,以创建power操作符? 否定:'!'*学期 一元:(“+”!|“-”^)*否定; 多:一元(“*”|“/”|(“%”|“mod”))一元)*; 加:mult(“+”|“-”)mult)*; 关系:添加(“=”|“!=”|“)添加)*; 表达式:关系(“&&&”|“| |”)关系)*; //雷克瑟================================================================ 十六进制数字:“0x”十六进制数字+; 碎片 浮动:; 整数:DIGIT+({input.LA(1)='.&&input.LA(2)>='0'&&input.LA(2)'.'DIGIT+{$type=FLOAT;}); 片段 十六进制数字:(数字|“a”.“f”|“a”.“f”); 片段 数字:('0'..'9'); 我所尝试的:

Antlr 如何创建与2^3匹配的规则以创建power运算符? 如果我有以下语法,我将如何添加规则来匹配2^3之类的内容,以创建power操作符? 否定:'!'*学期 一元:(“+”!|“-”^)*否定; 多:一元(“*”|“/”|(“%”|“mod”))一元)*; 加:mult(“+”|“-”)mult)*; 关系:添加(“=”|“!=”|“)添加)*; 表达式:关系(“&&&”|“| |”)关系)*; //雷克瑟================================================================ 十六进制数字:“0x”十六进制数字+; 碎片 浮动:; 整数:DIGIT+({input.LA(1)='.&&input.LA(2)>='0'&&input.LA(2)'.'DIGIT+{$type=FLOAT;}); 片段 十六进制数字:(数字|“a”.“f”|“a”.“f”); 片段 数字:('0'..'9'); 我所尝试的:,antlr,antlr3,Antlr,Antlr3,我尝试了类似于power:(“+”|“-”)一元数“^”一元数的方法,但似乎不起作用 我也尝试了多:一元((“*”|“/”|(“%”|“mod”)|“^”)一元)*,但这也不起作用。要赋予^比否定更高的优先级,请执行以下操作: pow : term ('^' term)* ; negation : '!' negation | pow ; unary : ('+'! | '-'^)* negation ; 如果你想在语法中考虑正确的结合性,你也可以使用递归: pow

我尝试了类似于
power:(“+”|“-”)一元数“^”一元数的方法,但似乎不起作用


我也尝试了多:一元((“*”|“/”|(“%”|“mod”)|“^”)一元)*
,但这也不起作用。

要赋予
^
否定更高的优先级,请执行以下操作:

pow      : term ('^' term)* ;

negation : '!' negation | pow ;

unary    : ('+'! | '-'^)* negation ;

如果你想在语法中考虑正确的结合性,你也可以使用递归:

   pow  :   term ('^'^ pow)?
        ;

   negation : '!'* pow;

   ...
   pow  :   term ('^'^ pow)?
        ;

   negation : '!'* pow;

   ...