Pregunta

Estoy probando un convertidor infijo a postfix-a infija y encontré algún tipo de incertidumbre. Por ejemplo, una simple suma infija

1 + 2 + 3 + 4

se puede convertir en uno postfix

1 2 + 3 + 4 +

suponiendo que los operadores con la misma precedencia no se acumulan. Si son entonces consigo

1 2 3 4 + + +

Por otro lado, todas las siguientes expresiones postfijos se pueden convertir a la suma inicial

1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +

¿Son todas estas expresiones postfijos corregir?

Update1

Si desea realizar dicha convertidor, a la que forma elegiría? Tengo que elegir uno para la prueba.

¿Fue útil?

Solución

Es necesario definir una restricción adicional.

Matemáticamente, sus expresiones de sufijo son todos iguales. Pero además en un número entero de ordenador no es realmente conmutativa debido a desbordamiento.

Reemplazar 1 2 3 4 con a b c d y considerar la posibilidad de desbordamiento. La mayoría de los lenguajes de programación definen a + b + c + d que deben ser evaluados de izquierda a derecha para que a b + c + d + es la única traducción correcta.

Sólo cuando se define que el orden de evaluación es todas las versiones 'sin especificar' postfijos son equivalentes. Ese fue el caso de (mayores) C compiladores.

Otros consejos

Sí, los correctos. Se corresponden con las siguientes expresiones infijas entre paréntesis:

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))

+ es confuso - es conmutativo, por lo que, de hecho, cada resultado de parece correcta .

Considere reemplazar + con otros operadores:. 1 a 2 b 3 c 4
El resultado correcto en este caso, para los operadores asociativos por la izquierda, es

1 2 a 3 b 4 c

Así que, en su caso, yo esperaría 1 2 + 3 + 4 +

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top