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;
...