Я пишу математическое приложение C#, в котором пользователь может определять функции предопределенным образом, например
COS({x}+3*(2+SQRT({x})))
Для оценки я использую алгоритм маневровой станции. У меня есть функция для токенизации строки выше, которая производит следующий ввод в списке:
ФУНКЦИЯ,ОТКРЫТЫЕ_СКОБКИ,ПЕРЕМЕННАЯ,ОПЕРАТОР,ЧИСЛО,ОПЕРАТОР,ОТКРЫТЫЕ_СКОБКИ,НОМЕР,ОПЕРАТОР,ФУНКЦИЯ,ОТКРЫТЫЕ_СКОБКИ,ПЕРЕМНАЯ,ЗАКРЫТЫЕ_СКОБКИ,ЗАКРЫТЫЕ_СКОБКИ,ЗАКРЫТЫЕ_СКОБКИ.
Это работает хорошо, но у меня проблемы с отрицательными числами, я не знаю, как обращаться с оператором вычитания, когда вычитание и когда отрицательный знак?
Функция выполняет итерацию по строке и ищет в ней шаблоны (например, если символ i. равен '{', тогда (i+1). символ должен быть строчной буквой, а (i+2). символ должен быть '} ', сохраняет переменную и переходит к символу (i+3)., иначе выдает синтаксическую ошибку.) Теперь эта функция принимает отрицательные числа и вместо вычитания принимает умножение на отрицательное число и использует '+', так что вместо этого из 3-1 я должен использовать 3+(-1)*1. Это не элегантное решение, у вас есть идеи, как его решить?