нужно написать матемитический парсер т.е. - входные данные 12+45*548+54-(45+34*34+(2/8)-4)*10 а на выходе будет ... эээ.. ну в общем либо ошибка либо число. был реализован один алгоритм.... меня подвели отрицательные числа т.е. после резолва части строки получалось ...12*-10.. в общем пошело дописалование когда и все посыпалось... я думаю что просто начал не с того конца... ну вот. у кого какие предложения
Математический парсер
Модератор: Злобный
- shmalex
 - Юзер
 - Сообщения: 74
 - Зарегистрирован: Пн дек 12, 2005 11:59
 - Откуда: Молдова
 - Контактная информация:
 
Математический парсер
Всем ПРЕВЕД.
нужно написать матемитический парсер т.е. - входные данные 12+45*548+54-(45+34*34+(2/8)-4)*10 а на выходе будет ... эээ.. ну в общем либо ошибка либо число. был реализован один алгоритм.... меня подвели отрицательные числа т.е. после резолва части строки получалось ...12*-10.. в общем пошело дописалование когда и все посыпалось... я думаю что просто начал не с того конца... ну вот. у кого какие предложения
			
			
									
									
						нужно написать матемитический парсер т.е. - входные данные 12+45*548+54-(45+34*34+(2/8)-4)*10 а на выходе будет ... эээ.. ну в общем либо ошибка либо число. был реализован один алгоритм.... меня подвели отрицательные числа т.е. после резолва части строки получалось ...12*-10.. в общем пошело дописалование когда и все посыпалось... я думаю что просто начал не с того конца... ну вот. у кого какие предложения
- shmalex
 - Юзер
 - Сообщения: 74
 - Зарегистрирован: Пн дек 12, 2005 11:59
 - Откуда: Молдова
 - Контактная информация:
 
зверская штука на первый взгляд... хочеться свой добацать... либо этот переносить на C# 
 
подход интересный, у меня идет более очевидный парс:
сначало разметить все скобки, найти самую глубокую.
в ней найти максимальный приоритет операции
рекурсивно разрешить операцию т.е. если в строке есть 2*2*5*4 нужно все их разрешить разом поличуть 80.
и так до тех пор пока будет НЕ найденна операция.
к томуже парс идет в самой страке т.е. 2+5+8*2 после первой операции переходит в 2+5+16 после в торой 23. решение найденно.
+вспомогательный фции для поиска чисел операции и т.п.
дальше хотелось бы произвести сравнительный анализ по производительности... но думаю, что мой метод уже здал позиции.
 . 
у кого какие идеи... а может улучшить предложанный... если он конечно в этом нужндается
			
			
									
									
						подход интересный, у меня идет более очевидный парс:
сначало разметить все скобки, найти самую глубокую.
в ней найти максимальный приоритет операции
рекурсивно разрешить операцию т.е. если в строке есть 2*2*5*4 нужно все их разрешить разом поличуть 80.
и так до тех пор пока будет НЕ найденна операция.
к томуже парс идет в самой страке т.е. 2+5+8*2 после первой операции переходит в 2+5+16 после в торой 23. решение найденно.
+вспомогательный фции для поиска чисел операции и т.п.
дальше хотелось бы произвести сравнительный анализ по производительности... но думаю, что мой метод уже здал позиции.
у кого какие идеи... а может улучшить предложанный... если он конечно в этом нужндается
- NKolea
 - Юзер
 - Сообщения: 75
 - Зарегистрирован: Пт апр 07, 2006 20:08
 - Откуда: Moldova
 - Контактная информация:
 
shmalex, алгоритм Богатырёва сначало превращает математическое выражение в польскую запись по методу приоритетов. Потом рекурсивно рассматривается польская запись и выполняются операции над числами.
Пример:
Математическое выражение: (a+b)*c
Польская запись этого выр-я: a b + c *
Этот алгоритм используется в компиляторах и в скриптовых языках. Ну а в твоём методе я не вижу ничего нового, да и к тому ты ещё больше усложнил задачу тем самым увеличивая размер кода программы, производительность наоборот снизится. Какая разница когда будет выполняться сложение? Всёравно оно будет производиться...
 
sadman, я почему-то не вижу твоё мыло в инфе...
 
Я бы вам всю книжку Богатырёва скинул если-б не по дайлапу...
 
Но если будет возможность пошлю вам на мыло... Пока тока маленького размера файлы могу скинуть!
			
			
									
									
						Пример:
Математическое выражение: (a+b)*c
Польская запись этого выр-я: a b + c *
Этот алгоритм используется в компиляторах и в скриптовых языках. Ну а в твоём методе я не вижу ничего нового, да и к тому ты ещё больше усложнил задачу тем самым увеличивая размер кода программы, производительность наоборот снизится. Какая разница когда будет выполняться сложение? Всёравно оно будет производиться...
sadman, я почему-то не вижу твоё мыло в инфе...
Я бы вам всю книжку Богатырёва скинул если-б не по дайлапу...
Но если будет возможность пошлю вам на мыло... Пока тока маленького размера файлы могу скинуть!
- sadman
 - Завсегдатай
 - Сообщения: 2002
 - Зарегистрирован: Чт дек 15, 2005 23:46
 - Откуда: с ботаники
 - Контактная информация:
 
NKolea,
eugen87k@inbox.ru
			
			
									
									
						eugen87k@inbox.ru
