![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| gfmail |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 8.7.2006 Репутация: нет Всего: нет |
Доброго времени суток, недавно столкнулся с необходимостью парсинга выражений типа A+B*C,
и единственное чего не понял(не нашёл инфы вообще) - как построить дерево. Как его потом преобразовть в ин/постфиксную форму более-менее понятно, а вот как получить само дерево? Интересует только алгоритм, или хотя-бы кусок кода(лучше на C#). Заранее спасибо. Это сообщение отредактировал(а) gfmail - 14.2.2007, 09:28 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
-------------------- ![]() |
|||
|
||||
| gfmail |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 8.7.2006 Репутация: нет Всего: нет |
Спасибо, mr.DUDA, но ни по одной из ссылок деревьев я не увидел. Почему требуется именно дерево - задача состоит в подсчете погрешностей при вычислении выражений (A^3+B^7...) где заданы погрешности чисел А,В и т.п. может есть другое решение подобной задачи?
Это сообщение отредактировал(а) gfmail - 14.2.2007, 14:05 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Если именно структура нужна, то только парсить.
-------------------- ![]() |
|||
|
||||
| gfmail |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 8.7.2006 Репутация: нет Всего: нет |
да, нужна структура. пересмотрел десяток исходников парсеров(в калькуляторах) - нигде не нашёл построения дерева, может я не там ищу? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вот ещё пару ссылок. Теория:
http://algolist.manual.ru/maths/misc/revpn.php http://ru.wikipedia.org/wiki/Обратная_польская_запись Исходники на шарпе: http://www.codeproject.com/csharp/rpn_expressionparser.asp http://www.codeproject.com/csharp/eeep.asp -------------------- ![]() |
|||
|
||||
| gfmail |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 8.7.2006 Репутация: нет Всего: нет |
Вот это как-раз то что нужно. Спасибо большое mr.DUDA. Жаль что я вчера не глянул, а начал переделывать проект из книги Страуструпа(заменять переменные на структуры содержащие погрешность), если ничего не выйдет начну заново, как написано на algolist.manual.ru. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
В книге Шилдта "Полный справочник по C#" в 26 главе кстати есть пример "Синтаксический анализ методом рекурсивного спуска"...
(нашёл на рсдн) -------------------- ![]() |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
mr.DUDA, не совсем понятно, причем здесь рекурсивный спуск.
ЗЫ Здесь есть стековый алгоритм перевода в ПОЛИЗ http://www.wl.unn.ru/~ragozin/compiler/compil/g11.htm Это сообщение отредактировал(а) Sartorius - 15.2.2007, 10:48 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Sartorius, ну линки на польскую запись я выше приводил, а пример из шилдта не смотрел но может чем-то сможет помочь...
-------------------- ![]() |
|||
|
||||
| gfmail |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 8.7.2006 Репутация: нет Всего: нет |
Всем спасибо, только что сделал
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |