Лабораторная работа № 6 Моделирование фу. Лабораторная работа 6 Тема работы Моделирование функционирования распознавателя для ll (1) грамматик
Скачать 0.58 Mb.
|
Алгоритм 6.3. Функционирование распознавателя цепочек для LL(1)-грамматикШаг 1. Помещаем в стек начальный символ грамматики S, а во входной буфер исходную цепочку символов. Шаг 2. До тех пор пока в стеке и во входном буфере останется только пустая строка либо будет обнаружена ошибка в алгоритме разбора, выполня- ем одно из следующих действий: если на верхушке стека находится нетерминальный символ А и оче- редной символ входной строки символ а, то выполняем операцию «свертка» по правилу Ахпри условии, что аFIRST(1, x), т.е. извлекаем из стека символ Аи заносим в стек строку х, не меняя содержимого входного буфера; если на верхушке стека находится нетерминальный символ А и оче- редной символ входной строки символ а, то выполняем операцию «свертка» по правилу А при условии, что аFOLLOW(1, A), т.е. извлекаем из стека сим- вол Аи заносим в стек строку , не меняя содержимого входного буфера; если на верхушке стека находится терминальный символ а, совпадаю- щий с очередным символом входной строки, то выполняем операцию «вы- брос», т.е. удаляем из стека и входного буфера данный терминальный символ; если содержимое стека и входного буфера пусто, то исходная строка прочитана полностью, и разбор завершен удачно; если ни одно из данных условий не выполнено, то цепочка не принад- лежит заданному языку, и алгоритм завершает свою работу с ошибкой. Пример 6.1. Дана грамматика G ({S, T, R}, {+, -, (, ), a, b}, P, S), с прави- лами P: 1) STR; 2) R | +TR | - TR; 3) T(S) | a | b. Построить распознаватель для строки (a+(b-a)) языка грамматики G. Этап 1. Преобразуем грамматику Gв грамматику G, не содержащую - правил: N0 = {R}; N1 = {R}, т.к. N0 = N1, то во множество 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. Получили следующую цепочку вывода: STR(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. |