Je travaille sur un interrupteur qui permet de définir ses propres opérateurs. Le but est alors de prendre un AST qui ressemble à exp op exp op exp
et de le transformer en exp op (exp op exp)
ou (exp op exp) op exp
en fonction de la préséance relative et de l'associativité des deux opérateurs. Le langage est dynamique, la seule façon de savoir quelle version de l'opérateur utiliser est d'évaluer la première expression et de lui demander quelle version de op
utiliser.Y a-t-il des opérateurs de court-circuit associatifs
D'autre part, il est important que nous évaluons pas la deuxième expression parce que si op
est ||
(comme couramment utilisé) alors nous devrions être en mesure de court-circuit si le premier est exp
false
.
Un problème se poserait si un opérateur était à la fois associatif et court-circuitant. Ma question est de savoir s'il existe des opérateurs de court-circuit associatifs à usage courant (pour une valeur choisie de "commun")?
N.b. L'affectation est gérée séparément par l'analyseur. Par conséquent, =
n'est pas un opérateur et a (op)= b
est un sucre syntaxique pour a = a op b
.
En fait, l'association correcte fait beaucoup plus de sens. Essayez de visualiser l'arbre d'analyse de 'a ou b ou c ou d ou e'. Quand l'associatif de gauche et 'a' est vrai, nous montons et remontons l'arbre pour devenir vrai au sommet. Quand le droit-associatif, si 'a' est vrai, ta-da, nous avons fini! Tellement plus facile d'ignorer tout le reste de l'expression. Pourquoi dites-vous qu'il y a un problème avec l'associativité à droite? Ils ont tous les deux le même comportement à mon humble avis. –