Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
основы информационных технологий.doc
Скачиваний:
389
Добавлен:
15.02.2016
Размер:
13.76 Mб
Скачать

Основные понятия теории формальных языков

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

Алфавитом называется конечное непустое множество знаков. Обычно подразумевается, что это множество линейно упорядочено. Условимся обозначать алфавиты символом . Наиболее часто используются следующие алфавиты.

  1. - бинарный, или двоичный, алфавит, состоящий из двух знаков: 0 и 1.

  2. - множество строчных букв английского алфавита.

  3. Множество ASCII-символов или множество всех печатных ASCII-символов.

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

  5. Алфавит также служит для записи неотрицательных целых чисел в шестнадцатеричной системе счисления.

  6. Алфавит позволяет записывать арифметические выражения над целыми числами.

Следует отметить, что алфавит содержит 10 десятичных цифр т. е..

Слово или цепочка - это конечная последовательность знаков некоторого алфавита. Например, 01101 - это цепочка в бинарном алфавите . Цепочки 15903 и 15df10 являются цепочками в алфавитеисоответственно.

Пустая цепочка - это цепочка, не содержащая ни одного символа. Эту цепочку, обозначаемую е, можно рассматривать как цепочку в любом алфавите.

Часто бывает необходимо или удобно классифицировать слова по их длине, т.е. по числу позиций, которые занимают знаки в слове. Например, слово 01101 имеет длину 5. Обычно говорят, что длина цепочки - это число знаков в ней. Это определение широко распространено, но не вполне корректно. Так, в цепочке 01101 всего 2 символа, но число позиций в ней - пять, поэтому она имеет длину 5. Все же следует иметь в виду, что часто пишут "число знаков", подразумевая "число позиций".

Длину некоторой цепочки обычно обозначают. Например,, а.

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

Рассмотрим примеры такой записи независимо от алфавита, т.е.- единственное слово длины 0. Дляи так далее. Отметим, что междуиесть небольшое различие. Дело в том, чтоесть алфавит, и его элементы 0 и 1 являются символами, аявляется множеством слов, и его элементы - это слова 1 и 0, каждое длиной 1. Мы не будем вводить разные обозначения для этих множеств, полагая, что из контекста будет понятно, является {0,1} или подобное ему множество алфавитом или же множеством цепочек.

Множество всех слов над алфавитом принято обозначать. Так, например. По-другому это множество можно записать в виде

Множество всех непустых слов в алфавите обозначают через. Таким образом, имеют место следующие равенства:

Конкатенация слов. Пусть и- слова. Тогдаобозначает их конкатенацию (соединение), т.е. слово, в котором последовательно записаны словаи. Более строго, если- слово изсимволов:, а- слово изсимволов, то- это слово длины,.

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

Пусть и. Тогда, аи, следовательно,.

Для пустого слова и любого словасправедливы равенства. Таким образом,является единицей (нейтральным элементом) относительнооперации конкатенации, поскольку результат ее конкатенации с любым словом дает то же самое слово (аналогично тому, как 0, нейтральный элемент относительно сложения, при сложении с любым числом дает число). Описанные выше свойстваоперации конкатенации означают, что множество всех слов является (свободным)моноидом относительно операции конкатенации [29].

Если , тоназывается началом, илипрефиксом, слова , а- окончанием, илипостфиксом, слова .

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

На рис.6.3 изображен фрагмент словарного универсума для случая, когда алфавит состоит из двух знаков, то есть .

Рис. 6.3. Фрагмент словарного дерева (универсума) для алфавита {0, 1)

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

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

Таким образом, из процедуры построения дерева следует, что ребром в дереве соединяются только те вершины, которым соответствуют слова, отличающиеся по длине на 1. При этом более длинное слово является конкатенацией более короткого слова и буквы, помечающей ребро. Ясно также, что любое слово , соответствующее вершине, которая лежит на пути из корня дерева к вершине, соответствующей слову, является пре-фиксом слова, то есть,.

Рассмотренные выше понятия и примеры позволяют сформулировать точное определение формального языка. Пусть - некоторый фиксированный алфавит. Множество слов, каждое из которых принадлежит, называют формальным языком. Иными словами, если- алфавит и, то- это язык надили в. Отметим, что язык вне обязательно должен содержать цепочки, в которые входят все символы. Поэтому если известно, чтоявляется языком в, то можно утверждать, что- это язык над любым алфавитом, содержащим.

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

Существует, однако, множество других языков. Приведем несколько примеров.

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

Множество цепочек, состоящих из 0 и 1 и содержащих поровну тех и других: .

Множество двоичных записей простых чисел: .

Множество всех правильных скобочных выражений,.

- язык для любого алфавита .

- пустой язык в любом алфавите.

\{\varepsilon\} - язык, содержащий одну лишь пустую цепочку. Он также является языком в любом алфавите. Заметим, что ; первый не содержит вообще никаких цепочек, а второй состоит из одной цепочки.

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

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

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