algorithm compiler-construction programming-languages formal-languages

algorithm - ¿Por qué necesitamos prefijo, notación postfix?



compiler-construction programming-languages (4)

Al menos para el caso de la notación de prefijo: la ventaja de usar un operador de prefijo es que sintácticamente, se lee como si el operador fuera una llamada de función

Sé cómo cada uno de ellos se puede convertir el uno al otro, pero nunca entendí realmente cuáles son sus aplicaciones. La operación de infijo habitual es bastante legible, pero ¿dónde falla, lo que llevó al inicio de la notación de prefijo y postfijo?


La notación Infix es fácil de leer para los humanos , mientras que la notación pre- / postfix es más fácil de analizar para una máquina. La gran ventaja de la notación pre / postfix es que nunca surgen preguntas como la precedencia del operador.

Por ejemplo, considere la expresión de infijo 1 # 2 $ 3 . Ahora, no sabemos qué significan esos operadores, por lo que hay dos posibles expresiones postfix correspondientes: 1 2 # 3 $ y 1 2 3 $ # . Sin conocer las reglas que gobiernan el uso de estos operadores, la expresión infija es esencialmente sin valor.

O, para decirlo en términos más generales: es posible restaurar el árbol original (análisis) desde una expresión pre / postfix sin ningún conocimiento adicional, pero lo mismo no es cierto para las expresiones infix.


La notación de Postfix, también conocida como RPN , es muy fácil de procesar de izquierda a derecha. Un operando es empujado en una pila; un operador saca sus operandos de la pila y empuja el resultado. Poco o ningún análisis es necesario. Es usado por Forth y por algunas calculadoras (las calculadoras HP son conocidas por usar RPN).

La notación de prefijo es casi tan fácil de procesar; Se usa en Lisp.


Otro aspecto de prefijo / postfijo contra infijo es que la aridad del operador (a cuántos argumentos se aplica) ya no tiene que limitarse exactamente a 2. Puede ser más o, a veces, menos (0 o 1 cuando los valores predeterminados son implícito naturalmente, como cero para la suma / resta, uno para la multiplicación / división).