Построение расширенного МП-автомата.
⇐ ПредыдущаяСтр 5 из 5 Будем строить расширенный МП-автомат, который выполняет правосторонний разбор входной строки, образованной из терминалов грамматики. Стек отведем для левой части текущей сентенциальной формы. Сначала это особый магазинный символ, маркер пустого стека (обозначим #). На каждом шаге автомат по правилу грамматики замещает нетерминалом строку верхних символов стека или дописывает в вершину входной символ. Помимо единственного текущего состояния, автомат имеет одно заключительное состояние. В этом состоянии стек пуст. Вход: КС-грамматика Выход: Расширенный МП-автомат 1. Положить 2. Для каждого правила вида 3. Для каждого 4. Предусмотреть магазинную функцию для перевода автомата в заключительное состояние
Параграф 5. Нисходящие распознаватели языков. Пункт 1. Стратегия нисходящего анализа. В основе стратегии нисходящего анализа лежит левосторонний разбор строки языка. Исходной сентенциальной формой является аксиома грамматики, а целевой – заданная строка языка. На каждом шаге разбора правило грамматики применяется к самому левому нетерминалу сентенциальной формы. Может возникнуть основная проблема нисходящего анализа - неоднозначность выбора правила грамматики. Эта проблема решается привлечением группы очередных символов входной строки.
Пример 1. Дана КС-грамматика 1) Требуется выполнить нисходящий анализ строки Сначала в стек помещается аксиома 1) читается символ входной строки (терминал); 2) если в вершине стека находится такой же терминал, то он удаляется из стека; читающая головка перемещается на одну позицию вправо; шаг завершается; 3) если в вершине стека находится нетерминал, то он замещается правой частью соответствующего правила, начинающейся с прочитанного терминала; шаг завершается; 4) если во входной строке больше нет символов и стек пуст, то строка принята; анализ завершен; 5) если нет подходящего правила для нетерминала или возникла другая неопределенная ситуация, то строка не будет принята.
Процесс нисходящего анализа сведем в таблицу:
1. правила грамматики имеют вид 2. альтернативные правые части правил, определяющие один и тот же нетерминал, начинаются с разных терминалов. Первое свойство обеспечивает выбор очередного правила грамматики, а второе свойство делает этот выбор однозначным, то есть позволяет построить детерминированный распознаватель.
Пункт 2. LL(k)-грамматики. В КС-грамматиках можно выделить обширное подмножество грамматик, обладающих сходными свойствами и обеспечивающих детерминированный нисходящий разбор строк порождаемых языков. Это подмножество называют LL(k)-грамматиками, причем буквы L, L, k означают следующее:
В большинстве практических приложений можно ограничиться LL(1)-грамматиками. S-грамматики являются частным случаем LL(1)-грамматик. В LL(1)-грамматиках головными символами в правых частях правил наряду с терминалами могут быть и нетерминалы. КС-грамматику называют LL(1)-грамматикой, если не пересекаются множества направляющих символов для правил, определяющих один и тот же нетерминал грамматики. Обозначим Множество
Отсюда следует, что Множество Эта запись означает, что Проверку принадлежности КС-грамматики классу LL(1)-грамматик можно выполнить на основе определения LL(1)-грамматики, то есть путем вычисления пересечения множеств направляющих символов для альтернативных правых частей правил нетерминала. Кроме того имеются признаки, по которым достаточно просто установить, что заданная КС-грамматика не является LL(1)-грамматикой. К таким признакам относятся:
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|