Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Формальные языки и грамматики. Учебное пособие для студентов факультета компьютерных наук и информационных технологий.pdf
Скачиваний:
0
Добавлен:
09.08.2026
Размер:
457 Кб
Скачать

Глава 4 Регулярные и контекстно-свободные языки

4.1. Регулярные множества и регулярные выражения

Определение 63 (Регулярное множество). Пусть задан некоторый алфавит Σ. Тогда регулярное множество можно определить следующим образом:

1)– регулярное множество;

2){ε} – регулярное множество;

3)если a Σ, то {a} – регулярное множество;

4)если L1 и L2 – регулярные множества, то L1 L2, L1L2 и L1 – регулярные множества.

Пример 35. Рассмотрим множество L1 = {ab,ba}. Его можно представить в виде L1 = (AB) (BA), где A = {a}, а B = {b}. A и B – регулярные множества, следовательно, регулярны и множества AB и BA, а значит, регулярно и L.

Пример 36. Рассмотрим множество L2 = {01k | k > 0}. Его можно предста-

вить в виде L2 = AB, где A = {0}, а B = {1}k = {1} . Так как A – регуляр-

k=0

ное множество и B – итерация регулярного множества, то L2 – регулярное множество.

Определение 64 (Регулярный язык). Язык, являющийся регулярным множеством, называют регулярным.

Для записи регулярных множеств используют так называемые регулярные выражения.

Определение 65 (Регулярное выражение). Регулярные выражения определяются следующим образом:

1)– регулярное выражение для пустого множества;

2)ε – регулярное выражение для множества {ε};

3)если a Σ, то a – регулярное выражение для множества {a};

4)если α – регулярное выражение для регулярного множества A и β – регулярное выражение для регулярного множества B, то α + β, (α)(β), (α) и (α)+ – регулярные выражения для регулярных множеств A B, AB, A , A+ соответственно.

56

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

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

Таким образом, множество L1 из примера 35 можно задать с помощью регулярного выражения ab +ba, а множество L2 из примера 36 – с помощью выражения 01 .

Для любого регулярного языка можно найти множество разных регулярных выражений, определяющих его. Например, легко проверить, что регулярные выражения 0 + 01+, 0(ε + 1 + 1 ) также будут определять язык L2 из примера 36. Регулярные выражения, определяющие одно и то же регулярное множество, называют эквивалентными.

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

Лемма 1 (Эквивалентные регулярные выражения). Если α, β и γ – регулярные выражения, то справедливы следующие соотношения:

1) α + β = β + α,

8) = ε,

2) α + (β + γ) = (α + β) + γ,

9) α(βγ) = (αβ)γ,

3) α(β + γ) = αβ + αγ,

10) (α + β)γ = αγ + βγ,

4) αε = εα = α,

11) α = α = ,

5) α = α + α ,

12) (α ) = α ,

6) α + α = α,

13) α + = α,

7) α+ = αα ,

14) α(βα) = (αβ) α.

Доказательство леммы напрямую следует из свойств операций над языками.

Пример 37. Рассмотрим регулярное выражение γ = (0 +ε) (1 +1+). По определению операции итерации имеем γ = ((0+ + ε) + ε) (1 + 1+). В силу соотношения 2 получим γ = (0+ + ε + ε) (1 + 1+). Применяем соотношение 6, получая γ = (0+ + ε) (1 + 1+). Применяем определение операции положительной итерации, получим γ = (0 ) (1 + 1+). По соотношению 12 γ = = 0 (1 + 1+). Из 3 следует γ = 0 1(ε + 1 ). Применяя соотношения 2, 6 и определение операции итерации, получим γ = 0 11 . По определению операции положительной итерации γ = 0 1+.

Общее преобразование можно провести намного быстрее, если помнить, что операции конкатенации и объединения – это операции над множествами.

57

Определение 66 (Уравнение с регулярными коэффициентами). Уравнением с регулярными коэффициентами называется уравнение вида

X = f (X ),

где f – регулярное выражение, а X – переменная.

Решением уравнения с регулярными коэффициентами является множество слов, подставляя которое вместо имени переменной в левую и правую части уравнения, получают тождество.

