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

§ 4. Формальные грамматики

Вернемся к описанию языков. Считается, что предложе­ниями языков могут быть любые конструкции, описанные в предыдущем параграфе. Уже одним этим расширяется понятие языка. Как уже сказано, синтаксис языка не дол­жен зависеть от его семантики. Термин «предложение» сохраним и для формальных языков. Мы не накладываем запретов ни на какие формы синтаксиса, но для того чтобы всегда быть уверенными в том, что мы располагаем именно формальным языком, потребуем, чтобы существовала (т. е. могла бы быть построена) формальная грамматика, имею­щая определенную каноническую форму. Американский лингвист А. Хомский предложил следующую форму грам­матики. Для описания синтаксиса языка-объекта задается алфавит букв этого языка, затем алфавит вспомогательных символов, называемых нетерминальными (буквы первого алфавита при этом называют терминальными символами), затем — конечный набор синтаксических правил и, наконец, однобуквенное слово, образованное из нетерминального сим­вола. Условно это передают в виде обозначения (А, С, R, σ), где А — алфавит языка-объекта, С — нетерминальный ал­фавит, R — набор правил, σ — указанная выше нетерми­нальная буква.

Каждое правило в грамматике Хомского имеет вид подстановки Р → Q, в которой Р и Q — слова в алфавите АС (получающемся соединением алфавитов А и С). Под­становки, применяемые А. Хомским, не являются марков­скими подстановками (см. § 3 гл. 4) и вообще не являются однозначными операциями преобразования конструкций. Объектом преобразования для таких подстановок могут быть только слова, но применение подстановки допускает произвол. Если преобразуемое слово имеет несколько вхож­дений слова Р, то подстановка допускает замену любого из этих вхождений правой частью формулы.

Так как, вообще говоря, число вхождений Р в разные слова неограниченно, то можно считать, что каждая под­становка представляет собой бесконечное множество операций замены словом Q: 1) первого вхождения P; 2) второго вхождения Р; ...; п) п-го вхождея P и т.д.Выполнение подстановки заключается в выполнении произвольной операции из перечисленных. Однако подстановку можно рассматривать и как конечное множество определенных операций, выполняемых в различных сочетаниях. Дальнейшее изучение подстановок мы производить не станем, поскольку эта проблема для нас особого интереса не представляет. Разъясним только способ порождения формального языка с помощью грамматики Хомского. Предложение языка получим, если применим к однобуквенному слову σ одну из подстановок. Если результат не содержит нетерминальных символов, предложение языка уже получено; если же содержит, то применяем опять одну из подстановок, и т.д. Говорят, что предложение языка выводится из начального слова σ с помощью правил, входящих в состав R, - набора синтаксических правил грамматики Хомского. Аналогично выводится другое предложение и т.д. Грамматики Хомского нас не удовлетворяют по друм причинам. Во-первых, их возможности слишком ограничены, так как с их помощью можно построить только язык, предложениями которого являются слова. Во-вторых, способ порождения языка, избранный Хомским, является слишком искусственным и для нас непривычным. Ни одна знакомая нам грамматика ни одного из естественных языков не имеет вида грамматики Хомского. Обычно предложения языка строят из более простых конструкций и в конце концов все предложения получаются из некоторых элементарных конструкций, называемых морфемами. Остановимся и мы на такой форме порождающих грамматик.

Предположим, что заданы алфавиты букв и связей и знак оболочек, из которых будут построены предложения языка-объекта, т.е. считаем, что известен класс (A, B, Σ) конструкций, с которыми нам придется иметь дело при построении языка. Далее, допустим, что задано конечное число простейших конструкций, множество которых назовем базой языка и обозначим буквой Б. Элементы этого множества называются морфемами. Предположим, что задан алфавит С символов, с помощью которых записываются синтаксические правила. Эти правила у нас всегда будут иметь вид цепочек из символов, т.е. слов. Поэтому специально оговаривать наличие алфавита связей, нужного для записи правил, мы не станем. Алфавит С должен содержать символы четырех видов, попарно различные между собой и не совпадающие с символами, участвующими в конструкциях класса (A, В, Σ). Символы первого вида применяются как индивидуальные имена морфем. Символы второго вида будем применять в качестве групповых имен получаемых конструкций. Символы третьего вида играют роль функциональных знаков и являются именами операций. Наконец, символы четвертого вида играют вспомогатель­ную роль: это скобки, запятые, знаки равенства и знаки «точка с запятой» или заменяющие их символы.

