Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 16:53   #61
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
В этом и проблема. Можете помочь с рекурсивным спуском?
к сожалению, мне потребуется для этого почти столько же времени и усилий, сколько и вам...

гуглить то пробовали? (результаты поиска на гугл)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2012, 18:50   #62
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Arturko Посмотреть сообщение
вы так предлагаете? я же не смогу так описать все правила, дальше мне надо сделать | ... and .... and..... | потом с тремя and, с четырьмя.... бескончено.
Ну, в общем случае именно так и требуется. Собственно, в рекурсивном спуске именно это и предполагается:
- определяем внешнюю конструкцию (например, оператор if/then/else),
- выделяем из него блоки, назодящиеся между ключевыми словами (т.е. условие, код прямой ветки, код альтернативной ветки,
- рекурсивно передаем выделенные фрагменты на следующий уровень для разбора.
Цитата:
Помогите пожалуйста с кодом, с чего начать? Какие лексемы заносить в массив, как сравнивать, и главное, как тут использовать рекурсию? Идею хотя бы, буду пробовать сам.
Ну, если речь идет об одной единственной конструкции, то следует:
1. Привести строку к "каноническому" виду (преобразовать табуляцию и концы строк в пробелы, убрать пробелы в начале, конце и двойные пробелы...)
2. Разделить строку на зоны, часто из которых должна быть строго постоянной (if, then, exit...), а часто - переменной.
3. Проверить точное совпадение постоянных частей.
4. Проверить, что переменные части удовлетворяют синтсаксису языка.
s-andriano вне форума Ответить с цитированием
Старый 14.06.2012, 18:54   #63
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Не знаю, что там имелось ввиду (я где-то на 4 вкладке запутался), но попробую вкратце объяснить. Рекурсивный спуск обычно используется для разбора выражений. То есть всего того, что находится между if и then в Вашем случае.
В таком случае рассмотрим выражение следющим образом:
выражение=выражение операция выражение
Примеры правильных выражений:
х=10 - здесь два выражения х и 10 и операция =
(х=10) and (x>у) - здесь два выражения х=10 и х>y и операция and
Строя свою функцию вы также должны рассмотреть оба варианта - то есть если операция простая и не содержит других вложенных операций, то пытаться вычислить выражение, то есть получить true\false. Если сложное то сначала на каждое подвыражение натравить саму функцию.
Например, если функция называется eval(x), где х это выражение, то пытаться для второго примера вычислять eval(x=10) and eval(x>y) А уже потом заставить eval вычислять `and.

Немного коряво, но как-то так .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.06.2012 в 18:58.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
синтаксический анализатор(LL) Legato Общие вопросы Delphi 2 25.12.2011 18:29
Синтаксический анализатор Lisёноk Помощь студентам 2 12.12.2011 09:51
Синтаксический анализатор Jeka57 Помощь студентам 1 05.06.2011 22:47
Синтаксический анализатор Ita Фриланс 0 29.03.2011 01:37
Синтаксический анализатор Douglas Помощь студентам 0 28.12.2010 18:01