Пример 38. Рассмотрим уравнение с регулярными коэффициентами

X = 0X 1 + ε.

Решением данного уравнения является множество слов X = {0n1n | n > > 0}. Действительно, если подставим это решение в правую часть уравнения, то получим

0X 1 + ε = 0{0n1n | n > 0}1 + ε = {0n+11n | n > 0}1 + ε =

= {0n+11n+1 | n > 0} + ε = {0k1k | k > 1} + ε = {0k1k | k > 0} = X .

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

Определение 67 (Леволинейное уравнение с регулярными коэффициентами). Леволинейным уравнением с регулярными коэффициентами называется уравнение вида

X = X α + β,

где X – переменная, а α, β – регулярные выражения без переменных.

Лемма 2 (О решении леволинейного уравнения с регулярными коэффициентами). Решением леволинейного уравнения с регулярными коэффициен-

тами

 

X = X α + β,

(4.1)

является значение

 

X = βα .

(4.2)

Доказательство. Подставив решение (4.2) в обе части (4.1), получим

βα = βα α + β.

Преобразуем правую часть:

βα = β(α+ + ε)

58

и далее

βα = βα .

Получили тождество.

Замечание 2. В случае если в (4.1) множество, определенное регулярным выражением α, содержит ε, то уравнение (4.1) имеет бесконечно много

решений вида

X = (β + γ)α

для любого языка γ (не обязательно регулярного).

В случае наличия множества решений одного уравнения в качестве единственного решения рассматривают так называемую минимальную неподвижную точку.

Определение 68 (Минимальная неподвижная точка уравнения с регулярными коэффициентами). Минимальной неподвижной точкой уравнения с регулярными коэффициентами X = f (X ) является такое X , что при наличии любого другого решения X ′′ выполняется соотношение X X ′′.

Минимальной неподвижной точкой леволинейного уравнения с регулярными коэффициентами является решение (4.2).

Пример 39. Пусть задано уравнение

X = X 0 + X 1(11 + 0)+ + X + 0 + 01.

Вынесем X за скобку, получим

X = X (0 + 1(11 + 0)+ + ε) + 0 + 01.

Здесь α = 0 + 1(11 + 0)+ + ε, а β = 0 + 01. Минимальной неподвижной точкой уравнения будет

X = (0 + 01)(0 + 1(11 + 0)+ + ε) .

Замечание 3. Аналогичным образом можно ввести праволинейное уравнение с регулярными коэффициентами – уравнение вида X = αX + β. Минимальной неподвижной точкой такого уравнения будет X = α β.

Определение 69 (Леволинейная система уравнений с регулярными коэффициентами). Стандартной леволинейной системой уравнений с регулярными коэффициентами называют систему вида

X1 = X1α11 + X2α12 + X3α13 + ···Xnα1n + β1,

X2

= X1α21 + X2α22 + X3α23

+ ···Xnα2n + β2

,

···

 

 

(4.3)

 

 

 

Xn = X1αn1 + X2αn2 + X3αn3 + ···Xnαnn + βn,

где Xi – переменные, а αi j , βi – регулярные выражения без переменных,

0 < i, j 6 n.

59

Определение 70 (Минимальная неподвижная точка системы уравнений с регулярными коэффициентами). Минимальной неподвижной точкой систе-

мы уравнений с регулярными коэффициентами (4.3) является такое решение X1,X2,...,Xn, что при наличии любого другого решения X1′′,X2′′,...,Xn′′

выполняется соотношение XiXi′′ для всех i, 1 6 i 6 n.

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

