- •Введение
- •1. Формальные языки
- •1.1. Алфавит и цепочки
- •1.2. Языки и операции над ними
- •1.3. Способы задания языков
- •2. Грамматики
- •2.1. Формальное определение грамматики
- •2.2. Классификация грамматик по Хомскому
- •2.3. Свойства языков и грамматик
- •3. Иерархия автоматов
- •3.1. Конечные автоматы
- •3.2. Автоматы с магазинной памятью
- •3.3. Линейно ограниченные автоматы
- •3.4. Машины Тьюринга
- •4. Регулярные и контекстно-свободные языки
- •4.1. Регулярные множества и регулярные выражения
- •4.2. Самовставленные языки
- •4.3. Лемма о накачке для регулярных языков
- •4.4. Деревья вывода и однозначность грамматик типа 2
- •4.5. Преобразования КС-грамматик
- •4.6. Лемма о накачке для КС-языков
- •Список литературы
- •Оглавление
Глава 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′′
выполняется соотношение Xi′ Xi′′ для всех i, 1 6 i 6 n.
Пользуясь выражением (4.2) для решения леволинейного уравнения с регулярными коэффициентами, можно решать систему уравнений (4.3) методом исключения переменных. Другими словами, например, из первого уравнения системы (4.3) можно получить
X1 = (X2α12 + X3α13 + ···Xnα1n + β1)α11 =
= 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
