Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Теория_формальных_грамматик.docx
Скачиваний:
79
Добавлен:
16.03.2015
Размер:
81.14 Кб
Скачать

Тема 3: Эквивалентные преобразования грамматик.

    1. Преобразования автоматных грамматик к вполне детерминированной форме.

    2. Исключение тупиковых правил.

    3. Обобщённые КС-грамматики. Приведение грамматик к удлиняющей форме.

    4. Декомпозиция правил КС-грамматик.

    5. Устранение левой рекурсии. Левая факторизация.

    1. Преобразования автоматных грамматик к вполне детерминированной форме.

Две грамматики называются эквивалентными, если они порождают один и тот же язык. Как факт, примем следующую теорему: не существует алгоритма, определяющего эквивалентность или неэквивалентность двух грамматик. Тем не менее, существуют преобразования, приводящие к эквивалентной грамматике. Критерием преобразования являются:

  1. Приведение к детерминированной форме.

  2. Устранение правил, не приводящих к терминальным цепочкам.

  3. Уменьшение вывода за счёт увеличения количества правил и удаление пустых цепочек.

Теорема: для любой автоматной грамматики существует эквивалентная ей грамматика во вполне детерминированной форме.

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

  1. A  a,F’: A  aF’

Второй шаг аналогичен алгоритму приведения к детерминированной форме конечных автоматов.

Если в исходной грамматике имеется правило: «SaA1|…|aAn», то в результирующей грамматике добавляется правило вида: <S>a<A1…An>,AiaBj, <…Ai…>a<…Bj….>.

Процесс построения новых нетерминалов завершается после рассмотрения нетерминалов исходной грамматики и анализа всех вновь появившихся нетерминалов.

Если цепочка принадлежит языку, порождаемому одной грамматикой, она будет принадлежать и языку, порождаемому другой грамматикой:

a € L (G1); a € L (G2)

a € L (G2); a € L (G1)

a = a1…an.

Sa1Aa2…AanF.

<S>a1<A1>…<An>, a € L (G2).

Пример:

S  aB|aC|bB|bS|c

B  cC|c

CaS|a|c

Грамматика находится не во вполне детерминированной форме, так как имеются разветвления состояний.

Добавляем предконечное состояние:

S aB|aC|bB|bS|cF’

B cC|cF’

C aS|aF’|cF’

F’  ⊥F

Перевод:

<S> a<BC>|b<BS>|c<F’>

<B>  c<CF’>

<C> a<SF’>|c<F’>

<F’> ⊥<F>

<BC>  c<CF’>|a<SF’>

<BS>  c<CF’>|a<BC>|b<BS>

<CF’>  a<SF’>|c<F’>|⊥<F>

<SF’>  a<BC>|b<BS>|c<F’>|⊥<F>

Переименовываем:

<S> - S

<F> - F

<F’> - F’

<BC> - A

<BS> - B

<CF’> - C

<SF’> - D

Решение:

S  aA|bB|cF’

F’  ⊥F

A  cC|aD

B  cC|aA|bB

C  aD|cF’|⊥F

D  aA|bB|cF’|⊥F

    1. Исключение тупиковых правил.

Правила, не приводящие к терминальным цепочкам, называются тупиковыми. Различают тупики внешнего типа, внешнего типа и циклические тупики внешнего и внутреннего типа.

Правила вида: «AaBb» называются тупиком внешнего типа, если не существует ни одного правила для нетерминалаB: «Bb1».

Правила вида: «Aj» называются тупиком внутреннего типа, если не существует ни одного правила для нетерминалаB: «BaAb», по которому можно попасть внутрьA.

B

A

S

C

F

AB– внешний тупик,CA– внутренний.

A0  a0A1b0

A1  a1A2b1 – циклический тупик.

Эта же совокупность правил называется циклическим тупиком внутреннего типа, если ни для одного Aiне существует правила, по которому в этот нетерминал можно попасть.

Теорема: для любой КС-грамматики существует эквивалентная ей грамматика беступиковых правил.