X1 = (X2α12 + X3α13 + ···Xnα1n + β111 =

= X2α12α11 + X3α13α11 + ···Xnα1nα11 + β1α11.

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

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

Пример 40. Рассмотрим следующую систему уравнений:

X1 = X20 + X11 + ε,

X2 = X30 + X21,

X3 = X10 + X31.

Первое уравнение представим в виде X1 = (X20 + ε)1 , подставим во второе и третье уравнения и раскроем скобки. Получим новую систему:

X1 = X201 + 1 ,

X2 = X30 + X21,

X3 = X201 0 + 1 0 + X31.

Второе уравнение представим в виде X2 = X301 , подставим в третье урав-

нение

X1 = X201 + 1 ,

X2 = X301 ,

X3 = X301 01 0 + 1 0 + X31.

Получим решение для X3 и подставим его в первое и второе уравнения

X1 = X201 + 1 ,

X2 = 1 0(01 01 0 + 1) 01 ,

X3 = 1 0(01 01 0 + 1) .

60

Полученное решение для X2 подставим в X1:

X1 = 1 0(01 01 0 + 1) 01 01 + 1 ,

X2 = 1 0(01 01 0 + 1) 01 ,

X3 = 1 0(01 01 0 + 1) .

Итоговые регулярные выражения для Xi, i = 1,2,3, есть решение исходной системы.

Теорема 19 (О регулярности языков типа 3). Язык определяется регулярным выражением тогда и только тогда, когда это леволинейный язык.

Доказательство. Пусть L определен регулярным выражением над алфавитом Σ = {a1,...,ar }. Это означает по определению, что L получен из конечных языков

,{a1},...,{ar }

с помощью конечного числа регулярных операций. По теореме 5 следует, что L – язык типа 3.

В обратную сторону. Пусть L – язык типа 3, определенный грамматикой G = (N,Σ,P,S). Представим каждое правило A → α P в виде уравнения A = α относительно переменных – нетерминальных символов. Сложим правые части уравнений, имеющих одинаковые левые части. Получим систему уравнений с регулярными коэффициентами относительно множества переменных N. Решая эту систему, выведем регулярное выражение для нетерминала S – регулярное выражение для языка, определенного грамматикой

G.

Пример 41. Рассмотрим регулярное выражение (0 + 1) 2. В нем присутствуют операции объединения, итерации и конкатенации. Построим праволинейную грамматику, определяющую тот же язык.

Для языков {0}, {1} и {2} определим грамматики (по теореме 4)

G0 = ({S0},{0,1,2},{S0 → 0},S0),

G1 = ({S1},{0,1,2},{S1 → 1},S1),

G2 = ({S2},{0,1,2},{S2 → 2},S2)

соответственно.

Построим для регулярного выражения 0 + 1 грамматику

G3 = ({S3,S0,S1},{0,1,2},P3,S3)

по грамматикам G0 и G1 так, как описано в теореме 5. Здесь P3 будет состоять из продукций

S3 → S0 | S1, S0 → 0, S1 → 1.

61

По теореме 5 для регулярного выражения (0 + 1) по грамматике G3 построим грамматику G4 = ({S4,S3,S0,S1},{0,1,2},P4,S4), где P4 – это следующее множество правил:

S4 → ε | S3, S3 → S0 | S1, S0 → 0 | S30, S1 → 1 | S31.

Согласно теореме 5 для регулярного выражения (0 + 1) 2 по грамматикам G4 и G2 построим грамматику

G5 = ({S4,S3,S0,S1,S2},{0,1,2},P5,S2),

где P5 – это следующее множество правил:

S2 → S42, S4 → ε | S3, S3 → S0 | S1, S0 → 0 | S30, S1 → 1 | S31.

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

Пример 42. Рассмотрим грамматику

S → A0 | B1 | ε,

A → A0 | B1 | 2,

B → B0 | A1.

Заменим множество правил на систему уравнений с регулярными коэффициентами

S = A0 + B1 + ε,

A= A0 + B1 + 2,

B= B0 + A1.

Выражаем B из последнего уравнения B = A10 и подставляем его в первые два, тогда получим

S = A0 + A10 1 + ε,

A= A0 + A10 1 + 2,

B= A10 .

Выражаем A из второго уравнения A = 2(0 +10 1) и подставляем в первое уравнение. Получим

S = 2(0 + 10 1) 0 + 2(0 + 10 1) 10 1 + ε,

A= 2(0 + 10 1) ,

B= A10 .

Можно преобразовать выражение для S к виду S = 2(0 + 10 1)+ + ε. Это выражение и будет являться регулярным выражением, определяющим тот же язык, что и исходная праволинейная грамматика.

62

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