
- •Автор: старший преподаватель кафедры Прикладной Математики и Информатики им. Ю.В.Кожевникова Сергей Викторович Сотников.
- •2.3. Общие методы синтаксического анализа 81
- •1. Класс контекстно-свободных языков (V-3.0 28.02.2009)
- •1.1. Свойства кс-языков
- •1.1.1. Теорема Огдена. Лемма о разрастании кс-языков
- •1.2. Приведение кс-грамматик
- •Удаление недостижимых символов;
- •Удаление бесплодных (бесполезных) символов;
- •Удаление цепных правил;
- •1.2.5. Удаление цепных правил
- •1.2.5.1. Алгоритм удаления цепных правил
- •1.3. Нормализация грамматик (Приведение кс-грамматик к нормальной форме)
- •1.3.1.1. Алгоритм преобразования к нормальной форме Хомского
- •1.3.2.1. Устранение левой (правой) рекурсии
- •1.3.2.1.1. Алгоритм устранения левой рекурсии
- •1.3.2.2. Преобразование нелеворекурсивной приведенной кс-грамматики к нормальной форме Грейбах
- •1.3.2.2.1. Алгоритм преобразования нелеворекурсивной приведенной кс-грамматики к нормальной форме Грейбах
- •1.3.2.3. Другой способ преобразования кс-грамматики к нормальной форме Грейбах (Метод Розенкранца)
- •1.3.2.3.1. Алгоритм метода Розенкранца
- •1.4. Автоматы с магазинной памятью (mп-автоматы)
- •1.5. Соотношения между различными мп-автоматами
- •1.5.1. Алгоритм построения мп-автомата по расширенному мп-автомату
- •1.5.2. Алгоритм построения расширенного мп-автомата по мп-автомату
- •1.5.3.1. Алгоритм построения по мп-автомату мп-автомата, допускающего цепочки опустошением магазина
- •1.5.3.1. Алгоритм построения мп-автомата по мп-автомату, допускающего цепочки опустошением магазина
- •1.6. Эквивалентность мп-автоматов и кс-грамматик
- •1.6.1. Алгоритм построения мп-автомата по произвольной кс-грамматике
- •1.6.2. Алгоритм построения расширенного мп-автомата по произвольной кс-грамматике
- •1.6.3. Алгоритм построения кс-грамматики для произвольного мп-автомата
- •1.6.4. Алгоритм построения кс-грамматики для произвольного расширенного мп-автомата
- •2. Методы трансляции
- •2.1. Теория перевода
- •2.1.1. Формализмы, используемые для определения перевода
- •2.1.1.1. Перевод и семантика
- •2.1.1.2. Схемы синтаксически управляемого перевода ( су-схемы)
- •2.1.1.3. Конечные преобразователи
- •2.1.1.4. Преобразователь с магазинной памятью
- •2.1.1.5. Эквивалентность простых су-схем и преобразователей с магазинной памятью
- •2.1.1.5.1. Алгоритм построения мп-преобразователя для простой су-схемы
- •2.1.1.5.2. Алгоритм построения простой су-схемы по мп-преобразователю
- •2.1.2. Лексический анализ
- •2.1.2.1. Непрямой лексический анализ
- •2.1.2.2. Прямой лексический анализ
- •2.1.2.3. Программное моделирование конечных преобразователей
- •2.1.3. Синтаксический анализ
- •2.1.3.1. Определение разбора
- •2.2. Общие методы синтаксического анализа
- •2.2.1. Синтаксический анализ с возвратами
- •2.2.1.1. Алгоритм нисходящего разбора с возвратами
- •2.2.1.2. Проблемы алгоритм нисходящего разбора с возвратами
- •2.2.1.3. Алгоритм восходящего разбора с возвратами
- •Синтаксический анализ с возвратами
- •2.3. Общие методы синтаксического анализа универсальные методы синтаксического анализа. Табличные методы синтаксического анализа Алгоритм Кока-Янгера-Касами
- •Алгоритм разбора Кока-Янгера-Касами
- •Алгоритм нахождения левого разбора по таблице разбора
- •Алгоритм Эрли
- •Алгоритм разбора Эрли
- •Алгоритм построения правого разбора по списку разбора
Алгоритм нахождения левого разбора по таблице разбора
Вход: 1. КС-грамматика в нормальной форме Хомского без пустых правил (ВСЕХ!!!) и входная цепочка . Предполагается, что правила из занумерованы числами .
2. Таблица разбора , построенная для цепочки .
Выход: Левый разбор цепочки или сигнал – «ошибка».
Метод:
Опишем рекурсивную
процедуру
,
порождающую левый разбор, соответствующий
выводу
.
Делаем проверку: если , то и переходим к шагу 2, в противном случае, если
, выдаем сигнал – «ошибка».
Вызываем процедуры
. перед вызовом процедуры положим
.
Если и правило
имеет номер , то
.
Пусть
и
. Пусть это правило имеет номер (если правил несколько, то возьмем любое, например, с наименьшим номером). Тогда выдать номер , т.е. и выполнить
, а затем
.
Пример №1
Задание.
Пусть задана грамматика в нормальной форме Хомского с правилами
и пусть - входная цепочка. Также задана таблица разбора вида
|
1 |
2 |
3 |
4 |
5 |
1 |
|
|
|
|
|
2 |
|
|
|
|
|
3 |
|
|
|
|
|
4 |
|
|
|
|
|
`5 |
|
|
|
|
|
Решение.
Пронумеруем правила.
Выполним первый шаг алгоритма. Делаем проверку. Так как , то переходим ко второму шагу алгоритма.
На втором шаге
назначаем
и вызываем процедуру
.
,
.
:
,
:
,
:
,
:
,
:
,
:
,
:
,
:
,
Домашнее задание: При определении начать рассмотрение с максимального номера.
Домашнее задание: При выборе номера правила из нескольких выбирают максимальный.
Алгоритм Эрли
Алгоритм работает следующим образом.
Пусть
– КС-грамматика и
- входная цепочка. Объект вида
назовем ситуацией к цепочке
,
если
- правило из
и
.
Точка «
»
между
и
является метасимволом, для которого
имеет место условие
.
Число
может быть любым целым числом от нуля
(в этом случае точка – первый символ)
до
(в этом случае она последний символ.
Примечание. Если правило имеет
вид
,
то ситуация будет такой:
).
Для каждого
построим такой список ситуаций
,
что
тогда и только тогда, когда для некоторых
и
существуют выводы
и
.
Таким образом, между второй компонентой
ситуации и номером списка, где она
появляется, заключена часть входной
цепочки, выводимая из
.
Другие условия, налагаемые на ситуацию,
просто гарантируют возможность применения
правила
в выводе некоторой входной цепочки,
совпадающей с
до позиции
.
Последовательность списков
будем называть списком разбора для
входной цепочки
.
Заметим, что
принадлежит
тогда и только тогда, когда в
есть ситуация вида
.