Monthly Archives: January 2009

.NET Парсер математических выражений

Written by elwood

Решил написать о своем творении статью на хабрахабр в надежде, что она будет небесполезной некоторым разработчикам. Публикую также и в своем блоге.

Представляю вниманию товарищей-дотнетчиков библиотечку собственного написания, с помощью которой можно легко обращаться с несложными математическими функциями, переводя их из строковой формы инфиксной записи в обработанное представление, составленное в постфиксной нотации, и обратно. Для чего это может понадобиться ?

К примеру, можно написать приложение, которое принимает ввод функции пользователем в виде строки, анализирует корректность синтаксиса, вычисляет его значение в указанных точках, оптимизирует введенное выражение, минимизируя количество операций, требуемых для вычисления, и может выдавать результат в виде строки, представляющей собой корректное строковое представление оптимизированной функции. В качестве конкретных применений можно отметить различные специализированные калькуляторы (в том числе, построенные наподобие программируемых), приложения, используемые для построения графиков или других отчетов, требующие задания начальных функций, или как оригинальное средство для построения защиты от спама / автоматических регистраций.

(more…)

Дополнения к блогу

Written by elwood

Сегодня решил немного заняться блогом и создал отдельные страницы для MathCompiler’a, куда поместил последнюю версию библиотеки, и отдельную страницу, в которой разместил свои старые программы, написанные еще в школе. Ссылки в меню навигации, enjoy !

UPD: Добавил re-capthca, теперь постить комментарии может любой анонимный пользователь без регистрации.

mathcompiler rc1 )

Written by elwood

Допинал наконец-то эту библиотечку. Теперь, помимо преобразования инфиксных выражений из строки в ПОЛИЗ и вычислений также можно делать обратное преобразование, а также частичную оптимизацию вычисляемого выражения за счет предвычисления констант. Это означает, что можно, к примеру, дать на вход выражение 7+1-sin((13*4)-x) и получить на выходе 8-sin(52-x). Как можно заметить, 7+1 было заменено на 8, 13*4 – на 52, и убрана лишняя пара скобок вокруг 13*4. Конфигурирование через xml сохранено, можно изобретать собственные операторы, подключать функции и экспериментировать.
См тестовое приложение, которое прилагается к архиву в директории precompiled.
Осталось только написать nant-скрипты и проверить на совместимость с .NET 2.0.

math-compiler