首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ANTLR4的Matlab语法中的指数算子不能正常工作。

使用ANTLR4的Matlab语法中的指数算子不能正常工作。
EN

Stack Overflow用户
提问于 2022-04-05 11:30:05
回答 1查看 67关注 0票数 0

我一直在使用matlab语法从来源。我在下面的输入中遇到一个错误

代码语言:javascript
复制
a = 2^2*3
b = 3*2^2

结果在这两种情况下都应该是12,但不是,因为使用ANTLR4的Matlab语法中的指数操作符不能正确工作,这显示了下面的树

问题可能在乘法的表达,但我没有最好的解决办法,在我心目中的问题。老实说,我对此没有任何解决办法。谁能告诉我怎么解决这个问题吗?

代码语言:javascript
复制
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
   ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 12:58:35

我认为您需要用以下内容替换multiplicative_expression部分:

代码语言:javascript
复制
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

代码语言:javascript
复制
pow_expression
   : unary_expression
   | pow_expression '^' unary_expression
   | pow_expression ARRAYPOW unary_expression
   ;

这应该给指数运算符比乘法运算符更高的优先级。

但是,如果您要实际实现MATLAB的实际语法,您应该认识到,GitHub上的这个语法并不是它的一个很好的反映。例如,MATLAB有进一步的幂运算运算符(.^-.^+.^~^-^+^~),还有一些语法的完整类别,例如所有面向对象的功能,它们根本就没有涵盖。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71750984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档