Каждое синтаксическое правило будет иметь либо вид

,

где η — имя морфемы, ξ — групповое имя, либо вид

,

где ξ — групповое имя, ξ1, ξ2, …, ξr —- групповые имена или имена морфем, f — функциональный знак, r — ранг операции, именем которой является f.

Рангом операции называется число величин, которые участвуют в качестве исходных данных при выполнении операции. Например, среди известных нам операций lg x — операция первого ранга, sin х и — тоже; х + у и х : у — операции второго ранга. Можно считать, что выражение x+y*z задает некоторую операцию третьего ранга.

Будем считать, что грамматика задана, если заданы все перечисленные алфавиты, база языка и набор синтакси­ческих правил описанного вида, а также выделено одно из групповых имен (буква), играющее роль группового имени всех конструкций, являющихся предложениями языка. Такую грамматику будем называть индуктивной порож­дающей грамматикой, в отличие от грамматик, подобных грамматикам Хомского, в которых предложения языка выводятся из слова о и которые поэтому можно назвать дедуктивными.

Итак, индуктивная грамматика задана, если указан класс конструкций (А, В, Σ), подмножеством которого является определяемый язык, база Б языка, являющаяся конечным подмножеством этого класса, алфавит С для записи синтаксических правил, набор R синтаксических правил и буква σ, являющаяся групповым именем пред­ложений языка.

Порождение предложений языка осуществляют так: выбирают несколько формул, в правых частях которых стоят имена морфем. С помощью этих правил придают значение некоторым групповым именам (стоящим в указан­ных формулах слева от знака равенства). Затем произвольно выбирают формулы, для которых групповые имена, стоящие в правых частях, уже имеют значения; над этими значениями выполняют операции, указанные в формулах; процесс продолжают до тех пор, пока в левой части приме­няемой формулы не окажется буква σ. Полученная при этом конструкция, являющаяся значением имени σ, яв­ляется одним из предложений языка. Процесс может на этом закончиться (если мы того желаем) или продолжиться далее, если имеется правило, в правой части которого при­сутствует буква σ. Тогда он будет продолжаться до тех пор, пока в левой части применяемой формулы не встретится снова символ σ, и т. д.

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

Теорема. Любой язык, порождаемый грамматикой Хомского, является формальным языком (без учета семан­тики), т. е. для такого языка всегда можно построить индуктивную порождающую грамматику.

Интересно отметить следующую теорему.

Теорема. Конечное множество различных между со­бой предложений естественного языка является формальным языком (без учета семантики), т. е. для него можно по­строить грамматику индуктивного типа.

Доказательство этой теоремы очень просто, а ее резуль­тат имеет большое практическое значение. Приведем это доказательство. Предположим, что нам задано конечное множество предложений естественного языка, например, в виде списка. Пусть это будут Р1, Р2, … , PN. Просматри­вая эти предложения, мы можем отобрать все буквы, при­сутствующие в них; в число букв в общем случае попадут и знаки препинания, и пробелы. Перечень этих букв будет искомым алфавитом А. Связи следования составят алфавит В. Алфавит С образуем из букв «;», «=», «а» и всех симво­лов Р1, Р2, … , PN (считаем, что они отличаются от букв в А, друг от друга и от букв «;», «=», «а»). Теперь напишем N синтаксических правил:

σ = Р1; σ = Р2; …; σ = PN.

Базой считаем совокупность предложений, обозначен­ных символами Pi. Читатель видит, что индуктивная грам­матика построена и, следовательно, конечное множество предложений естественного языка является формальным языком (без учета семантики).

Прием построения формального языка путем составле­ния перечня предложений является простейшим случаем так называемой формализации естественного языка. При.! этом, отбирая предложения, необходимо следить за тем, чтобы каждое из них обладало единственным смыслом; мы, получим формальный язык, наделенный семантикой.

Обратим внимание на сам способ задания языка, приме­ненный в данном случае: язык представлен в виде перечня предложений, оформленных как список. Такой список яв­ляется частным случаем таблицы. Возможны более сложные таблицы, задающие формальные языки. Об одной из них — тезаурусе — мы расскажем в следующем параграфе.

Мы познакомились с табличной формой задания фор­мального языка. Табличная форма с успехом используется для построения формальных языков, применяемых при описании исходных данных многих задач, решаемых на ЭВМ (в тех случаях, когда эти исходные данные не являются числами).