| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Парсинг строки со скобками |
| Автор: tonchitos 2.8.2008, 17:20 | ||||
| Люди, у меня есть логическое выражение Бинарное дерево вычисляет результат этого логического выражения В классе дерева же парсится строка с логическим выражением... У меня со скобками проблемы, не соображу как их парсить...
класс дерева
с бинарными операциями тут все ясно... с унарной ! не очень, при вычислении проверяю, не стоит ли перед именем - !, но в случае со скобками не прокатывает походу И совсем неясно со скобками как с ними быть? Помогите, и если дерево где-то некрасивое - скажите |
| Автор: Mayk 2.8.2008, 18:52 |
Посмотри статью в вике про http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C, или посмотри работу http://compilers.iecc.com/crenshaw/ (описанный им РекурсивныйНисходящийПарсер кстати более интуитивно понятен). В http://en.wikipedia.org/wiki/Recursive_descent_parser уже дан пример RDP, если его обработать напильником(добавить построение дерева,выкинуть ненужное, заменить арифметические действия на логические) , то все пробелмы сразу решены. |
| Автор: tonchitos 2.8.2008, 19:10 |
| ОПЗ еще надо как то переделать под парсинг логического выражения.... а вот с тем что у мя уже имеется ничего нельзя сделать? |
| Автор: tonchitos 2.8.2008, 19:57 | ||||
Но в этот раз не буду ммм.... ну вот к примеру реализация опз отсюда http://www.interface.ru/home.asp?artId=1492
наверно это девид блейн написал, она скукоживает мой моск |
| Автор: tonchitos 2.8.2008, 20:36 | ||
вот простой пример... но у меня операнды - строки... понимаете? мне делать вместа массива интов массив строк? |
| Автор: Mayk 2.8.2008, 20:39 |
нет. это реализация рекурсивного спуска в ходе которого строится ОПЗ. Собственно самого рекурсивного спуска достаточно для построения дерева. почитай лучше Криншау или википедию - там лишнего мусора меньше. |
| Автор: tonchitos 2.8.2008, 20:41 | ||
| прочитала что ппз хороша для реализации а не для компиляции ))) ну в общем если у кого будут соображения как мне быть - буду рада... может как то с тем что есть по другому мона Добавлено через 2 минуты и 54 секунды
а где мона почитать? буков много, кода мало, дядинька майк, попроще есть че нить? Добавлено через 12 минут и 17 секунд по идее по моему приекрасно можно присобачить разбор выражения со скобками к тому что у мя уже написано в первом посте... По идее находится первые скобки, без вложенных внутри скобок... Выражение внутри - передается в ф-ию, по нему строится дерево, соответственно берем верхний узел этого дерева как операнд... ток не соображу как реализовать |
| Автор: tonchitos 2.8.2008, 21:03 |
| Наверно так (a+b +(a*!b)+(a^b*c))*a+(c+!a) сначала я беру первую скобку и отправляю реккурсивно на построение дерева вот енто a+b +(a*!b)+(a^b*c) потом следующая скобка и я вычисляю это a*!b причем запоминаю индекс закрывающей скобки и после выхода из рекурсивного витка - вычисляю от него |
| Автор: Mayk 4.8.2008, 05:34 |
почитай первые 2-3 главы. Этого достаточно. Тем более что он там нередко повторяется в стиле "помните что мы сделали прошлым летом? делаем ещё раз". нет, массив node'ов (struct cNode). |