Expresión de validación de patio de maniobras
Usamos el algoritmo Shunting-Yard para evaluar expresiones. Podemos validar la expresión simplemente aplicando el algoritmo. Falla si faltan operandos, paréntesis incorrectos y otras cosas. Sin embargo, el algoritmo Shunting-Yard tiene una sintaxis compatible más grande que solo el infijo legible por humanos. Por ejemplo,
1 + 2
+ 1 2
1 2 +
son formas aceptables de proporcionar '1 + 2' como entrada al algoritmo Shunting-Yard. '+ 1 2' y '1 2 +' no son infijos válidos, pero el algoritmo estándar Shunting-Yard puede manejarlos. El algoritmo realmente no se preocupa por el orden, aplica operadores por orden de precedencia tomando los operandos 'más cercanos'.
Nos gustaría restringir nuestra entrada a infijo legible humano válido. Estoy buscando una manera de modificar el algoritmo Shunting-Yard para que falle con infijo no válido o proporcionar una validación infix antes de usar Shunting-Yard.
¿Alguien sabe de alguna técnica publicada para hacer esto? Debemos admitir operadores básicos, operadores personalizados, corchetes y funciones (con múltiples argumentos). No he visto nada que funcione más que los operadores básicos en línea.
Gracias