[Парсер] Эвалютатор мат. выражений.

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16111
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

[Парсер] Эвалютатор мат. выражений.

Сообщение Хакер » 23.09.2006 (Сб) 21:24

По многочисленным просьбам, выкладываю свой недоделанный кирпич.

Итак, что же это такое. Буду краток, и скажу одним словом:
Это функция, принимающая в качестве аргумента какую-либо строку (например "((2 + 7) * 3 + 1)/7" ) и возвращающая просчитаный результат (для данного примера - 4 ).

Думаю, для того чтобы понять "what it is" информации хватит.

Подробности, использование, сам класс, пример - во вложении.

Теперь о плохом ;) :
1) Изначально поддержка функция не предусматривалась. Была она добавлена за 15 минут до выкладывания кирпича. Так что сделана довольно тупо.
2) Числа с плавающей точкой тоже пока не работают. Так что скорее всего при попытки посчитать что-то большое, парсер попробует сделать следующее:
для числа 8e+6 он попытается сложить 8e и 6 , что вызовет ошибку.

Обещаю всё исправить и добавить возможность объявлять свои User-Defined функции и переменные.

Высказываеся...
Вложения
brick_Eval.rar
Сам кирпич, рид-ми, пример.
(9.88 Кб) Скачиваний: 217
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16111
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 23.09.2006 (Сб) 21:59

Обнаружены глюки:
1) Не понимает точку в качестве дробного разделителя.
2) Неотхэндленны ошибки отсутсвия одного из операндов для + и - .
3) Нет оператора степени.

Завтра выложу поправленную.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

pronto
Постоялец
Постоялец
 
Сообщения: 581
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 24.09.2006 (Вс) 12:56

Хакер, привет!
Благодарен за предоставление материала на изучение. После поверхностного просмотра кода и некоторого тестирования мне показалось, что кирпичик еще будет сыроват...

Замеченные баги:
1. Выражение
(((((((((((((((((((((((((((((((((((1+1)))))))))))))))))))))))))))))))))))
оказалось неподъемным. Как показал эксперимент, одно вложение дает замедление в ~5 раз.

2. Не работает с отрицательными числами.
-2 + 3 = Type mismatch

3. Не преобразует выражение в постфикс, следовательно, алгоритм одноразовый и для пересчета с другим значением переменной нужно парсить все выражение заново.

4. Еще одно следствие из п. 3. Медленность и непригодность для построения графиков и, вообще, исследования функций.

5. Не предусмотрено деление на ноль.

Строка "1+2+3+4+5+...+5000" выполняется за ~4200 мс - это очень много (может на более мощной машине это займет меньше времени)
O, sancta simplicitas!

star666ton
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 13.05.2009 (Ср) 19:25

Re: [Парсер] Эвалютатор мат. выражений.

Сообщение star666ton » 15.05.2009 (Пт) 15:18

не работает с отрицательными числами ((( а так хочется может есть поновее версия??

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16111
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: [Парсер] Эвалютатор мат. выражений.

Сообщение Хакер » 15.05.2009 (Пт) 15:54

Надо обращать внимание на первое предложение в первом сообщении.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

star666ton
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 13.05.2009 (Ср) 19:25

Re: [Парсер] Эвалютатор мат. выражений.

Сообщение star666ton » 15.05.2009 (Пт) 16:35

и кстати дробные числа считаются если поставить не точку а запятую

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2277
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Re: [Парсер] Эвалютатор мат. выражений.

Сообщение Sirik » 09.08.2011 (Вт) 12:42

чтобы работал с отрицательными числами можно добавить в Eval:
Код: Выделить всё
    If Left(sExpression, 1) = "-" Then sExpression = "0" & sExpression


и спасибо за кирпич
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16111
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: [Парсер] Эвалютатор мат. выражений.

Сообщение Хакер » 09.08.2011 (Вт) 13:33

Sirik писал(а):и спасибо за кирпич

Насколько я помню, уже много лет назад кирпич стал меня раздражать своей кривостью. Так что ну его, лучше я напишу новый.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Re: [Парсер] Эвалютатор мат. выражений.

Сообщение Zenitchik » 24.08.2011 (Ср) 15:21

А ещё лучше - напиши статью, про то, как писать эвалюаторы. Обычно бывает проще самому написать эвалюатор под задачу, чем допиливать чужой кирпич.
Я, лично, пишу их "на автопилоте" и подумываю об автоматизации этого процесса.
Знание английского языка - затрудняет понимание кода

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: [Парсер] Эвалютатор мат. выражений.

Сообщение FireFenix » 24.08.2011 (Ср) 15:27

Zenitchik писал(а):Я, лично, пишу их "на автопилоте"

Это пять :D
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.08.2011 (Чт) 0:20

Zenitchik писал(а):Я, лично, пишу их "на автопилоте"

Я тоже. По крайней мере, если там возведения в степень нет :)


Вернуться в Кирпичный завод

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList