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.

Était-ce utile?

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 +

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top