Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТА_конспект.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
3 Мб
Скачать
☆

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

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

Грамматика - это совокупность следующих объектов: <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 неоднозначна.

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