Como método de entrada, ¿cuál es la ventaja de RPN (notación polaca inversa) sobre ALG (notación infija)?

La notación de pulido inverso (RPN) es mucho más fácil de analizar que el infijo, y no requiere una agrupación explícita de operandos (entre paréntesis). Además, RPN puede admitir fácilmente operaciones n-ary, donde n> 2, un poco difícil con notación infija.

RPN se puede evaluar utilizando un sistema basado en pila como este:

vacío evaluar_operación (operador)
{
int op_arity = token.get_op_arity ();
operandos de token [op_arity];
para (int i = op_arity – 1; i> = 0; –i)
{
operando = stack.pop ();
if (el operando es operador)
{
evaluar_operación (operando);
operando = stack.pop ();
}
operandos [i] = operando;
// ¡se necesita manejo de excepciones aquí! – puede quedarse sin valores
}
resultado_t resultado = evaluar (token, operandos);
stack.push (resultado); // resultado en la parte superior de la pila
}

while (token = get_token (input))
{
if (el token es operador)
{
evaluar_operación (operador);
}
si no (token es valor) // variable o constante
{
stack.push (token.get_value ());
}
}
// valor en la parte superior de la pila es el resultado

La evaluación de la notación infija requiere un autómata pushdown para analizar la entrada y emparejar correctamente los paréntesis izquierdo y derecho. Esto es más complejo de implementar y procesar, pero no es un problema para las computadoras modernas.