![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
tonchitos |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: нет Всего: 40 |
Люди, у меня есть логическое выражение
Бинарное дерево вычисляет результат этого логического выражения В классе дерева же парсится строка с логическим выражением... У меня со скобками проблемы, не соображу как их парсить...
класс дерева
с бинарными операциями тут все ясно... с унарной ! не очень, при вычислении проверяю, не стоит ли перед именем - !, но в случае со скобками не прокатывает походу И совсем неясно со скобками как с ними быть? Помогите, и если дерево где-то некрасивое - скажите -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
||||
|
|||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Посмотри статью в вике про обратную польскую нотацию, или посмотри работу Creenshaw (описанный им РекурсивныйНисходящийПарсер кстати более интуитивно понятен). В вике же уже дан пример RDP, если его обработать напильником(добавить построение дерева,выкинуть ненужное, заменить арифметические действия на логические) , то все пробелмы сразу решены. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: нет Всего: 40 |
ОПЗ еще надо как то переделать под парсинг логического выражения....
а вот с тем что у мя уже имеется ничего нельзя сделать? -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
можно конечно сделать костыли: вначале считать выражения в скобках (до поиска всех операторов) , потом каким-то образом преобразовывать строку так чтобы скобки убирались[вместо скобочного выражения ставить что-нить другое], но это очень мерзко и противно. паресеры rdp или rpn гораздо легче реализовать,
с этим проблем меньше. а собственно какие? -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: нет Всего: 40 |
![]() Но в этот раз не буду ммм.... ну вот к примеру реализация опз отсюда http://www.interface.ru/home.asp?artId=1492
наверно это девид блейн написал, она скукоживает мой моск ![]() -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: нет Всего: 40 |
вот простой пример... но у меня операнды - строки... понимаете? мне делать вместа массива интов массив строк? -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
нет. это реализация рекурсивного спуска в ходе которого строится ОПЗ. Собственно самого рекурсивного спуска достаточно для построения дерева. почитай лучше Криншау или википедию - там лишнего мусора меньше. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: нет Всего: 40 |
прочитала что ппз хороша для реализации а не для компиляции )))
ну в общем если у кого будут соображения как мне быть - буду рада... может как то с тем что есть по другому мона Добавлено через 2 минуты и 54 секунды
а где мона почитать? буков много, кода мало, дядинька майк, попроще есть че нить? Добавлено через 12 минут и 17 секунд по идее по моему приекрасно можно присобачить разбор выражения со скобками к тому что у мя уже написано в первом посте... По идее находится первые скобки, без вложенных внутри скобок... Выражение внутри - передается в ф-ию, по нему строится дерево, соответственно берем верхний узел этого дерева как операнд... ток не соображу как реализовать -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
tonchitos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 24.2.2007 Репутация: нет Всего: 40 |
Наверно так
(a+b +(a*!b)+(a^b*c))*a+(c+!a) сначала я беру первую скобку и отправляю реккурсивно на построение дерева вот енто a+b +(a*!b)+(a^b*c) потом следующая скобка и я вычисляю это a*!b причем запоминаю индекс закрывающей скобки и после выхода из рекурсивного витка - вычисляю от него -------------------- – Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил. |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
почитай первые 2-3 главы. Этого достаточно. Тем более что он там нередко повторяется в стиле "помните что мы сделали прошлым летом? делаем ещё раз". нет, массив node'ов (struct cNode). Это сообщение отредактировал(а) Mayk - 4.8.2008, 05:35 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |