Вот чтобы не тратить время на разработку такого парсера,
Кто не хочет, тот может пользоваться NCalc.
Лично мне всегда было интересно знать, как
правильно создавать парсеры, а так же иметь навыки написания хотя бы их простых вариантов (например, того же парсера математических выражений). В главах 6 и 7 книги "
Практика программирования на C++" Беарне Стровструп на примере создания калькулятора показал как это делается. Автор сначала показал две неудачные попытки создания калькулятора, наглядно демонстрируя шаги и ошибки, которые обычно программисты допускают при решении подобных задач. Затем, в третьем варианте решения автор наглядно показал как это делать
правильно и объяснил
почему именно так. Решение Стровструпа основано на разработке и применении грамматики. Собственно после этого примера я и заинтересовался EBNF (расширенной формой Бэкуса-Наура) - перевёл для себя стандарт ISO/IEC 14977:1996(E), ссылку на который давал выше.
Продемонстрированное Стровструпом решение (парсер математических выражений) позволяет не только выполнять базовые наборы арифметических операций, но и расширять созданное решение произвольным набором пользовательских функций (sum, random, sqrt, etc). Я делал это в качестве тренировки - никаких проблем не возникло. Такое масштабирование является достаточным именно за счёт продуманной архитектуры приложения, учитывающей саму возможность масштабирования.
Код, присутствующий в обозначенных выше главах весьма компактен. Он написан на C++, но является весьма простым и понятным (на мой взгляд) в т.ч. и для тех, кто пишет на др. языках (например на C#). Так что переложить его на свой язык труда не составит. Насколько я помню, у меня это когда-то заняло один вечер и приобретённый опыт считаю не лишним, поскольку не люблю "чёрные ящики", ломающиеся в самый неподходящий момент (имхо).