Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava10 r.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
339.97 Кб
Скачать

Регулярные выражения. Свойства регулярных выражений

Регулярные множества можно обозначать с помощью регулярных выражений. Эти обозначения вводятся следующим образом:

1. О — регулярное выражение, обозначающее 0.

2. λ — регулярное выражение, обозначающее {λ,}.

3. а — регулярное выражение, обозначающее {a} VaeV.

4. Если р и q — регулярные выражения, обозначающие регулярные множества Р и Q, то p+q, pq, p* — регулярные выражения, обозначающие регулярные множества PuQ, PQ, и Р* соответственно.

Два регулярных выражения а и р равны, а - (3, если они обозначают одно и то же множество.

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

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

Если а, Р и у — регулярные выражения, то свойства регулярных выражений можно записать в виде следующих формул:

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

Следует также обратить внимание на то, что среди прочих свойств отсутствует равенство ар = ра, то есть операция конкатенации не обладает свойством коммутативности. Это и не удивительно, поскольку для этой операции важен порядок следования символов.

Уравнения с регулярными коэффициентами

На основе регулярных выражений можно построить уравнения с регулярными коэффициентами [32]. Простейшие уравнения с регулярными коэффициентами будут выглядеть следующим образом:

где a,βeV* — регулярные выражения над алфавитом V, а переменная XeV.

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

Решением первого уравнения является множество, обозначенное регулярным выражением а*β. Проверим это решение, подставив его в уравнение вместо переменной X:

Над знаками равенства указаны номера свойств регулярных выражений, которые были использованы для выполнения преобразований. Решением второго уравнения является множество, обозначенное регулярным выражением βa*.

Указанные решения уравнений не всегда являются единственными. Например, если регулярное выражение а в первом уравнении обозначает множество, которое содержит пустую цепочку, то решением уравнения может быть любое множество, обозначенное выражением X = а*(β+у), где у — выражение, обозначающее произвольное множество над алфавитом V (причем это множество даже может не быть регулярным). Однако доказано, что X = а'Р и X = βа* — это наименьшие из возможных решений для данных двух уравнений. Эти решения называются наименьшей подвижной точкой.

Из уравнений с регулярными коэффициентами можно формировать систему уравнений с регулярными коэффициентами. Система уравнений с регулярными коэффициентами имеет вид (правосторонняя запись):

В системе уравнений с регулярными коэффициентами все коэффициенты aij являются регулярными выражениями над алфавитом V, а переменные не входят в алфавит V: Vi Xie V. Оба варианта записи равноправны, но в общем случае могут иметь различные решения при одинаковых коэффициентах при переменных. Чтобы решить систему уравнений с регулярными коэффициентами, надо найти такие регулярные множества Хi, при подстановке которых в систему все уравнения превращаются в тождества множеств. Иными словами, решением системы является некоторое отображение f(X) множества переменных уравнения А={Хi: n > i > 0} на множество языков над алфавитом V*.

Системы уравнений с регулярными коэффициентами решаются методом последовательных подстановок. Рассмотрим метод решения для правосторонней записи. Алгоритм решения работает с переменной номера шага i и состоит из следующих шагов.

Шаг 1. Положить i := 1.

Шаг 2. Если i = n, то перейти к шагу 4, иначе записать i-e уравнение в виде: Xi = aiXi+βj, где aj - ау, βi = βi0 + βi+1Х1+1 + ... + βinXn. Решить уравнение и получить Xj = aj'βi. Затем для всех уравнений с переменными Xi+1,...,Xn подставить в них найденное решение вместо Xj.

Шаг 3. Увеличить i на 1 (i := i+1) и вернуться к шагу 2.

Шаг 4. После всех подстановок уравнение для Хп будет иметь вид Хп = а„Хп+β, где an = ann. Причем р будет регулярным выражением над алфавитом V* (не содержит в своем составе переменных системы уравнений Xj). Тогда можно найти окончательное решение для Xn: Xn = an*β. Перейти к шагу 5.

Шаг 5. Уменьшить i на 1 (i := i-1). Если i = 0, то алгоритм завершен, иначе перейти к шагу 6.

Шаг 6. Берем найденное решение для Xj = ttjXj+pj, где a( - aii7 pi - рю + pii+iXi+1 + + ... + βinXm и подставляем в него окончательные решения для переменных Xi+1,...,Xn. Получаем окончательное решение для Xj. Перейти к шагу 5.

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

Система уравнений с регулярными коэффициентами всегда имеет решение, но это решение не всегда единственное. Для рассмотренного алгоритма решения системы уравнений с регулярными коэффициентами доказано, что он всегда находит решение f(X) (отображение f: Vi Xj-»V), которое является наименьшей неподвижной точкой системы уравнений. То есть если существует любое другое решение g(X), то всегда f(X)cg(X).

В качестве примера рассмотрим систему уравнений с регулярными коэффициентами над алфавитом V = {"-", "+",".", О, 1, 2, 3, 4, 5, 6, 7, 8, 9} (для ясности записи символы -, + и . взяты в кавычки, чтобы не путать их со знаками операций):

Обозначим регулярное выражение (0+1+2+3+4+5+6+7+8+9) через а для краткости записи: a = (0+1+2+3+4+5+6+7+8+9). Получим:

Решим эту систему уравнений. Шаг 1. i :- 1.

Шаг 2. Имеем i = 1 < 4. Берем уравнение для i = 1. Имеем X] = ("-" + "+" + К). Это уже и есть решение для Xj. Подставляем его в другие уравнения. Получаем:

Шаг 3. i:- i + 1 - 2.

Возвращаемся к шагу 2.

Шаг 2. Имеем i = 2 < 4. Берем уравнение для i 2. Имеем

Выполнив несложные преобразования, это же решение можно представить в более простом виде:

Если подставить вместо обозначения а соответствующее ему регулярное выражение а = (0+1+2+3+4+5+6+7+8+9), то можно заметит, что регулярное выражение для Х4 описывает язык десятичных чисел с плавающей точкой.

Способы задания регулярных языков

Три способа задания регулярных языков

Регулярные (праволинейные и леволинейные) грамматики, конечные автоматы (КА) и регулярные множества (равно как и обозначающие их регулярные выражения) — это три различных способа, с помощью которых можно задавать регулярные языки. Регулярные языки в принципе можно определять и другими способами, но именно три указанных способа представляют наибольший интерес.

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

Утверждение 2.1. Язык является регулярным множеством тогда и только тогда, когда он задан леволинейной (праволинейной) грамматикой.

Утверждение 2.2. Язык может быть задан леволинейной (праволинейной) грамматикой тогда и только тогда, когда он является регулярным множеством.

Утверждение 2.3. Язык является регулярным множеством тогда и только тогда, когда он задан с помощью конечного автомата.

Утверждение 2.4. Язык распознается с помощью конечного автомата тогда и только тогда, когда он является регулярным множеством.

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

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