[Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

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

Модератор: Brickgroup

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

[Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение Viper » 25.09.2006 (Пн) 14:53

[Хакер] Ввиду того, что кирпич доведён до ума, помещаю его обратно в данный раздел.

Вношу свой вклад в дело создания парсеров... Сие было писано очень давно на VB, потом переведено на VB.NET... оригинал впоследствии где-то пропал без вести, а вот Net-версия вот она... Кстати работает и с функциями тоже.

Обновленная версия, с описанием.
Вложения
Parser.rar
Обновленная версия
(6.19 Кб) Скачиваний: 456
Последний раз редактировалось Viper 23.10.2006 (Пн) 14:04, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Сообщение NicSoft » 02.04.2007 (Пн) 21:05

Обнаружил ошибку при работе с отрицательными числами. Для устранения заменил строку:
Код: Выделить всё
If Mid(s, pos, 1).ToLower <> "e"c Then

на:
Код: Выделить всё
If InStr("1234567890).,e", Mid(s, pos, 1).ToLower) > 0 Then

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 03.04.2007 (Вт) 7:19

Спасибо за инфу, посмотрю внимательнее
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 16.04.2007 (Пн) 16:35

Слушайте. Я пытался копнуться в коде, но для меня явно темновато.
Надо, чтоб он считал числа Decimal и выдавал соответственно тоже самое. Скажите пожалуйста что и где надо поменять.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.04.2007 (Вт) 7:02

Что значит "считал числа Decimal"?
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 17.04.2007 (Вт) 12:41

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

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Сообщение NicSoft » 17.04.2007 (Вт) 13:01

Вообще-то выдает он не целым типом, а Double.
У меня в CompactFramework возникла проблема с последним оператором Val(s), я его заменил на CDbl(s) и все заработало без проблем. Тебе судя по всему нужен CDec(s)

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 17.04.2007 (Вт) 20:02

Все нашел разобрался...
Спасибо!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

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

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение star666ton » 15.05.2009 (Пт) 13:53

пытался запустить выполнение проги которую написал (подключил парсер) но появляется ошибкак Изображение что мне сделать?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение alibek » 15.05.2009 (Пт) 13:56

Тебе строчка "VB.NET реализация" в названии темы ни о чем не говорит?
Lasciate ogni speranza, voi ch'entrate.

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

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение star666ton » 15.05.2009 (Пт) 14:11

alibek писал(а):Тебе строчка "VB.NET реализация" в названии темы ни о чем не говорит?

нет :cry: обьясните если не трудно :|

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение alibek » 15.05.2009 (Пт) 14:21

Ты программируешь на VB6.
А данный "кирпич" для VB.NET.
Используй этот или этот.
Lasciate ogni speranza, voi ch'entrate.

DreamShark
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 20.02.2010 (Сб) 15:43

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение DreamShark » 15.05.2010 (Сб) 17:12

отличный парсер! Спасибо, Viper!

Но лаги есть ещё.
Во первых отрицательное число в четной степени выдает отрицательный результат.
примерно так: (-2)^2=-4 - параболу начертить не получится

Во вторых. Я использую парсер для построения графика. Нужно чтобы деление на ноль избегалось, а тут гипербола, когда 1/0 - ошибочку выдает:(

Как это можно поправить? И будет идеальный эвалютатор!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение Viper » 15.05.2010 (Сб) 22:54

DreamShark писал(а):отличный парсер! Спасибо, Viper!

Но лаги есть ещё.
Во первых отрицательное число в четной степени выдает отрицательный результат.
примерно так: (-2)^2=-4 - параболу начертить не получится

Во вторых. Я использую парсер для построения графика. Нужно чтобы деление на ноль избегалось, а тут гипербола, когда 1/0 - ошибочку выдает:(

Как это можно поправить? И будет идеальный эвалютатор!
Имеешь полное право поправить мой код в сторону улучшения. :D
З.Ы. У меня сейчас есть более совершенный вариант парсера, но его надо доводить еще до уровня "кирпича", а времени нет.
Весь мир матрица, а мы в нем потоки байтов!

Lokar
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 10.10.2012 (Ср) 17:23

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение Lokar » 10.10.2012 (Ср) 17:25

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

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: [Парсер] Эвалютатор мат. выражений. (VB .NET реализация)

Сообщение Viper » 10.10.2012 (Ср) 19:48

Для этого стоит его переделать на основе конечных автоматов и с разбором в дерево.
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение Qwertiy » 10.10.2012 (Ср) 21:11

Lokar писал(а):Подскажите, что надо добавить в этот парсер, что бы кроме числовых значений он мог присвоить переменной значение другой переменной.

Если речь идёт о вычислении значения выражения с переменными, то надо простио завести Dictionary, который по имени переменной позволяет получить её значение. Хотя код не смотрел. Мне проще весь парсер написать.


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

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

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

    TopList