Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Алгоритм 6.3. Функционирование распознавателя цепочекСодержание книги
Поиск на нашем сайте для LL (1)-грамматик Шаг 1. Помещаем в стек начальный символ грамматики S, а во входной буфер исходную цепочку символов. Шаг 2.До тех пор пока в стеке и во входном буфере останется только пустая строка e либо будет обнаружена ошибка в алгоритме разбора, выполняем одно из следующих действий: - если на верхушке стека находится нетерминальный символ А и очередной символ входной строки символ а, то выполняем операцию «свертка» по правилу А ® х при условии, что а Î FIRST (1, x), т.е. извлекаем из стека символ А и заносим в стек строку х, не меняя содержимого входного буфера; - если на верхушке стека находится нетерминальный символ А и очередной символ входной строки символ а, то выполняем операцию «свертка» по правилу А ® e при условии, что а Î FOLLOW (1, A), т.е. извлекаем из стека символ А и заносим в стек строку e, не меняя содержимого входного буфера; - если на верхушке стека находится терминальный символ а, совпадающий с очередным символом входной строки, то выполняем операцию «выброс», т.е. удаляем из стека и входного буфера данный терминальный символ; - если содержимое стека и входного буфера пусто, то исходная строка прочитана полностью, и разбор завершен удачно; - если ни одно из данных условий не выполнено, то цепочка не принадлежит заданному языку, и алгоритм завершает свою работу с ошибкой.
Пример 6.1. Дана грамматика G ({ S, T, R }, {+, -, (,), a, b }, P, S), с правилами P: 1) S ® TR; 2) R ®e | + TR | - TR; 3) T ®(S) | a | b. Построить распознаватель для строки (a +(b - a)) языка грамматики G.
Этап 1. Преобразуем грамматику G в грамматику G ¢, не содержащую e -правил: N 0 = { R }; N 1 = { R }, т.к. N 0 = N 1, то во множество P¢ войдут правила: 1) S ® TR | T;2) R® +TR | +T | -TR | -T; 3) T ®(S) | a | b.
Этап 2. Построение множеств FIRST (1, A) для каждого нетерминала А представлено в таблице 6.1.
Таблица 6.1 – Построение множеств FIRST (1, A)
Этап 3. Построение множеств FOLLOW (1, A) для каждого нетерминала А представлено в таблице 6.2.
Таблица 6.2 – Построение множеств FOLLOW (1, A)
Этап 4. Множества FIRST (1, A) и FOLLOW (1, A) для каждого нетерминала А сведены в таблицу 6.3.
Таблица 6.3 – Множества FIRST (1, A) и FOLLOW (1, A)
Грамматика G является LL (1) - грамматикой, т.к. для каждого нетерминала А, имеющего альтернативные выводы, множества FIRST (1, A) попарно не пересекаются, а для нетерминала R они также не пересекаются со множеством FOLLOW (1, R).
Шаг 5. Разбор строки (a +(b - a)) для грамматики G показан в таблице 6.4. Таблица 6.4 - Разбор строки (a +(b - a)) для грамматики G
Шаг 6. Получили следующую цепочку вывода:
S Þ TR Þ(S) R Þ(TR) R Þ(aR) R Þ(a + TR) R Þ(a +(S) R) R Þ(a +(TR) R) R Þ Þ(a +(bR) R) R Þ(a +(b - TR) R) R Þ(a +(b - aR) R) R Þ(a +(b - a) R) R Þ(a +(b - a)) R Þ(a +(b - a)).
Нисходящее дерево разбора цепочки представлено на рисунке 6.1.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2019-04-30; просмотров: 322; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.006 с.) |