Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТАиФЯ(ч.2).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

1.2 Представление формальных языков с помощью грамматик

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

Если бы все языки состояли из конечного числа предложений, то не было бы проблемы синтаксиса. Но, так как язык содержит неограниченное (или довольно большое) число правильно построенных фраз, то возникает проблема описания бесконечных языков с помощью каких-либо конечных средств.

Формальная грамматика - это система правил, описывающая множество конечных последовательностей символов. Конечные последовательности (цепочки), входящие в указанное множество, называются предложениями (просто цепочками), а само множество - языком, описываемым данной формальной грамматикой. (В математике рассматриваются только формальные грамматики, поэтому иногда говорят просто - грамматика.)

Любой формальный язык представляет собой множество цепочек в некотором конечном алфавите. Для задания(описания) формального языка необходимо, во-первых, указать алфавит, т.е. совокупность объектов, называемых символами (или буквами), каждый из которых можно воспроизводить в неограниченном количестве экземпляров (подобно обычным буквам или цифрам), и, во-вторых, задать формальную грамматику языка, т.е. перечислить правила, по которым из символов строятся их последовательности, принадлежащие определённому языку, - правильные цепочки («слова», «предложения»).

В качестве базы для формального описания языков общепринята теория грамматик Н. Хомского (американский лингвист, впервые опубликовал работы по грамматике в 1956 - 1957 гг.). Рассмотрим её основы.

Пусть V - непустое конечное множество символов (элементов), называемых алфавитом. Предполагается, что термин "символ" имеет достаточно ясный интуитивный смысл и не нуждается в дальнейшем уточнении. В качестве примеров алфавитов можно рассматривать латинский алфавит, состоящий из 26 букв, или кириллицу, состоящую из 33 букв. Для записи неотрицательных целых чисел в десятичной системе счисления используется алфавит А={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, а для их записи в двоичной системе счисления используется алфавит А={0,1}. Символы алфавита в общем виде будем обозначать строчными латинскими буквами (а, b, c …).

Произвольную конечную последовательность символов  называют цепочкой в словаре V («предложение», «слово»). Одинаковые символы могут повторяться в цепочке неограниченное количество раз. Цепочки (слова) алфавита будет обозначать греческими буквами (, , ). Число символов в цепочке называют её длиной и обозначают ||. Например, если  = abcdefg, то длина  равна 7 (||=7). Цепочка нулевой длины называется пустой и обозначается символом .

Обозначим через V* множество, содержащее все цепочки в алфавите V, включая пустую цепочку . Пусть имеется алфавит V={а, b}. Тогда множество всех цепочек определяется следующим образом: V*={ ε, а, b, aa, ab, ba, bb, aaa, aab, aba, . . .}.

Языком в алфавите V называется произвольное подмножество цепочек конечной длины в этом алфавите. Пустой язык обозначается .Каждый язык в алфавите V является подмножеством множества V*.

Над языками можно производить обычные теоретико-множественные операции (теории множеств) - объединение ( ), пересечение ( ), вычитание ( - ), взятие дополнения, а также некоторые специфические операции.

Более формально цепочка символов в алфавите V определяется следующим образом:

1.  - цепочка в алфавите V;

2. если  - цепочка в алфавите V и a - символ этого алфавита, то a - цепочка в алфавите V;

3.  - цепочка в алфавите V тогда и только тогда, когда она является таковой в силу (1) и (2).

Цепочки получаются из символов алфавита (словаря) с помощью операции конкатенации (соединения). Если  и  - цепочки, то цепочка  называется конкатенацией цепочек  и .

Например, если  = ab и  = cd, то  = abcd.

Для любой цепочки  всегда  =  = .

N-ой степенью цепочки (будем обозначать n) называется конкатенация n цепочек . 0 = ; 1 = ; n = n-1 = n-1= .

Введём также две операции, обратные для конкатенации: левое деление и правое деление («вычёркивание» слева или справа).

Левым (правым) частным от деления цепочки на цепочку называется цепочка , такая, что (соответственно ). Левое частное от деления на будет обозначаться через , правое - через (левое деление - у убрать слева, правое - у убрать справа).

Например, цепочка РОКОКО есть конкатенация цепочек РОК и ОКО, цепочка ОКОРОК - конкатенация цепочек ОКО и РОК.

РОК = ОКО\ОКОРОК = РОКОКО/ОКО;

ОКО = РОК\РОКОКО = ОКОРОК/РОК;

Частных РОК\ОКОРОК, ОКОРОК/ОКО и т. п. - не существует.

Языки задаются грамматикой - системой правил, порождающих все цепочки данного языка и только их. (Под термином «грамматика» понимаем «формальная грамматика»).

Различают порождающие, распознающие и преобразующие формальные грамматики.

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

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

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

Это деление в значительной степени условно, т.к. любая распознающая грамматика по существу задаёт способ построения всех предложений (цепочек), т.е. «порождение», а порождающая грамматика позволяет по любой цепочке символов определить, является ли она предложением (т.е. правильной цепочкой данного словаря).

Таким образом, наиболее распространённым в настоящее время является класс порождающих грамматик, который, в основном, введён и рассмотрен Н. Хомским.