Для устранения тупиков циклического типа строится множество нетерминалов, не являющихся тупиками…

  1. X0 = VT – множество нетерминалов.

  2. X1= {A|Aa,a€X0} – терминалы, из которых можно получить нетерминальную цепочку не более чем за один шаг.

  3. Xi= {A|Aa,a€X0vXk},k= 0…i,k€v- терминалы, из которых можно получить нетерминальную цепочку не более чем заi-шагов.

Так как множество нетерминалов любой грамматики конечное, то существует такой номер I, что на некотором шагеXI=XI+1;

Все нетерминалы, вошедшие в XI– «хорошие». Не вошедшие исключаются вместе с правилами, в которые они входят.

Для полученной грамматики выполняется второй шаг алгоритма, исключающий тупики внутреннего типа и циклические тупики внутреннего типа.

  1. Y0= {S} – нетерминалS, «хороший».

Y1 = {A|S  a, a € Y0}

… … … … …

Yi = {A|B  aAф, B € v Yk}, k = 0…i-1, k € v

Yi– множество нетерминалов, в которые можно попасть не более чем заiшагов.

Все нетерминалы, не попавшие в YIявляются тупиками внутреннего типа или циклическими тупиками внутреннего типа, и из грамматики исключаются.

Пример:

SaA|cC|bD|qP|kT

A  cC

C  k

T  m

D  bT|fK

P  cR

R  dK

B  dQ|m

Q  pB|rB

Решение:

  1. X0 = VT

  2. X1 = {C,T,B}

  3. X2= {C,T,B,S,A,D,Q} // входят только множества, в которых есть один или два нетерминала из предыдущих множеств (выше).

  4. X3 = {C,T,B,S,A,D,Q}

Таким образом, вычёркиваем «qP» из 1 строчки, а также множестваP,RиK.

  1. Y0 = {S}

  2. Y1 = {S,A,C,D,T}

  3. Y2 = {S,A,C,D,T}

B,Q– совокупность правил, составляющих циклический тупик внутреннего типа. Их из грамматики исключаем.

Получаем беступиковую грамматику.

    1. Обобщённые КС-грамматики. Приведение грамматик к удлиняющей форме.

Правило вида Aε называются аннулирующими.

Грамматика с аннулирующими правилами является обобщённой.

Теорема: для любой обобщённой грамматики существует эквивалентная ей грамматика с не более чем одним обобщённым правилом.

Шаг 1: определение принадлежности пустой цепочки языку и построение множества нетерминалов, из которых за некоторое количество шагов можно получить пустую цепочку.

X0 = {ε}

X1 = {A|A  ε}

Xi = {A|A  a, a € v Xk}, k = 0…i-1, k € v

Если S€XI, то пустая цепочка принадлежит языку.

В таком случае Sзаменяется наS1и добавляется правило:SS1|ε.

Если в грамматике имеются правила вида: A0a0A1a1A2…Anan, то в грамматику добавляются следующие правила:

A0  a0a1A2…Anan,

A0  a0A1a1a2…Anan,

A0a0a1a2an, то есть рассматриваются все случаи исчезновения.

iε.

Пример: <число> <знак><целая часть>.<дробная часть>

<знак> +|-| ε

<целая часть> <целая часть><цифра>| ε

<дробная часть> <целая часть>

<цифра> 0|…|9

Решение:

X0= { ε }

X1= {<знак>,<целая часть>}

X2= {<знак>,<целая часть>,<дробная часть>}

X3= {<знак>,<целая часть>,<дробная часть>}

X2=X3.

Правило 1: перебор всех вариантов исчезновения.

<число> <знак><целая часть>.<дробная часть>|<целая часть>.<дробная часть>|<знак><дробная часть>|<знак><целая часть>|.<дробная часть>|<целая часть>.|<знак>.|.

Правило 2:

<знак> +|-

<целая часть> <целая часть><цифра>|<цифра>

<дробная часть> <целая часть>

