Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ТА.docx
Скачиваний:
11
Добавлен:
24.09.2019
Размер:
355.83 Кб
Скачать

18. Приведение кс-грамматики (контекстно-свободной) к нфх - грамматике (нормальной форме Хомского)

Опр. КС – грамматика – G=(V,T,P,S)

V – множество переменных (переменные определяют язык – не терминалы, синтаксические категории)

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

Р – множество правил вывода, конечное (продукции, каждая из них представляет рекурсивное определение языка. Продукция состоит из переменной, определяющей продукцию – головы продукции; символа продукции «→»; конечной цепочки, состоящей из терминалов и переменных – тело продукции = способ образования цепочек языка, определяемого переменной в голове)

S – стартовый символ

Приведение КС-грамматики к НФХ – грамматике.

1) Нужно удалить все бесполезные символы (если во всех цепочках символ не используется, то он не нужен). Пусть даны: грамматика G = (V,T,P,S), язык данной грамматики (L(G))≠ и дана грамматика G1 = (V1,T1,P1,S), причем G1 строим по G.

S-одно и то же, т.к. любая грамматика порождается стартовым символом, т.к. В1 строим по G, то G1 должна порождаться тем же стартовым символом. Из грамматики G удаляются не порождающие символы и все продукции, содержащие хотя бы один из этих символов. Получим грамматику G2 = (V2,T2,P2,S).

2) Удаляем все недостижимые символы. Получим грамматику G1 . она не имеет бесполезных символов и L(G1) = L(G).

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

1) каждый символ из Т является порождающим, т.к. вместо любого символа Т можно подставить букву, а это слово, т.е. порождает цепочку из одного символа. 2) пусть А→α - некоторая продукция этой грамматики и каждый символ в α-порождающий, тогда и А - порождающий (α = ε допускается).

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

1) S-достижимый,

2) пусть А - достижимо. Тогда для всех продукций с головой А все символы тела этой продукции достижимы. Пусть А - ε-порождающая переменная (А*→ ε). Все ε - порождающие символы этой грамматики можно найти следующим образом:

- если среди продукций грамматики есть продукция А→ ε, то а- ε-порождающий

символ.

- существует В→С1С2….Ск и каждое Сi является ε- порождающим, то В – ε- порождающий (Сi -переменная).

Если G1 построена по G с помощью описанных выше алгоритмов, то язык этой грамматики G1 устроен следующим образом: L(G1) = L(G)-{ε} (т.е. тот же язык, но пустое слово никак не получишь).

Алгоритм приведения грамматики к нормальной форме Хомского:

1). для каждого терминала а, встречающегося в продукции длины ≥2 создаем новую переменную А и соответствующую ей продукцию А→ а. (А используем вместо а во всех продукциях с а длинны ≥2), следовательно, в теле каждой продукции будут либо одиночные терминалы, либо как минимум 2 переменные

без терминалов.

2) каждую продукцию вида А→В1В2…Вк (к≥3) разбиваем на группы продукций, в теле каждой только 2 переменные путем введения новых переменных:

А→В1С1, С1→В2С2, С2→В3С3, …., Ск-3→Вк-2Ск-2, Ск-2→Вк-1Вк

получим НФХ – грамматику.

Теорема: если G - контекстно-свободная (КС) грамматика с непустым языком, то существует НФХ с языком L(G1) = L(G)-{ε}

Каждая КС - грамматика имеет каноническую форму Хомского.