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

Автоматы, языки и грамматики.

Язык – это совокупность правил, построенных конструкций (предложение).

Грамматика -это совокупность следующих объектов: <Vт,Vn,I,R>=G

Vт– словарь терминальных символов, которые состоят из основных символов языка, к которым относятся буквы, цифры, знаки и неделимые конструкции языка.

Vт={a,b,…,z}

Vn– словарь нетерминальных символов, используемый для обозначения части конструкций языка.

Vn={A,B,…,Z}

I– начальный символ грамматики, является элементом нетерминального словаря.

I € Vn

R– множество порожденных правил вида

φ ψ1, где φ и ψ – цепочки символов, которые относятся к полному словарюVТиVnопределенные.

V = Vт v Vn

В φ входит хотя бы один нетерминальный символ

Vт* - множество конечных цепочек, построенных из терминальных символов.

V* - множество цепочек, построенных из терминалов и нетерминалов.

α , β,φ,ψ€V*- конечные цепочки, построенные из символов общего словаря. Порождающее правило определяет подстановку, при котором последовательностьφзаменяется на последовательностьψ.

Пусть есть R:φψи есть цепочка

ώ1 = ξ1φ ξ2

ώ2 = ξ1ψξ2

ξ1ξ2 €V* - цепочки

Тогда говорят, что ώ2непосредственно выводится из непосредственно выведенной из ώ1и обозначается

ώ1 => ώ2 или

n

ώ1 => ώ2

Предположим, что есть множество цепочек:

Ω = {ώ1 , ώ2 , ώ3 , … , ώn}

ώ1 => ώ2

ώ2 => ώ3

ώn-1 => ώn и обозначается

n

ώ1 => ώ2

Множество конечных цепочек, которые выводятся из начального символа грамматики и которые представлены только терминальными символами называются языком порождаемой грамматикой. L(G) = { ώ : ώ €Vт* &I=> ώ }

Рассмотрим примеры грамматик и языков:

  1. G1

Vт = {a , b , c}

I

Vn = {I}

R = {Iabc}

L(G1) = {(abc)}

  1. G2

Vт = {a , d , c}

I

Vn = {I , B , C}

R = {Iab , BCd , BdC , C c}

I => ab => aCd => acd

=> adC => adc

L(G2) = {(acd) , (adc)}

  1. G3

Vт = {a , b , e}

I

Vn = {I , A}

R = {IaAb , aAaaAb , Ac}

I => aAb => ab

I => aAb => aaAbb => aaaAbbb => aaabbb

L(G3) = {(anbn) n>=1}

  1. G4

Vт = {a , b}

I

Vn = {I , A}

R = {IaA , AbA}

I => aA => abA => abbA => …

Грамматика не порождает цепочек, содержащих только нетерминальные символы, следовательно язык не порождающий цепочек, следовательно язык пустой.

Чтобы язык был не пуст в нем должно быть:

  1. хотя бы одно правило вида:

η  w , w € Vт*

*

  1. I => η

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

Пример:

Vт = {a , b}

Vn = {I , A}

I

R = {I => aAb , A  aAb}

Это синтаксический разбор цепочки. Порожденная цепочка представляет собой конечные вершины дерева, которые выписываются при обходе вершин дерева против часовой стрелки. Две грамматики называются эквивалентными, если они порождают одинаковые языки.

G3иG5– эквивалентны.

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

G6:

Vт = {a , b , с, d}

I

Vn = {I , A , B}

R = {IAB , Aa , Aac , Bb , Bcb}

I => AB => acB => acb

I => AB => AcB => acb

Данная цепочка неоднозначна, следовательно G6неоднозначна.