<цифра> 0|…|9

Рассмотренный алгоритм является алгоритмом о приведении фрагмента грамматики к неукорачивающей форме.

Правило вида: «Из нетерминала выводится терминал» называется цепным.

Теорема о приведении грамматик к неудлиняющей форме: для любой контекстно-свободной грамматики существует эквивалентная ей грамматика без цепных правил.

Доказательство: если из грамматики выводится правило: «AB(A/=S)», тогда во всех правилах, гдеAприсутствует в правых частях, делают заменуAнаB: «CaAb–CaBb».

Если из грамматики выводится правило: «AB(A=S)», и имеется группа правил:Ba1|…|an, замена правила наSa1|…|an, и удаление правила «AB» является эквивалентным преобразованием.

Грамматика называется приведённой, если в ней отсутствуют тупики, аннулирующие и обобщённые правила.

    1. Декомпозиция правил КС-грамматик.

Лемма: если в КС-грамматике существует правило вида: «YaXb» и «Xj», то грамматика, в которую добавляется правило: «G2= (VN,VT,S,R,U(Yajb))» эквивалентна исходной.

Доказательство: если a€L(G1), тоa€L(G2). С другой стороны, еслиa€L(G2) и при её выводе не участвуют правила: «Yajb», тоa€L(G1). Если правила «Yajb» и «Xj» используются при выводе цепочки правил, то их замена позволит вывести цепочку в грамматикеG. Значитa€L(G1), иa€L(G2), аG1 = G2.

Теорема.

Если в грамматике имеется группа правил:

G1: {YαXβ,Xy1…Xyn}

То замена их на правила такого вида:

{Yαy1β,Yαynβ;Xy1…Xyn}

Является ээквивалентным преобразованием.

X/=S,Xy1…Xyn

Доказательство производится многократным применением леммы.

Теорема об исключении внешнего правила:

Если в грамматике имеется группа правил:

{Yα11, … ,Yαnn,Xy}

То замена их на правила такого вида:

{Yαy1β1,Yαynβn;Xy}

Является ээквивалентным преобразованием.

При этом если X/=S, и других правилXв правых частях нет, правилоXyиз грамматики можно удалить.

Доказательство производится многократным применением леммы.

Теорема о декомпозиции правил грамматики:

Замена группы правил вида:

{Yα11;Xy1}

{Yαnn;Xyn}

На группу правил:

{Yα1y1β1;Yα1ymβ1}

{ Yαny1βn;Yαnymβn}

Является эквивалентным преобразованием, если X/=Sи других правил сXв левых и правых частях правил вывода нет.

Доказательство производится многократным применением леммы.

<Идентификатор> <Буква> | <Буква> <Идентификатор 1>

<Идентификатор 1> <Буква> <Идентификатор 1>| <Цифра> <Идентификатор 1> | <Буква>| <Идентификатор 1>

<Буква> a|…|z

<Цифра> 0|…|9

Грамматика включает 42 правила. Выполним декомпозицию относительно нетерминала «Буква» и «Цифра».

<Идентификатор> a|…|z|a<Идентификатор 1> |…|z<Идентификатор 1>

<Идентификатор 1> a|…|z|0|…|9

3.5. Устранение левой рекурсии и левая факторизация.

Для любой КС-грамматики существует эквивалентная ей грамматика без левой рекурсии.

A  Aαi, i=(1,n)

A  βj, j=(1,m)

Левую рекурсию на правую:

Aβj<списокA>

<список A>αi<списокA> | ε

Пример:

<Идентификатор> <Буква> | <Идентификатор><Буква> | <Идентификатор><Цифра>

<Идентификатор> <Буква><Идентификатор 1>

<Идентификатор 1> <Буква><Идентификатор 1> | <Цифра><Идентификатор 1> | ε

Если в грамматике имеется группа правил:

Aαβ1|…|αβn, то их преобразование на правила вида:

AαB

Dβ1|…|βnявляется левой факторизацией.