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
}
- ¿Cuáles son algunos de los teoremas matemáticos más bellos?
- ¿Qué número no pertenece, 9, 43, 25, 36?
- Procesamiento de señal digital: ¿Cómo comprende geométricamente que la proyección ortogonal durante la aproximación de mínimos cuadrados tiene un error de norma mínima?
- ¿Cómo se resuelven las ecuaciones con corchetes?
- ¿Cómo se configura una relación matemática simple?
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.