КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Алгоритм восходящего разбора с возвратами
Мы опишем восходящий разбор в виде алгоритма синтаксического анализа, который называют алгоритмом типа «перенос-свертка». Он представляет собой по существу правый анализатор, который перебирает всевозможные обращенные правые выводы, совместимые с входной цепочкой. Один шаг алгоритма состоит в считывании цепочки, расположенной в верхней части магазина, чтобы выяснить, образуют ли верхние символы правую часть какого-нибудь правила. Если да, то производится свертка, заменяющая эти символы левой частью того самого правила. Если возможна более чем одна свертка, го эти свертки упорядочиваются произвольным образом и применяется первая из них. Если свертка невозможна, то в магазин переносится следующий входной символ и процесс продолжается, как прежде. Всегда перед переносом делается попытка свертки. Если мы дошли до конца цепочки, а свертка все еще невозможна, то надо вернуться к последнему шагу, на котором была сделана свертка. Если здесь возможна другая свертка, надо испытать ее. Этот метод можно рассматривать как процедуру прослеживания всевозможных последовательностей тактов недетерминированного правого анализатора для данной грамматики. Однако так же, как в случае нисходящего разбора, надо избегать ситуаций, в которых число возможных последовательностей тактов бесконечно. Одна такая ловушка оказывается тогда, когда грамматика содержит циклы, т. е. выводы вида Для реализации алгоритма также будем использовать два магазина Вход: КС-грамматика Выход: Один обращенный правый разбор, если таковой существует. В противном случае – слово «ошибка». Метод: 1. Произвольным образом упорядочить правила; 2. Определим конфигурацию алгоритма как упорядоченную четверку вида Алгоритм может находиться в одном из трех состояний В магазине 3. Начальная конфигурация алгоритма - 4. Сам алгоритм работает так. Начинаем с попытки применить шаг 1. Шаг 1. Попытка свертки
где правило Шаг 2. Перенос
если Если Здесь при выполнении этого шага Шаг 3. Допускание
Достигнут конец входной цепочки и найдена правовыводимая цепочка, совпадающая с входной. Обращенный правый разбор Если шаг 3 неприменим, то перейти к шагу 4; Шаг 4. Переход в состояние возврата
при условии, что Шаг 5. Возврат. a.
если Примечание. Здесь происходит возврат к предыдущей свертке и делается попытка свертки с помощью следующей альтернативы; b.
если Примечание. Если других сверток не существует, надо «взять назад» данную свертку и продолжать возврат, оставляя входной указатель на позиции c.
если Примечание. Мы вернулись к предыдущей свертке и, так как других сверток нет попробуем сделать перенос; d.
если наверху магазина Примечание. Здесь в позиции Если этот шаг не выполним, объявить об ошибке.
Пример №1
Задание. Пусть задана КС-грамматика
Дата добавления: 2014-01-07; Просмотров: 2022; Нарушение авторских прав?; Мы поможем в написании вашей работы! |