更改运算符优先级

Nut*_*tel 7 algorithm abstract-syntax-tree operator-precedence

更改具体表达式的运算符优先级的最佳方法是什么?

例如,我有一个班级:

class A(){ 
   def multiply(a) { 
       ... 
   } 

   def plus(a) { 
       ... 
   } 

   def minus(b) {
       ...
   }

} 

a = new A() 
b = new A() 
c = new A() 

d = a + (b - c) * d
Run Code Online (Sandbox Code Playgroud)

因为乘法具有更高的优先级+而且-我获得了形式的AST

  +
 / \
a   *
   / \
  -   d
 / \
b   c
Run Code Online (Sandbox Code Playgroud)

什么是将其转换为一棵树,其中最简单的方法*具有的优先级低于+-.我假定括号只允许到组-+,即,表达(a * b - c) * d不是有效的并且应当不预期作为输入.

Dón*_*nal 4

您只需在代码中添加括号即可。这可能会让您的代码比使用 AST 转换更容易理解。