Маневровое выражение для маневрового двора

Мы используем алгоритм Shunting-Yard для оценки выражений. Мы можем проверить выражение, просто применив алгоритм. Это терпит неудачу, если есть пропущенные операнды, несоответствующие круглые скобки и другие вещи. Однако алгоритм Shunting-Yard имеет больший поддерживаемый синтаксис, чем просто читаемый инфикс. Например,

1 + 2
+ 1 2
1 2 +

все приемлемые способы обеспечить «1 + 2» в качестве входных данных для алгоритма Shunting-Yard. '+ 1 2' и '1 2 +' не являются действительным инфиксом, но стандартный алгоритм Shunting-Yard может их обработать. Алгоритм на самом деле не заботится о порядке, он применяет операторы в порядке приоритета, захватывая «ближайшие» операнды.

Мы хотели бы ограничить наш ввод действительным читабельным инфиксом. Я ищу способ либо изменить алгоритм Shunting-Yard, чтобы он не работал с недействительным инфиксом, либо обеспечить проверку инфикса перед использованием Shunting-Yard.

Кто-нибудь знает какие-либо опубликованные методы, чтобы сделать это? Мы должны поддерживать как базовые операторы, так и пользовательские операторы, скобки и функции (с несколькими аргументами). Я не видел ничего, что работало бы больше чем с основными операторами онлайн.

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос