Регулярные выражения

Регулярные множества хороши тем, что их можно очень просто описать формула­ми, которые мы назовем регулярными выражениями.

Определение 2. Класс регулярных выражений над конечным словарем V определяется так:

1. и e — регулярные выражения;

2. ("a Î V)а — регулярное выражение;

3. Если R1 и R2 — регулярные выражения, то регулярными выражениями являются:

- их сумма R1+R2;

- их произведение R1R2;

- их итерация R1* и R2*.

4. Если выражение не построено конечным числом применения правил 1—3, то оно не является регулярным.

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

Примеры регулярных выражений: ab + bа*; (аа)*b + (с + dab)*.

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

Пусть R^ — регулярное множество, соответствующее регулярному выражению R. Тогда:

1. Если R = , то R^ = .

2. Если R = e, то R^ = {e}.

3. Если R = а, то R^ = {a}.

4. Если R = R1+R2, то R^ = Rl^ÈR2^.

5. Если R = R1·R2, то R^ = R1^·R2^.

6. Если R = R1*, то R^ = R1^*.

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

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

Регулярное выражение Соответствующий язык
bа* Все цепочки, начинающиеся с b, за которым следует произвольное число символов а
a*ba*ba* Все цепочки из а и b, содержащие ровно два вхождения b
(а+bb)* Все цепочки из а и b, в которые символы b входят только парами  
(a+b)*(aa+bb)(a+b)* Все цепочки из а и b, содержащие хотя бы одну пару рядом стоящих а или b  
(0+1)*11001(0+1)* Все цепочки из 0 и 1, содержащие подцепочку 11001  
a(a+b)*b Все цепочки из а и b, начинающиеся символом а и заканчивающиеся символом b  

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

Определение 3. Два регулярных выражения R1 и R2 называются эквивалентными (обозначается Rl = R2) тогда и только тогда, когда R1^ = R2^.

Таким образом, аа*а = а*ааа* = ааа* = а*аа*аа*. Возникает вопрос, как определить эквивалентность двух регулярных выражений.

Теорема 1. Для любых регулярных выражений R, S и Т справедливо:

1. R+S = S+R; R+R=R; (R+S)+T = R+(S+T); +R = R;

2. Re = eR = R; (RS)T = R(ST); R = R = ; но в общем случае RS ¹ SR;

3. R(S+T) = RS+RT; (S+T)R = SR+TR;

4. R* = e+R+R2+R3+... +RkR*; RR*=R*R; R(SR)* = (RS)*R;

5. R+ = R+R2+R3+...; R*R+ = RR*; R++e = R*.

Эти соотношения можно доказать, проверяя равенство соответствующих множеств цепочек. Их можно использовать для упрощения регулярных выражений. Например: b (b + aa*b) = b (eb + aa*b) = b (e + aa*) b = ba*b. Отсюда b (b + aa*b) = ba*b, что неочевидно.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: