Quelle serait la meilleure façon de changer la priorité de l'opérateur pour une expression concrète?Modifier la priorité de l'opérateur
Par exemple, j'ai une classe:
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
Comme multiplication a une priorité supérieure +
et -
je reçois un AST de forme
+
/\
a *
/\
- d
/\
b c
Quelle serait la meilleure façon de le convertir en un arbre où *
a une priorité inférieure à +
et -
. Je suppose que les parenthèses sont autorisées uniquement à grouper -
et +
, c'est-à-dire qu'une expression (a * b - c) * d
n'est pas valide et ne doit pas être attendue en tant qu'entrée.
je serais prudent: la surcharge opérateur * peut * introduire la confusion et de modifier la priorité de l'opérateur pourrait introduire encore plus! –
c'est dsl donc ça devrait aller ok – Nutel
Vous parlez de "décalage droit" sans identifier le symbole qui le désigne. Est-ce que '*' est le symbole du 'shift droit'? –