Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбор выражения, траблы, Унарный минус 
:(
    Опции темы
Sheff_as_Guest
Дата 1.8.2004, 15:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди, я реализовал алгоритм Бауэра и Замельзона, и вроде всё бы хорошо, но только вот с унарным минусом он не справляется, т.е выражение типа:
-5/-(2+5)
Он не парсит. Я пробовал вносить свои изменения в алгоритм, и проблема вроде бы решалась, но возникали другие.
Не подскажете, что делать, может есть алгоритмы получше. А польская нотация нормально работает с унарными минусами ?

  Вверх
Kiorus
Дата 1.8.2004, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 1.7.2004

Репутация: нет
Всего: 8



а что если сначала сложить 2 +5 , потом домножить на -1 и только потом поделить
PM   Вверх
Олег М
Дата 2.8.2004, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Я делал когда-то давно простенький парсер. По своему правда, что такое Бауэр и Замельзон к сожалению не знаю. Могу выслать исходники, если хочешь. Скажи только куда.
Цитата
а что если сначала сложить 2 +5 , потом домножить на -1 и только потом поделить

Ух ты!
PM MAIL ICQ   Вверх
Sheff_as_Guest
Дата 2.8.2004, 12:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Олег М
Спасиба, я лучше сам, более того, у меня парсер не такой уж простой должен получиться, я планирую сделать парсинг выражений, в которых могут находиться переменные, массивы и вложенные функции для этого мне нужен какой-нибудь быстрый и чёткий алгоритм, Бауэра и Замельзона хороший, но вот унарные минусы не держит sad.gif
Я кстати до этого делал через двоичные деревья, всё пахало, но мне не нравился сам алгоритм, много памяти жрёт и т.д
Кстати, польская нотация тоже с унарными минусами не работает sad.gif(( Ну неужели нет на свете быстрого алгоритма парсинга, который бы всё предусматривал...
  Вверх
Олег М
Дата 2.8.2004, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



А что это за Бауэр-Замельзон такой? Кинь ссылочку - для общего развития.
Я, кстати тоже через двоичные деревья делал - несбалансированные, и рекурсию. Мне нужно было, чтобы разобранные выражения выражения потом быстро выполнялись.
А в чём там ввобще проблема с унарными минусами? Обычные вроде операторы. А "--" и "++" ты делаешь?
PM MAIL ICQ   Вверх
Sheff_as_Guest
Дата 2.8.2004, 15:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Олег М
В том-то и дело что если разбирать через двоичные деревья, то унарный минус не проблема, но если по другому то...
Вообще я пишу интерпретатор, и ++ и -- конечно будет smile.gif
Ссылка вот: http://program.rin.ru/razdel/html/940.html
  Вверх
Fantasist
Дата 2.8.2004, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Помниться когда-то давно написал программку которая считала такие простенькие выражения. Проблема со знаком минус вначале выражения тоже была - я ее решил просто. Добавлял к началу выражения "0+", или просто "0" с предпросмотром, не помню уже. Короче, выражение

-5/-(2+5)

Превращалось то ли в:

0-5/-(2+5)

то ли в

0+-5/-(2+5).

Ну в общем, парсилось после этого без проблем. smile.gif
Способ тупой, на на то время мне показался самым простым.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Sheff_as_Guest
Дата 3.8.2004, 10:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Fantasist
Да, и я такое сделал и сначала всё было хорошо, но потом я стал экспериментировать и начались проблемы.
Видишь ли, у меня парсер такой что он работает не только с числами, но и со строками и с массивами и с функциями, вобщем проблемы возникают...
Цитата
на на то время мне показался самым простым

А что, на сегодняшний день у тебя есть что-то покруче ? Не поделишься ?
  Вверх
Guest
Дата 3.8.2004, 16:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











а yacc с lex позвать не проще ?
  Вверх
Blacksnow
Дата 3.8.2004, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 3.8.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Могу посоветовать одну замечательную книгу
Ахо, Сети, Ульман "Компиляторы".
PM MAIL ICQ   Вверх
Sheff_as_Guest
Дата 3.8.2004, 21:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Blacksnow
Интересно, её можно в инете откопать...
  Вверх
Guest
Дата 4.8.2004, 08:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











на счет накопать в инете книжку: скажу что маловероятно.
я заказывал на амазоне правда на аглицком по деньгам 90 баксов.
правда книжка полезна тока в том случае если хочется заниматься
програмированием компиляторов. там больше теория. (правда без нее никуда :-))) )
но во всяком случае после ее прочтения масса вопросов отпадут сами собой.

а в общем случае хватит описание yacc и lex для написания простых однопроходных компиляторов.

А еще можно саму книжку купить в инет магазе. правда на заказ. потому как редкость :-))

  Вверх
Guest
Дата 4.8.2004, 08:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А пожалуй добавлю книга полностью называется "Теория синтаксического анализа перевода и компиляции" 2 тома.
  Вверх
Sheff_as_Guest
Дата 4.8.2004, 12:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
тока в том случае если хочется заниматься
програмированием компиляторов

Чем я и занимаюсь smile.gif

Кстати, тема закрыта, я уже нашёл решение: Я усовершенствовал алгоритм Бауэра и Замельзона, так что теперь мой парсер разбирает быстро и без труда выражения любой сложности smile.gif
  Вверх
Blacksnow
Дата 4.8.2004, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 3.8.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(Guest @ 4.8.2004, 08:29)
А пожалуй добавлю книга полностью называется "Теория синтаксического анализа перевода и компиляции" 2 тома.

Ахо, Ульман "Теория синтаксического анализа перевода и компиляции. Т1. Синтаксический анализ" 1978 (год русификации)
Ахо, Ульман "Теория синтаксического анализа перевода и компиляции. Т2. Компиляция" 1978
Я же говорил про новое издание
Ахо, Сети, Ульман "Компиляторы. Принципы, технологии, инструменты" 2003
В интернете её нет. Стоит 400 р.

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.