Страница: 1 |
Страница: 1 |
Вопрос: Алгоритм Бауэра-Замельзона
Добавлено: 27.07.06 00:02
Автор вопроса: Sacred Phoenix | ICQ: 304238252
Всё та же тема по интерпретации матвыражений. На лексеры/парсеры решил забить, нашёл тут алгоритм Бауэра-Замельзона для вычисления значений выражений. Линк: http://algolist.manual.ru/syntax/parsear.php (спасибо Viper'у за линк на сайт http://algolist.manual.ru/). Так вот, есть три проблемы:
1. Алгоритм не парсит унарный минус (выражения типа -6/2).
2. Не предусмотрены вызовы функций.
Есть у кого-нить идеи по усовершенствованию алгоритма?
3. Я пока не реализовал функцию 4 по алгоритму, т.е. парсер не вычисляет формулы типа 2+4*8 (выдает рез-тат "8"), т.е. если приоритетное действие стоит после. Прошу помочь.
За помощь буду оч. благодарен.
PS. Если кто знает ещё какие алгоритмы вычисления выражений, кидайте, плиз, линки, будем изучать.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 27.07.06 01:21
А чем обратная польская нотация тебя не устраивает?
Номер ответа: 2
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #2
Добавлено: 27.07.06 15:23
Упс, про обратную польскую нотацию забыл... К этому времени я её уже реализовал с целыми числами константами PI и E, четырьмя действиями и скобками. Щас занимаюсь реализацией дробных чисел и функций. Есть одна проблема: реализация унарного минуса. Подскажите, как быть (лексер должен относить этот минус к числу, а не распознавать операцией).
Номер ответа: 3
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #3
Добавлено: 27.07.06 18:21
Выложил проект: http://webfile.ru/1038186 (пароль: "RevPNEval.rar". У кого есть желание доделать его, скачайте, а после перешлите мне. Что именно надо долелать, есть в списке "TODO" в начальном комментарии.
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 27.07.06 20:09
Унарный минус отличается от обычного тем, что перед ним идет символ операции (+,/,-,*,(,) и т.п.)
Номер ответа: 5
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #5
Добавлено: 27.07.06 20:18
тааак, по ходу кое-что получится...
Номер ответа: 6
Автор ответа:
danser
ICQ: 299287824
Вопросов: 76
Ответов: 209
Профиль | | #6
Добавлено: 28.07.06 09:44
Где символ операции перед унарним минусом?
Номер ответа: 7
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #7
Добавлено: 28.07.06 13:41
2 danser: да эт фигня, ибо просто расширяешь условие - если перед минусом операция, либо ничего, тогда он унарный