Pátio de manobra validar expressão

Usamos o algoritmo Shunting-Yard para avaliar expressões. Podemos validar a expressão simplesmente aplicando o algoritmo. Ele falhará se houver operandos ausentes, parênteses com correspondência incorreta e outras coisas. O algoritmo Shunting-Yard, no entanto, possui uma sintaxe suportada maior do que apenas o infixo legível por humanos. Por exemplo,

1 + 2
+ 1 2
1 2 +

são maneiras aceitáveis de fornecer '1 + 2' como entrada para o algoritmo Shunting-Yard. '+ 1 2' e '1 2 +' não são infixos válidos, mas o algoritmo Shunting-Yard padrão pode lidar com eles. O algoritmo realmente não se importa com a ordem, aplica operadores por ordem de precedência, capturando os operandos 'mais próximos'.

Gostaríamos de restringir nossa entrada a um infixo legível humano válido. Estou procurando uma maneira de modificar o algoritmo Shunting-Yard para falhar com infix inválido ou fornecer uma validação de infix antes de usar o Shunting-Yard.

Alguém está ciente de alguma técnica publicada para fazer isso? Devemos suportar operador básico, operadores personalizados, colchetes e funções (com vários argumentos). Não vi nada que funcione com mais do que os operadores básicos online.

obrigado

questionAnswers(2)

yourAnswerToTheQuestion