我一直在使用matlab语法从这来源。我在下面的输入中遇到一个错误
a = 2^2*3
b = 3*2^2结果在这两种情况下都应该是12,但不是,因为使用ANTLR4的Matlab语法中的指数操作符不能正确工作,这显示了下面的树

问题可能在乘法的表达,但我没有最好的解决办法,在我心目中的问题。老实说,我对此没有任何解决办法。谁能告诉我怎么解决这个问题吗?
multiplicative_expression
: unary_expression
| multiplicative_expression '*' unary_expression
| multiplicative_expression '/' unary_expression
| multiplicative_expression '\\' unary_expression
| multiplicative_expression '^' unary_expression
| multiplicative_expression ARRAYMUL unary_expression
| multiplicative_expression ARRAYDIV unary_expression
| multiplicative_expression ARRAYRDIV unary_expression
| multiplicative_expression ARRAYPOW unary_expression
;发布于 2022-04-05 12:58:35
我认为您需要用以下内容替换multiplicative_expression部分:
multiplicative_expression
: pow_expression
| multiplicative_expression '*' pow_expression
| multiplicative_expression '/' pow_expression
| multiplicative_expression '\\' pow_expression
| multiplicative_expression ARRAYMUL pow_expression
| multiplicative_expression ARRAYDIV pow_expression
| multiplicative_expression ARRAYRDIV pow_expression
;然后包括一个额外的部分pow_expression
pow_expression
: unary_expression
| pow_expression '^' unary_expression
| pow_expression ARRAYPOW unary_expression
;这应该给指数运算符比乘法运算符更高的优先级。
但是,如果您要实际实现MATLAB的实际语法,您应该认识到,GitHub上的这个语法并不是它的一个很好的反映。例如,MATLAB有进一步的幂运算运算符(.^-、.^+、.^~、^-、^+、^~),还有一些语法的完整类别,例如所有面向对象的功能,它们根本就没有涵盖。
https://stackoverflow.com/questions/71750984
复制相似问题