![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Sheff_as_Guest |
|
|||
|
Unregistered |
Люди, я реализовал алгоритм Бауэра и Замельзона, и вроде всё бы хорошо, но только вот с унарным минусом он не справляется, т.е выражение типа:
-5/-(2+5) Он не парсит. Я пробовал вносить свои изменения в алгоритм, и проблема вроде бы решалась, но возникали другие. Не подскажете, что делать, может есть алгоритмы получше. А польская нотация нормально работает с унарными минусами ? |
|||
|
||||
| Kiorus |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 1.7.2004 Репутация: нет Всего: 8 |
а что если сначала сложить 2 +5 , потом домножить на -1 и только потом поделить
|
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Я делал когда-то давно простенький парсер. По своему правда, что такое Бауэр и Замельзон к сожалению не знаю. Могу выслать исходники, если хочешь. Скажи только куда.
Ух ты! |
|||
|
||||
| Sheff_as_Guest |
|
|||
|
Unregistered |
Олег М
Спасиба, я лучше сам, более того, у меня парсер не такой уж простой должен получиться, я планирую сделать парсинг выражений, в которых могут находиться переменные, массивы и вложенные функции для этого мне нужен какой-нибудь быстрый и чёткий алгоритм, Бауэра и Замельзона хороший, но вот унарные минусы не держит Я кстати до этого делал через двоичные деревья, всё пахало, но мне не нравился сам алгоритм, много памяти жрёт и т.д Кстати, польская нотация тоже с унарными минусами не работает |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
А что это за Бауэр-Замельзон такой? Кинь ссылочку - для общего развития.
Я, кстати тоже через двоичные деревья делал - несбалансированные, и рекурсию. Мне нужно было, чтобы разобранные выражения выражения потом быстро выполнялись. А в чём там ввобще проблема с унарными минусами? Обычные вроде операторы. А "--" и "++" ты делаешь? |
|||
|
||||
| Sheff_as_Guest |
|
|||
|
Unregistered |
Олег М
В том-то и дело что если разбирать через двоичные деревья, то унарный минус не проблема, но если по другому то... Вообще я пишу интерпретатор, и ++ и -- конечно будет Ссылка вот: http://program.rin.ru/razdel/html/940.html |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Помниться когда-то давно написал программку которая считала такие простенькие выражения. Проблема со знаком минус вначале выражения тоже была - я ее решил просто. Добавлял к началу выражения "0+", или просто "0" с предпросмотром, не помню уже. Короче, выражение
-5/-(2+5) Превращалось то ли в: 0-5/-(2+5) то ли в 0+-5/-(2+5). Ну в общем, парсилось после этого без проблем. Способ тупой, на на то время мне показался самым простым. -------------------- Волны гасят ветер... |
|||
|
||||
| Sheff_as_Guest |
|
|||
|
Unregistered |
Fantasist
Да, и я такое сделал и сначала всё было хорошо, но потом я стал экспериментировать и начались проблемы. Видишь ли, у меня парсер такой что он работает не только с числами, но и со строками и с массивами и с функциями, вобщем проблемы возникают...
А что, на сегодняшний день у тебя есть что-то покруче ? Не поделишься ? |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
а yacc с lex позвать не проще ?
|
|||
|
||||
| Blacksnow |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 3.8.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Могу посоветовать одну замечательную книгу
Ахо, Сети, Ульман "Компиляторы". |
|||
|
||||
| Sheff_as_Guest |
|
|||
|
Unregistered |
Blacksnow
Интересно, её можно в инете откопать... |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
на счет накопать в инете книжку: скажу что маловероятно.
я заказывал на амазоне правда на аглицком по деньгам 90 баксов. правда книжка полезна тока в том случае если хочется заниматься програмированием компиляторов. там больше теория. (правда без нее никуда :-))) ) но во всяком случае после ее прочтения масса вопросов отпадут сами собой. а в общем случае хватит описание yacc и lex для написания простых однопроходных компиляторов. А еще можно саму книжку купить в инет магазе. правда на заказ. потому как редкость :-)) |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
А пожалуй добавлю книга полностью называется "Теория синтаксического анализа перевода и компиляции" 2 тома.
|
|||
|
||||
| Sheff_as_Guest |
|
|||
|
Unregistered |
Чем я и занимаюсь Кстати, тема закрыта, я уже нашёл решение: Я усовершенствовал алгоритм Бауэра и Замельзона, так что теперь мой парсер разбирает быстро и без труда выражения любой сложности |
|||
|
||||
| Blacksnow |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 3.8.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Ахо, Ульман "Теория синтаксического анализа перевода и компиляции. Т1. Синтаксический анализ" 1978 (год русификации) Ахо, Ульман "Теория синтаксического анализа перевода и компиляции. Т2. Компиляция" 1978 Я же говорил про новое издание Ахо, Сети, Ульман "Компиляторы. Принципы, технологии, инструменты" 2003 В интернете её нет. Стоит 400 р. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |