Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TYaP_posobie.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
951.3 Кб
Скачать

Преобразования кс-грамматик Основные понятия

Грамматики Gi и GJ называются эквивалентными, если равны порождаемые ими языки. Получение грамматики GJ, эквивалентной исходной грамматике Gi , назовём эквивалентным преобразованием грамматики Gi в GJ. Преобразование грамматики Gi в GJ выполняется применением определённых правил преобразования. Множество правил образуют систему преобразований. Система преобразований называется полной, если для любых двух эквивалентных грамматик Gi и GJ существует последовательность правил из заданной системы преобразований, результатом применения которой к грамматике Gi является грамматика GJ. Для КС-грамматик не существует полной системы преобразований, следовательно рассматри-ваемые ниже правила преобразований не образуют полную систему преобра-зований, но обычно позволяют получить грамматику, эквивалентную исходной, обладающую заданными свойствами.

Устранение лишних символов

Среди символов КС-грамматики можно выделить две группы лишних символов:

1) бесплодные нетерминалы – это нетерминалы, которые не порожда-ют ни одной терминальной цепочки. Такие нетерминалы не могут участво-вать в выводе терминальных цепочек.

2) недостижимые символы – это символы (терминалы и нетерми-налы), которые не встречаются ни в одной цепочки (терминальной или промежуточной), выводимой из начального нетерминала.

Правила, в которые входят лишние символы (в левую или правую часть правила), можно исключить из множества правил грамматики.

Поиск бесплодных нетерминалов сводится к нахождению продук-тивных нетерминалов и исключению их из множества всех нетерминалов грамматики. Терминальный или нетерминальный символ называется продуктивным (живым), если из него выводится терминальная цепочка. Любой терминальный символ продуктивный. Нетерминальный символ А будет продуктивным, если существует правило А, в котором все символы в правой части продуктивны.

Алгоритм нахождения всех продуктивных нетерминалов.

1. Принять множество продуктивных нетерминалов Р=.

2. Если существует правило А, в котором все символы в правой части продуктивны, то нетерминал А включить в множество Р.

3. Повторять п.2, пока множество Р растёт.

Поиск недостижимых символов сводится к нахождению всех достижимых символов и исключению их из множества всех нетерминалов грамматики. Терминальный или нетерминальный символ называется достижимым, если он может появиться в какой-нибудь цепочке, выводимой из начального нетерминала. Начальный нетерминал - достижимый. Терминальный или нетерминальный символ будет достижимым, если он находится в правой части правила А и А – достижимый нетерминал.

Алгоритм нахождения всех достижимых символов.

1. Принять множество достижимых символов Р={S}, где S – начальный нетерминал.

2. Если существует правило А и нетерминал А принадлежит множеству Р, то все символы правой части включить в множество Р.

3. Повторять п.2, пока множество Р растёт.

Алгоритм устранения всех лишних символов.

1. В исходной грамматике G найти все бесплодные нетерминалы и исключить правила, связанные с ними. В результате получим грамматику G’ без бесплодных нетерминалов.

2. В грамматике G’ найти все недостижимые символы и исключить правила, связанные с ними. В результате получим грамматику G’’ без лишних символов.

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

Пример устранения лишних символов.

Грамматика:

1. Sac 4. BaSA

2. SbA 5. CbC

3. AcBC 6. Cd

1. Поиск продуктивных нетерминалов.

В множество продуктивных нетерминалов Р включаем нетерминал S (правило 1) и нетерминал С (правило 6). Получаем Р={S,C} и увеличить множество Р не можем.

2. Поиск бесплодных нетерминалов.

Из множества всех нетерминалов исключаем все продуктивные и получаем множество {A,B} бесплодных нетерминалов.

3. Исключение бесплодных нетерминалов.

Исключаем правила 2, 3 и 4, т.к. они содержат бесплодные нетерминалы. Получаем грамматику:

1. Sac

5. CbC

6. Cd

4. Поиск достижимых символов.

Достижимыми символами являются S, a и c.

5. Поиск недостижимых символов.

Из множества всех символов исключаем все достижимые и получаем множество {C,b,d} недостижимых символов.

6. Исключение недостижимых символов.

Исключаем правила 5 и 6, т.к. они содержат недостижимые символы. Получаем грамматику:

1. Sac

Заметим, что в исходной грамматике все символы достижимы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]