Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теория вычислительных процессов и структур. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
является множество X Y, элементами которого являются упорядо­ченные пары (x, y) для всех возможных x X и y Y.
Таким образом, применяя операцию конкатенации к любой па­ре цепочек из множества A*, мы получим в результате цепочку, также принадлежащую множеству A*.
3. Отсутствие коммутативности: γ • В ≠ В • γ.
4. Пустая цепочка ε является нейтральным («единичным»)
элементом:
ε • В = В • ε = B.
5. Длина конкатенации двух цепочек равняется сумме длин
этих цепочек:
|γ • В| = |γ| + |В|.
Из общей алгебры известно, что множество с заданной на нем
ассоциативной бинарной операцией называется полугруппой. Если по- лугруппа включает нейтральный элемент, то она называется моноидом. Таким образом, согласно представленным выше свойствам и определе­ниям, множество А* является моноидом, а множество А*\{ε} – полу­группой.
В качестве примера рассмотрим множество букв латинского
алфавита. Пусть множество цепочек, составленных из семи букв, представляет собой формальный язык L1. Если мы введем еще одно условие и потребуем, чтобы все указанные цепочки можно было найти в каком-нибудь конкретном словаре (например, терминологическом или орфографическом), то получим другой формальный язык L2, при­чем очевидно, что множество L2 будет являться подмножеством L1.
Теперь, опираясь на определение конкатенации, определим
произведение двух множеств. Пусть M и N – некоторые подмножества множества А*. Произведением множеств M и N называется множество
K цепочек, являющихся конкатенацией цепочек из В и С, т.е.
K = {X • Y | Х M, Y N}.
Будем использовать запись
K = MN.
11
Зная определение произведения множеств, мы можем ввести
0*n
n
AA
.
1
.
n
n
AA
понятие возведения в степень. Рассмотрим алфавит А. Обозначим множество, состоящее из {ε}, как A0. Тогда степень алфавита A будет определена как
n - 1
An = A
A n 1.
Множество всех возможных цепочек алфавита может быть
представлено как объединение всех степеней этого алфавита:
.
Выражение в правой части называют итерацией алфавита A.
Если исключить из нее пустую цепочку ε, соответствующую нулевой степени A, то получим усеченную итерацию алфавита A:
Если X, Y A*, и существуют такие цепочки U, V A*, что
Y = U • X • V,
то цепочку X называют подцепочкой цепочки Y.
Если при этом U = ε, то X называют головой цепочки Y, а если
V = ε, – то, соответственно, хвостом.
Правила, согласно которым любой цепочке X = UPiV ставится в
соответствие цепочка
Y = UQiV (X A*, Y A*, (P1, Q1),… (Pn, Qn) A* A*, i = 1, 2,…n),
называются соотношениями Туэ. При этом цепочки X и Y называются смежными, если цепочка Y получается из цепочки X однократным применением одного соотношения Туэ (производится замена Pi на Qi).
Если существует такая последовательность цепочек X0, X1,…, Xn,
что i > 0 X
и Xi – смежные, то говорят, что цепочка Xn соотносима
i–1
с цепочкой X0.
В качестве примера рассмотрим множество букв русского ал-
фавита. Пусть на этом множестве определено соотношение Туэ, поз-
12
воляющее заменить любую букву в слове на любую другую букву. Выберем X0 = КРАН. Применяя на каждом шаге выбранное соотноше­ние Туэ, можно получить следующую последовательность: X0 = КРАН, X1 = УРАН, X2 = УРОН, X3 = УРОК, X4 = СРОК, X5 = СТОК. Любые две цепочки в данной последовательности являются смежными, откуда следует, что цепочки КРАН и СТОК соотносимы в смысле заданного соотношения Туэ.
Соотношения Туэ могут быть двух- и односторонними. В по-
следнем случае их называют полусоотношениями Туэ, или продукциями.
Соотношения Туэ являются двусторонними, если цепочка X яв­ляется смежной по отношению к цепочке Y, и наоборот, цепочка Y яв­ляется смежной по отношению к цепочке X. Для односторонних соот­ношений Туэ, соответственно, цепочка X является смежной по отно­шению к цепочке Y, но Y не является смежной по отношению к цепоч­ке X.
Продукции обозначаются следующим образом:
(P1 → Q1), (P2 → Q2), …, (Pn → Qn).
Если при этом существуют такие цепочки U и V, что
X = UPiV, Y = UQiV,
а (Pi → Qi) – продукция из данного набора, то говорят, что цепочка Y непосредственно порождается из цепочки X, и пишут: X Y.
Если существует такая последовательность цепочек X0, X1,…, Xn, что i > 0 X
Xi, то говорят, что цепочка Xn порож-
i–1
дается цепочкой X0.
2.2. Формальные грамматики и формальные языки
Как мы уже отмечали ранее, формальные грамматики позво­ляют порождать правильные цепочки данного языка, а также опреде­лять принадлежность отдельно взятой цепочки данному языку. Сфор­мулируем теперь определение формальной грамматики на языке мате­матики. Для этого введем еще несколько важных понятий.
Терминальный символ, или терминал – объект, непосредствен­но присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение.
13
Чтобы наиболее просто понять этот термин, можно представить
YXG
i
G
i
YX
1
n
G
YX
*
0
себе обычную букву, например, используемую в русском языке. В об­щем случае в качестве терминалов могут выступать и другие символы, допускаемые данным алфавитом: цифры, специальные символы и т.д.
Нетерминальный символ, или нетерминал, – объект, обозна­чающий какую-либо сущность языка и не имеющий конкретного сим­вольного значения.
Нетерминал представляет собой не символ и не конкретное слово в языке, а сущность. Например, слова русского языка состоят из букв русского алфавита. Эти буквы являются терминальными симво­лами. А такие понятия, как «слово» или «предложение», являются нетерминальными символами: это сущности языка. Другие при­меры нетерминалов: формула, команда, арифметическое выраже­ние и т.д.
Пусть имеются две цепочки γ и δ, а также правило α → β грам­матики G. Тогда про цепочки X и Y – такие, что X = γαδ, Y = γβδ, – говорят, что цепочка Y непосредственно выводима из цепочки X в грамматике G, что обозначается как
, т.е. цепочка Y получается
из X подстановкой β вместо α.
Пусть существует такая последовательность цепочек X0, X1,…, Xn, что i > 0
. Тогда последовательность цепочек
X0, X1,…, Xn – это вывод Хп из Х0 в грамматике G, что обозначается как
.
Рассмотрим язык L. Пусть VТ – алфавит терминальных симво­лов, из которых строятся цепочки этого языка, а VN – алфавит нетер­минальных символов, представляющий собой совокупность сущнос­тей языка. Тогда объединение этих двух алфавитов будет представлять собой словарь языка L:
V = VN VT.
Будем обозначать элементы алфавита VT строчными латин­скими буквами, элементы множества VN – прописными латинскими буквами, элементы V* – греческими буквами.
Введем множество упорядоченных пар, представляющих собой продукции, следующим образом:
П = {(, ) | V*VNV*, V+}.
14
Данное определение не предполагает в правой части продук-
*
G
S
ций → возможность пустой цепочки ( ≠ ε), т.к. используется усе- ченная итерация словаря V+. В литературе также встречается опреде­ление, в котором V*.
Определим теперь формальную грамматику G как совокуп­ность следующих четырех объектов:
G = (VT, VN, P, S).
С первыми двумя объектами мы уже познакомились; P П – не что иное, как правила данной грамматики; S – это начальный сим- вол, являющийся нетерминалом, который обозначает класс языковых объектов, для описания которых предназначается данная грамматика. Например, в грамматике, порождающей предложения, начальным бу­дет символ, обозначающий предложение.
Языком, порожденным грамматикой G, называется множество всех терминальных цепочек, выводимых из начального символа в грамматике G. Такой язык обозначается L(G):
L(G) = { |  VT*,
}.
Две грамматики называются эквивалентными, если они порож­дают один и тот же язык.
2.3. Классификация языков Н. Хомского
Американский лингвист Ноам Хомский создал классификацию формальных языков, в которой определил четыре типа грамматик, с помощью которых эти языки строятся. Типы нумеруются от 0 до 3. Каждый тип определяется ограничениями, которые налагаются на продукцию (правило грамматики) → .
Тип 0. Какие-либо ограничения на продукции отсутствуют.
Тип 1. На продукцию наложено единственное ограничение,
касающееся длины цепочек:
|| ||.
Такие грамматики называются контекстно-зависимыми (КЗ-грамматиками).
15
Тип 2. Цепочка  состоит из одного нетерминального символа: VN. Такие грамматики называют бесконтекстными, или контекст-
но-свободными (КС-грамматики).
Тип 3. Этот тип поддерживает наиболее жесткие ограничения.
Во-первых, VN. Во-вторых,   VTVN, либо   VT, т.е. может состоять либо из одного терминального и одного нетерминального символов, либо из одного терминального символа. Такие грамматики называются регулярными.
Тип конкретного формального языка соответствует типу грам­матики, которая лежит в его основе. Поэтому, когда мы говорим о классификации формальных грамматик, мы одновременно говорим и о классификации формальных языков.
Отметим, что множество грамматик, относящихся к типу с меньшим номером, включает в себя множества грамматик, относя­щихся к типу с большим номером. Например, грамматику типа 3 мож­но рассматривать как специальный случай грамматики типа 2. А мно­жество грамматик типа 0, в котором отсутствуют ограничения, оче­видно, включает в себя как подмножества множества грамматик всех остальных типов, в которых ограничения присутствуют (точно также, например, множество слов русского языка, состоящих из 6 букв, это лишь подмножество множества всех слов русского языка).
2.4. Пример построения формальной грамматики и порождения цепочки
Рассмотрим пример, позволяющий подробно проследить по-
строение грамматики и процесс порождения грамматикой правильной цепочки в рамках конкретного формального языка. Этот язык будет представлять собой некоторое подмножество множества арифметических формул. Эти формулы будут содержать целые числа и знаки арифметических операций. Определим составляющие данного языка:
Терминальный алфавит
VT ={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '*', '/'}.
Нетерминальный алфавит:
VN = {ФОРМУЛА, ЗНАК, ЧИСЛО, ЦИФРА}.
16
Определим правила P следующим образом:
1. ФОРМУЛА → ФОРМУЛА ЗНАК ФОРМУЛА. Правило за-
мены формулы на две формулы, соединенные знаком.
2. ФОРМУЛА → ЧИСЛО. Правило замены формулы на число.
3. ЗНАК → + | – | * | / . Символ « | » соответствует логической операции «или»; правило замены знака: знак может быть представлен одним из четырех символов арифметических операций.
4. ЧИСЛО → ЦИФРА. Правило замены числа на цифру.
5. ЧИСЛО → ЧИСЛО ЦИФРА. Правило замены числа на чис- ло и цифру.
6. ЦИФРА → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9. Правило замены
цифры: цифра может быть представлена как «0», или «1», или «2», или «3» и так далее до «9».
Начальный нетерминал S: ФОРМУЛА. Отметим, что здесь в каждом правиле с левой стороны от
стрелки стоит только один нетерминальный символ. Таким образом, мы построили контекстно-свободную грамматику.
Осуществим вывод выражения «7 * 25» с помощью перечис­ленных правил вывода. На каждом шаге мы будем производить только одну элементарную операцию, т.е. замену.
Вывод начинается с начального нетерминального символа:
ФОРМУЛА.
Взглянув на список правил, обнаруживаем, что структура вы­ражения, которое мы хотим вывести, имеет вид, сходный со структу­рой правила 1. Воспользуемся им:
ФОРМУЛА → ФОРМУЛА ЗНАК ФОРМУЛА.
Наиболее просто из конструкции справа поддается замене не­терминальный символ ЗНАК. Для этого у нас есть правило 3:
ФОРМУЛА ЗНАК ФОРМУЛА → ФОРМУЛА * ФОРМУЛА.
Теперь нам необходимо получить из формул в правой части нужные нам числа. Сделать это напрямую установленные правила грамматики не позволяют. Придется применить правила 2, 4, 5, 6.
Начнем с левой ФОРМУЛЫ в выражении, для обозначения ко­торой требуется только один символ цифры. При этом получить цифру
17
из формулы напрямую мы не можем. Нам придется вначале приме­нить правило 2 превращения формулы в число:
ФОРМУЛА * ФОРМУЛА → ЧИСЛО * ФОРМУЛА.
Теперь, применив последовательно правила 4 и 6, мы получим искомое представление левой части выводимого выражения:
ЧИСЛО * ФОРМУЛА → ЦИФРА* ФОРМУЛА.
ЦИФРА* ФОРМУЛА → 7 * ФОРМУЛА.
Займемся теперь его правой частью. Отметим, что для ее пред­ставления нам потребуется уже два символа цифр, поэтому применен­ных для левой части выражения правил будет недостаточно. Итак, произведем в соответствии с правилом 2 первую замену:
7 * ФОРМУЛА → 7 * ЧИСЛО.
Если теперь по аналогии с выводом числа 7 мы прибегнем к правилу 4, то окажемся в тупике, т.к. вместо нетерминала ЦИФРА мы сможем подставить только один из символов цифр, указанных в этом правиле. Например, мы сможем построить «2», но не сможем уже по­сле этого дописать «5» и получить «25». Правило, которым нам необ­ходимо здесь воспользоваться, это правило 5:
7 * ЧИСЛО → 7 * ЧИСЛО ЦИФРА.
После этого мы можем получить первую из двух необходимых нам цифр выводимого числа:
7 * ЧИСЛО ЦИФРА → 7 * ЧИСЛО 5.
Теперь, используя уже знакомую нам схему, по правилам 4 и 6 мы получим вторую нужную нам цифру:
7 * ЧИСЛО 5 → 7 * ЦИФРА 5.
7 * ЦИФРА 5 → 7 * 2 5.
Таким образом, вывод выражения «7 * 25» в рамках построен­ной грамматики завершен.
18
3. АВТОМАТНЫЕ МОДЕЛИ
Выше мы рассмотрели первый из двух основных способов описания классификации формальных языков. Этот способ был осно­ван на ограничениях, налагаемых на правила грамматики. Другим спо­собом является классификация языков по принципу распознаваемости их определенным видом абстрактного распознающего устройства. Такие устройства называют автоматами. Можно определить взаим­но-однозначное соответствие между типами формальных языков по классификации Хомского и типами распознающих автоматов.
3.1. Конечные автоматы
Изучение автоматов мы начнем с наиболее простого их типа – конечного автомата. Этот автомат способен распознавать языки толь­ко наиболее ограниченного типа по Хомскому – языки типа 3, или ре­гулярные языки. Различают детерминированные и недетерминирован­ные конечные автоматы.
Детерминированный конечный автомат – это совокупность следующих пяти объектов:
А = (X, Q, δ, q0, F),
где X = {x1,..., xn} – входной алфавит; Q = {q0,…, q
} – алфавит
m–1
состояний автомата; δ : Q X Q – функция переходов; q0  Q – на­чальное состояние автомата; F Q – множество заключительных состояний автомата. Все представленные множества конечны.
Если представить себе конечный автомат как реально сущест­вующее физическое устройство, то его структура и принципы работы будут выглядеть следующим образом (рис. 3.1):
Рис. 3.1. Устройство конечного автомата
В его состав входят бесконечная лента, разбитая на ячейки, и управляющее устройство. На ленте записана некоторая цепочка X*,
19
причем один символ занимает одну ячейку. Ячейки справа и слева от пусты. Управляющее устройство, начиная с начального состояния q0Q, движется слева направо вдоль ленты. За один такт своей рабо- ты, находясь в некотором состоянии qQ, оно может прочитать сим­вол xiX в текущей ячейке, после чего, в соответствии с функцией пе- реходов δ, перейдет в следующее состояние q'Q.
Зависимость перехода в новое состояние от текущего состояния и текущего входного символа можно представить следующим образом:
(q, х) q'.
Такое представление называют командой конечного автомата, а ее левую часть – ситуацией конечного автомата. Число команд конечно.
Команду можно представить также в функциональном виде:
δ(q, х) = q'.
Для графического представления команды наиболее естествен­ным будет использование графов: состояния q и q' будут представлять собой вершины, а дуга, направленная из q в q', будет помечена симво­лом входного алфавита x (рис. 3.2).
Рис. 3.2. Графическое представление команды автоматы
Распространяя эту идею на все команды данного конечного ав­томата, получим ориентированный граф, иллюстрирующий правила его работы, называемый также диаграммой состояний.
Если автомат оказывается в ситуации (q, х), не являющейся ле­вой частью какой-либо его команды, то он завершает свою работу.
Если управляющее устройство прочитает все символы цепочки с входной ленты и окажется в одном из своих заключительных состояний qf F, то цепочка допускается данным автоматом. Мно- жество цепочек, допускаемых данным автоматом, образует его язык. Следует подчеркнуть, что, если автомат считал целиком всю цепочку , но не оказался ни в одном из своих заключительных состояний, це- почка допустимой не является.
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]