Laquelle des représente correctement somme infix notations de Postfix suivantes 1 + 2 + 3 + 4?
-
27-09-2019 - |
Question
Je teste un convertisseur infix à postfix-à-infix et a trouvé une sorte d'incertitude. Par exemple, un simple somme infix
1 + 2 + 3 + 4
peut être converti en un postfix
1 2 + 3 + 4 +
en supposant que les opérateurs ayant la même priorité ne sont pas accumulées. Si elles sont alors je reçois
1 2 3 4 + + +
D'autre part, toutes les expressions de Postfix suivants peuvent être convertis à la somme initiale
1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +
sont toutes ces expressions Postfix corriger?
Update1
Si vous feriez ce convertisseur, à quelle forme choisiriez-vous? Je dois choisir un pour tester.
La solution
Vous devez définir une contrainte supplémentaire.
Mathématiquement, vos expressions de Postfix sont tous les mêmes. Mais sur un ajout entier informatique n'est pas vraiment commutative à cause de trop-plein.
Remplacer 1 2 3 4 avec a b c d et envisager la possibilité de débordement. La plupart des langages de programmation définissent que a + b + c + d
doivent être évalués de gauche à droite afin que a b + c + d +
est la seule traduction correcte.
Seulement lorsque vous définissez que l'ordre d'évaluation est « non spécifié » toutes les versions de Postfix sont équivalentes. Ce fut le cas pour (plus) C Compilateurs.
Autres conseils
Oui, tous corrects. Ils correspondent aux expressions infixes bracketing suivantes:
((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))
+
est source de confusion - il est commutative, donc en fait, chaque résultat semble correcte
Envisager de remplacer +
avec d'autres opérateurs. 1 a 2 b 3 c 4
Le bon résultat ici, pour les opérateurs associatifs gauche, est
1 2 a 3 b 4 c
Alors, dans votre cas, je vous attendriez 1 2 + 3 + 4 +