Доброго времени суток!
Понадобилось сделать небольшой проект. В проекте разбор и вычисление математических формул.
Требования: вложенные функции, неограниченная глубина вложения и внешние переменные.
В интернете много решений, но все не то, или не так. Или без формул, или без переменных или простейшие возможности типа «1+(2-3)/4». Зато большинство ответов были в сторону лексического анализа и обратной польской нотации. Вот их я и применил, взяв примеры с разных источников.
Сначала разберем лексический анализ. Потому что простой анализ формулы по символам с поиском в ней функций, операторов, переменных и прочего получился бы крайне нечитабельный.
Реализацию алгоритмов можно взять в интернете и подредактировать под свои нужды.
Для лексического анализа внес небольшие изменения:
Вот что получилось. Ниже будет ссылка на исходники.
Понадобилось сделать небольшой проект. В проекте разбор и вычисление математических формул.
Требования: вложенные функции, неограниченная глубина вложения и внешние переменные.
В интернете много решений, но все не то, или не так. Или без формул, или без переменных или простейшие возможности типа «1+(2-3)/4». Зато большинство ответов были в сторону лексического анализа и обратной польской нотации. Вот их я и применил, взяв примеры с разных источников.
Сначала разберем лексический анализ. Потому что простой анализ формулы по символам с поиском в ней функций, операторов, переменных и прочего получился бы крайне нечитабельный.
Реализацию алгоритмов можно взять в интернете и подредактировать под свои нужды.
Для лексического анализа внес небольшие изменения:
- загрузка списка переменных. В конструкторе происходит замена переменных их значениями;
- замена разделителей целой-дробной части числа на тот что используется в системе;
- добавил унарный минус;
- удалил лишние для меня лексемы.
Вот что получилось. Ниже будет ссылка на исходники.