Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Формальные языки и грамматики.doc
Скачиваний:
161
Добавлен:
01.05.2014
Размер:
1.51 Mб
Скачать

1.3. Типы формальных языков и грамматик

В теории формальных языков выделяются 4 типа грамматик, которым соответствуют 4 типа языков. Эти грамматики выделяются путем наложения усиливающихся ограничений на правила грамматики.

1.3.1. Грамматики типа 0

Грамматики типа 0, которые называютграмматиками общего вида, не имеют никаких ограничений на правила порождения. Любое правило

r = 

может быть построено с использованием произвольных цепочек   (Vт Va)*. Например,

<T><W> <W><T>  или  x<A>b<C><D> x<H><D>.

1.3.2. Грамматики типа 1

Грамматики типа 1, которые называют такжеконтекстно-зависимыми грамматиками,не допускают использования любых правил. Правила вывода в таких грамматиках должны иметь вид:

1<A>2 12,

где 1,2- цепочки, возможно пустые, из множества (Vт Va)*,символ<А> Va и цепочкаw (Vт Va)*. Цепочки1 и2остаются неизменными при применении правила, поэтому их называют контекстом (соответственно левым и правым), а грамматику - контекстно зависимой.

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

Например, грамматика:

Г1. 4:

Vт = {a, b, c, d}, Va = {<I>, <A>, <B>}

R = { <I> aA<I>,

A<I> AA<I>, AAA A<B>A, A b, b<B>A bcdA, b<I> ba }

 

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

<I> a<A><I> a<A><A><I> ab<A><I> abb<I> abba.

1.3.3. Грамматики типа 2

Грамматики типа 2называютконтектно-свободнымиибесконтекстными грамматиками (КС-грамматики или Б-грамматики). Правила вывода таких грамматик имеют вид:

<A>,

где <A> Vaи(Vт Va)*. Очевидно, что эти правила получаются из правил грамматики типа 1 при условии 1 = 2 = $.Поскольку контекстные условия отсутствуют, то правила КС-грамматик получаются проще, чем правила грамматик типа 1. Именно такие грамматики используются для описания языков программирования. Примером КС-грамматики может служить следующая:

Г1. 5:

Vт = {a, b}, Va = {<I>},

R = { <I> a<I>a,

<I>b<I>b, <I>aa, <I>bb}.

 

Эта грамматика порождает язык, который состоит из цепочек, каждая из которых в свою очередь состоит из двух частей, цепочки Vт*и зеркального отображения этой цепочки'.

L( Г5 ) = { ' | Vт+},

где Vт+- это множествоVт*без пустой цепочки. С помощью правил этой грамматики может быть построена, например, следующая цепочка:

<I>a<I>aab<I>baaba<I>abaababbaba.

1.3.4. Грамматики типа 3

Грамматики типа 3называютавтоматными грамматиками (А - грамматиками). Правила вывода в таких грамматиках имеют вид:

<A>a или<A>a<B>или<A><B> a,

где a Vт, <A>, <B>Va,причем грамматика может иметь только правила вида<A> a<B>- правосторонние правила, либо только  вида<A><B>a- левосторонние правила. Примерами автоматных грамматик могут служить правосторонняя грамматика Г1. 6и левосторонняя грамматикаГ1. 7.

Г1. 6:

Vт = {a, b}, Va = {<I>, <A>},

R = { <I> a<I>,

<I>a<A>, <A>b<A>, <A>b<Z>, <Z> $ }.

Г1. 7:

Vт = {a, b}, Va = {<I>, <A>},

R = { <I><A>b,

<A><A>b, <A><Z>a, <Z><Z>a, <Z> $ }.

 

Эти грамматики являются эквивалентными и порождают язык

L(Г7) = {a...ab...b | n,m > 0}.

Между множествами языков различных типов существует отношение включения:

{ L типа 3 } { L типа 2 }{ L типа 1 }{ L типа 0}.

Доказано, что существуют языки типа 0, не являющиеся языками типа 1, языки типа 2, не являющиеся языками типа 1, и языки типа 3, не являющиея языками типа 2.

Учитывая, что наибольшее практическое применение находят грамматики типа 2 и типа 3, дальнейшее изложение посвящается рассмотрению именно этих типов грамматик.

Соседние файлы в предмете Теория языков программирования