![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| anachoreta |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.9.2008 Репутация: нет Всего: нет |
Прошу прощения за это название темы, даже не представляю как это назвать, если у модеров будет желание переделайте пожалуйста.
Задача следующая,объясню на примере: Предположим я хочу сделать калькулятор, данные в который заносятся не по отдельности, а целой строкой, в идеале много строчным текстом. Вопрос: Каким образом можно реализовать следующее, введённый текст обрабатывается кодом, т.е. определяет где скобка начинается, где заканчивается, приоритетность операций и т.д. хотелось бы услышать как этот процесс называется и по возможности пару толковых ссылок. Не хочется изобретать колесо снова. Спасибо, за понимание. P.S. Приведённый пример не является реальным, он дожен показать смысл. Больше интересен сам механизм работы алгоритма. Это сообщение отредактировал(а) anachoreta - 21.9.2009, 15:16 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
польская натация - как самый простой алгоритм.
вот http://dklab.ru/chicken/nablas/10.html тоже ниче так идея... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
это задачка на умение пользоваться структурой "стек"
выражение вида 5*(((9+8)*(4*6))+7) преобразовывается сначала к виду 5 9 8 + 4 6 * * 7 + * а потом уже обрабатывается алгоритмом очень подробно и доходчиво объясняется в книге Роберта Седжвика Фундаментальные алгоритмы на С++. Части 1-4. (стр.142) |
|||
|
||||
| anachoreta |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.9.2008 Репутация: нет Всего: нет |
Лукашевичу респект, его алгоритм прост и эффективен, но как всегда без г... не обходится, алгоритм работает если уже расставлен приоритет операций, я имею ввиду скобки, но это не большая проблема. Книга, кстати толковая, мне понравилась, чуть позже изучу её более внимательно.
Я пытаюсь разобраться в ней, например возможно ли с помощью неё решить следующую задачу:
и что дальше Это сообщение отредактировал(а) anachoreta - 22.9.2009, 01:23 |
|||
|
||||
| smoke_man |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: 1 Всего: 17 |
посмотри пример - может поможет.
-------------------- 0x2b|~0x2b |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Это все называется синтаксический анализ (или просто парсер)
Классика жанра - книга Ахо & Ульман: Компиляторы. принципы, технологии и инструментарий (она же Dragon book) Собственно самих технологий парсеров существует вагон и маленькая тележка, вот некоторые: Рекурсивный спуск (recursive descending parser) Операторное предшествование Конечные автоматы с стековой памятью (LALR & LR парсеры) Существуют готовые программы, для генерации парсеров: yacc/bison (LALR парсеры) ANTLR (Рекурсивный спуск) Есть готовые библиотеки, например boost::spirit |
|||
|
||||
| anachoreta |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.9.2008 Репутация: нет Всего: нет |
smoke_man - за ссылку спасибо.
Книга прикольная, скачал второе издание и начал читать. О ней слышал в книге Страуструпа. Завтра в книжный поеду посмотрю в налиичае. Давно хотел понять принцип работы компиляторов, да вот тока руки не доходили. Спасибо, всем. Достаточно инфы получил для размышления. |
|||
|
||||
| aikidzin |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 21.3.2007 Репутация: нет Всего: нет |
Советовал бы почитать Т.Прата и М. Зелковица "Языки программирования. Разработка и реализация". очень хорошая книга. Кроме истории языков программирования рассматриваются основы построения компиляторов и трансляторов. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |