| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Разбор выражения, траблы |
| Автор: Sheff_as_Guest 1.8.2004, 15:29 |
| Люди, я реализовал алгоритм Бауэра и Замельзона, и вроде всё бы хорошо, но только вот с унарным минусом он не справляется, т.е выражение типа: -5/-(2+5) Он не парсит. Я пробовал вносить свои изменения в алгоритм, и проблема вроде бы решалась, но возникали другие. Не подскажете, что делать, может есть алгоритмы получше. А польская нотация нормально работает с унарными минусами ? |
| Автор: Kiorus 1.8.2004, 19:44 |
| а что если сначала сложить 2 +5 , потом домножить на -1 и только потом поделить |
| Автор: Олег М 2.8.2004, 08:33 | ||
Я делал когда-то давно простенький парсер. По своему правда, что такое Бауэр и Замельзон к сожалению не знаю. Могу выслать исходники, если хочешь. Скажи только куда.
Ух ты! |
| Автор: Sheff_as_Guest 2.8.2004, 12:31 |
| Олег М Спасиба, я лучше сам, более того, у меня парсер не такой уж простой должен получиться, я планирую сделать парсинг выражений, в которых могут находиться переменные, массивы и вложенные функции для этого мне нужен какой-нибудь быстрый и чёткий алгоритм, Бауэра и Замельзона хороший, но вот унарные минусы не держит Я кстати до этого делал через двоичные деревья, всё пахало, но мне не нравился сам алгоритм, много памяти жрёт и т.д Кстати, польская нотация тоже с унарными минусами не работает |
| Автор: Олег М 2.8.2004, 12:43 |
| А что это за Бауэр-Замельзон такой? Кинь ссылочку - для общего развития. Я, кстати тоже через двоичные деревья делал - несбалансированные, и рекурсию. Мне нужно было, чтобы разобранные выражения выражения потом быстро выполнялись. А в чём там ввобще проблема с унарными минусами? Обычные вроде операторы. А "--" и "++" ты делаешь? |
| Автор: Sheff_as_Guest 2.8.2004, 15:57 |
| Олег М В том-то и дело что если разбирать через двоичные деревья, то унарный минус не проблема, но если по другому то... Вообще я пишу интерпретатор, и ++ и -- конечно будет Ссылка вот: http://program.rin.ru/razdel/html/940.html |
| Автор: Fantasist 2.8.2004, 20:27 |
| Помниться когда-то давно написал программку которая считала такие простенькие выражения. Проблема со знаком минус вначале выражения тоже была - я ее решил просто. Добавлял к началу выражения "0+", или просто "0" с предпросмотром, не помню уже. Короче, выражение -5/-(2+5) Превращалось то ли в: 0-5/-(2+5) то ли в 0+-5/-(2+5). Ну в общем, парсилось после этого без проблем. Способ тупой, на на то время мне показался самым простым. |
| Автор: Sheff_as_Guest 3.8.2004, 10:08 | ||
| Fantasist Да, и я такое сделал и сначала всё было хорошо, но потом я стал экспериментировать и начались проблемы. Видишь ли, у меня парсер такой что он работает не только с числами, но и со строками и с массивами и с функциями, вобщем проблемы возникают...
А что, на сегодняшний день у тебя есть что-то покруче ? Не поделишься ? |
| Автор: Guest 3.8.2004, 16:09 |
| а yacc с lex позвать не проще ? |
| Автор: Blacksnow 3.8.2004, 18:35 |
| Могу посоветовать одну замечательную книгу Ахо, Сети, Ульман "Компиляторы". |
| Автор: Sheff_as_Guest 3.8.2004, 21:57 |
| Blacksnow Интересно, её можно в инете откопать... |
| Автор: Guest 4.8.2004, 08:27 |
| на счет накопать в инете книжку: скажу что маловероятно. я заказывал на амазоне правда на аглицком по деньгам 90 баксов. правда книжка полезна тока в том случае если хочется заниматься програмированием компиляторов. там больше теория. (правда без нее никуда :-))) ) но во всяком случае после ее прочтения масса вопросов отпадут сами собой. а в общем случае хватит описание yacc и lex для написания простых однопроходных компиляторов. А еще можно саму книжку купить в инет магазе. правда на заказ. потому как редкость :-)) |
| Автор: Guest 4.8.2004, 08:29 |
| А пожалуй добавлю книга полностью называется "Теория синтаксического анализа перевода и компиляции" 2 тома. |
| Автор: Sheff_as_Guest 4.8.2004, 12:10 | ||
Чем я и занимаюсь Кстати, тема закрыта, я уже нашёл решение: Я усовершенствовал алгоритм Бауэра и Замельзона, так что теперь мой парсер разбирает быстро и без труда выражения любой сложности |
| Автор: Blacksnow 4.8.2004, 12:43 | ||
Ахо, Ульман "Теория синтаксического анализа перевода и компиляции. Т1. Синтаксический анализ" 1978 (год русификации) Ахо, Ульман "Теория синтаксического анализа перевода и компиляции. Т2. Компиляция" 1978 Я же говорил про новое издание Ахо, Сети, Ульман "Компиляторы. Принципы, технологии, инструменты" 2003 В интернете её нет. Стоит 400 р. |
| Автор: Guest 2.5.2005, 18:45 |
| |
| Автор: Void 2.5.2005, 19:00 | ||
Можно. Вот: http://club.shelek.com/download.php?id=278 И вот (Ахо, Ульман, Теория синтаксического анализа, перевода и компиляции, в 2-х тт.): http://club.shelek.com/download.php?id=255 http://club.shelek.com/download.php?id=256 Лучше книг по этой теме не найти. |
| Автор: DeadSoul 25.2.2006, 12:06 |
| Когда писал подобное обнарузил следующее: 1. Разбор выражения нужно вести с конца. Причина: 2-2-2 2. Вначале нужно вытаскивать операции с наименьшим приоритетом. Причина: 2/2-2 |