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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертор текст -> действия 
:(
    Опции темы
anachoreta
Дата 21.9.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прошу прощения за это название темы, даже не представляю как это назвать, если у модеров будет желание переделайте пожалуйста.

Задача следующая,объясню на примере:

Предположим я хочу сделать калькулятор, данные в который заносятся не по отдельности, а целой строкой, в идеале много строчным текстом.

Вопрос: 

Каким образом можно реализовать следующее, введённый текст обрабатывается кодом, т.е. определяет где скобка начинается, где заканчивается, приоритетность операций и т.д.
хотелось бы услышать как этот процесс называется и по возможности пару толковых ссылок. Не хочется изобретать колесо снова.

Спасибо, за понимание.

P.S. Приведённый пример не является реальным, он дожен показать смысл. Больше интересен сам механизм работы алгоритма.

Это сообщение отредактировал(а) anachoreta - 21.9.2009, 15:16
PM MAIL   Вверх
jonie
Дата 21.9.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



польская натация - как самый простой алгоритм.

вот http://dklab.ru/chicken/nablas/10.html тоже ниче так идея... 


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
zim22
Дата 21.9.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



это задачка на умение пользоваться структурой "стек"
выражение вида
5*(((9+8)*(4*6))+7)
преобразовывается сначала к виду
5 9 8 + 4 6 * * 7 + *
а потом уже обрабатывается алгоритмом

очень подробно и доходчиво объясняется в книге Роберта Седжвика Фундаментальные алгоритмы на С++. Части 1-4. (стр.142)



--------------------
PM MAIL   Вверх
anachoreta
Дата 22.9.2009, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Лукашевичу респект, его алгоритм прост и эффективен, но как всегда без г... не обходится, алгоритм работает если уже расставлен приоритет операций, я имею ввиду скобки, но это не большая проблема. Книга, кстати толковая, мне понравилась, чуть позже изучу её более внимательно.

Я пытаюсь разобраться в ней, например возможно ли с помощью неё решить следующую задачу:

Код

8 + sqrt (( 7 + ( 5 * 4 )) / 13 )
8 sqrt (( 7 + ( 5 * 4 )) / 13 ) +


и что дальше  smile, следующим должен идти кв. корень, но я его не могу использовать, так как он не знак действия, ни переменная, на ум приходит только одно, для подобных целей использовать дополнительный модуль обработки выражения под корнем, а затем продолжать решать задачу. Верно ли я понимаю?

Это сообщение отредактировал(а) anachoreta - 22.9.2009, 01:23
PM MAIL   Вверх
smoke_man
Дата 22.9.2009, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



посмотри пример - может поможет.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
xvr
Дата 22.9.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Это все называется синтаксический анализ (или просто парсер)
Классика жанра - книга Ахо & Ульман: Компиляторы. принципы, технологии и инструментарий (она же Dragon book)
Собственно самих технологий парсеров существует вагон и маленькая тележка, вот некоторые:
Рекурсивный спуск (recursive descending parser)
Операторное предшествование
Конечные автоматы с стековой памятью (LALR & LR парсеры)

Существуют готовые программы, для генерации парсеров:
yacc/bison (LALR парсеры)
ANTLR (Рекурсивный спуск)

Есть готовые библиотеки, например boost::spirit

PM MAIL   Вверх
anachoreta
Дата 22.9.2009, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



smoke_man  - за ссылку спасибо.

Книга прикольная, скачал второе издание и начал читать. О ней слышал в книге Страуструпа. Завтра в книжный поеду посмотрю в налиичае. Давно хотел понять принцип работы компиляторов, да вот тока руки не доходили.

Спасибо, всем. Достаточно инфы получил для размышления.
PM MAIL   Вверх
aikidzin
Дата 22.9.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(anachoreta @ 22.9.2009,  12:47)
Давно хотел понять принцип работы компиляторов

Советовал бы почитать Т.Прата и М. Зелковица "Языки программирования. Разработка и реализация". очень хорошая книга. Кроме истории языков программирования рассматриваются основы построения компиляторов и трансляторов. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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