Довольно хороший подход включил бы два шага. Первый шаг включает преобразование выражения от инфикса для добавления постфикса (например, через сортировочная станция Dijkstra ) нотация. Как только это сделано, это довольно тривиально для записи постфиксное средство анализа .
Я записал несколько сообщений в блоге о разработке математического синтаксического анализатора. Существует генерал введение , элементарные знания [приблизительно 111] грамматики , демонстрационная реализация, записанная в Ruby и набор тестов . Возможно, Вы найдете эти материалы полезными.
У Вас есть несколько подходов. Вы могли генерировать динамический код и выполнить его для получения ответа, не будучи должен записать много кода. Просто выполните, поиск на времени выполнения генерировал код в.NET и существует много примеров вокруг.
, Кроме того, Вы могли создать фактический синтаксический анализатор и генерировать немного дерева синтаксического анализа, которое тогда используется для оценки выражения. Снова это довольно просто для основных выражений. Проверьте codeplex, поскольку я полагаю, что у них есть математический синтаксический анализатор на там. Или просто ищите BNF, который будет включать примеры. Любой веб-сайт, представляющий понятия компилятора, будет включать это как основной пример.
Если Вы имеете "всегда на" приложении, просто отправляете математическую строку, чтобы погуглить и проанализировать результат. Простой путь, но не уверенный, если это - то, в чем Вы нуждаетесь - но умный в некотором роде, я предполагаю.
Связанный вопрос Уравнение (выражение) синтаксический анализатор с приоритетом? имеет некоторую хорошую информацию о том, как начать с этим также.
-Adam
Принятие Вашего входа является инфиксным выражением в формате строки, Вы могли преобразовать его в постфикс и, с помощью пары стеков: стопка оператора и стопка операнда, работайте решение оттуда. Можно найти общую информацию об алгоритме в ссылке Википедии.
ANTLR является очень хорошим LL (*) парсер-генератор. Я рекомендую его высоко.