Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Нисходящий синтаксический анализ

Алгоритм левой факторизации

Вход. КС-грамматика.

Выход. Эквивалентная левофакторизованная грамматика

Алгоритм.

Для каждой переменной находим самое длинное начало строки , общее для двух или более правых частей.

Если, заменим все правила вида , где - представляет все варианты, не начинающиеся с , правилами

Здесь - новая переменная.

Выполняем это преобразование до тех пор, пока никакие два варианта не будут иметь общего начала.


Метод рекурсивного спуска (с откатом)

- указатель входной строки (input pointer) – указывает на текущий символ входной строки.

может быть возвращен к уже прочитанной части входной строки, чтобы произвести повторный просмотр входной строки.

 

В начале анализа указывает на первый символ входной строки.

Начинаем строить дерево разбора для входной строки от корня, обозначенного начальным символом грамматики.

 

Если текущая вершина дерева разбора обозначена переменной грамматики, то выбираем одно из правил этой переменной и используем правую часть правила для построения дочерних вершин текущей вершины. Далее все дочерние вершины просматриваются слева направо.

 

Если текущая вершина дерева разбора терминал то сравниваем этот терминал с тем терминалом из входной строки, на который показывает указатель . Если они совпадают, то перемещаем по входной строке к следующему входному символу, а в дереве разбора переходим к следующему узлу.

 

Если терминал из текущей вершины дерева разбора и -терминал не совпадают, то – выбрано неподходящее правило для переменной. Совершаем откат, т.е. - откат по входному потоку, для переменной - выбрать другое правило и повторить попытку.

 

Пример.

- входная строка.

 

- вначале создаем ДР, состоящее из одного узла.

Правило для переменной одно. Им и воспользуемся. не перемещается.

 

- дочерние вершины просматриваем слева направо.

Лист

Совпали смещение по входной строке, переход к следующей вершине в ДР.

 

<== предыдущая лекция | следующая лекция ==>
Левая факторизация КС-грамматики | Сущность и взаимосвязь контроллинга с другими науками
Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 363; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.