Você está na página 1de 29

Unidade 1 - Linguagens Regulares

Expressão Regular (ER)

Alessandra Hauck

FATECS

Alessandra Hauck Teoria da Computação FATECS 1 / 29


Expressão Regular (ER)

ERs são capazes de denotar Linguagens Regulares (LR).


Toda LR pode ser descrita por uma ER.
Uma ER é definida a partir de:
conjuntos
e pelas operações de concatenação, união e fechamento.
,

Alessandra Hauck Teoria da Computação FATECS 2 / 29


Expressão Regular (ER) - Operações

Existe 3 operações sobre as LRs que são representadas pelos


operadores de ER, são eles:
União (representado pelo sı́mbolo + ou |);
Concatenação (representado pelo sı́mbolo ·); e
Fechamento ou fecho de Kleene (representado pelo sı́mbolo *).

Alessandra Hauck Teoria da Computação FATECS 3 / 29


Operador União (+ ou |)

Sejam L1 e L2 ERs.
Seja L uma LR, onde L é o conjunto de todas as cadeias que estão
em L1 ou L2 (incluindo ambas). Ou seja:
L = L1 + L2
Ex.: Se:
L1 = {001, 10, 111}
L2 = {ε, 001}
Então, L = L1 + L2 = ?

Alessandra Hauck Teoria da Computação FATECS 4 / 29


Operador União (+ ou |)

Ex.: Se:
L1 = {001, 10, 111}
L2 = {ε, 001}
Então:
L = L1 + L2 = {ε, 001, 001, 10, 111}
Ou seja, todas as cadeias de L1 e L2 .
Obs.: A cadeia 001 aparece tanto em L1 , quanto em L2 . Logo,
não é necessário repeti-la, basta colocar uma única ocorrência
dela. Portanto:
L = L1 + L2 = {ε, 001, 10, 111}

Alessandra Hauck Teoria da Computação FATECS 5 / 29


Operador Concatenação (·)

Sejam L1 e L2 ERs.
Seja L uma LR, onde L é o conjunto de todas as cadeias que
podem ser obtidas pela concatenação de uma cadeia u ∈ L1 com
uma cadeia v ∈ L2 (nesta ordem). Ou seja:
L = L1 · L2
Ex.: Se:
L1 = {001, 10, 111}
L2 = {ε, 001}
Então, L = L1 · L2 = ?

Alessandra Hauck Teoria da Computação FATECS 6 / 29


Operador Concatenação (·)

Ex.: Se:
L1 = {001, 10, 111}
L2 = {ε, 001}
Então:
L = L1 · L2 = {001ε, 10ε, 111ε, 001001, 10001, 111001}
L = L1 · L2 = {001, 10, 111, 001001, 10001, 111001}

Alessandra Hauck Teoria da Computação FATECS 7 / 29


Operador Fechamento ou Fecho de Kleene (∗)

Sejam L uma ER.


L∗ é o conjunto de todas as cadeias que podem ser formadas
tomando-se qualquer número de cadeias de L (incluindo a cadeia
vazia).
L+ (fecho positivo) é o conjunto de todas as cadeias que podem
ser formadas tomando-se qualquer número de cadeias de L,
excluindo a cadeia vazia (ε).
Ex.: Se:
L = {0,1}, então:
L∗ = L0 ∪ L1 ∪ L2 ∪ · · · ∪ Lk ∪ · · ·

Alessandra Hauck Teoria da Computação FATECS 8 / 29


Operador Fechamento ou Fecho de Kleene (∗)

Ex.: Se:
L = {0,1}, então:
L∗ = L0 ∪ L1 ∪ L2 ∪ · · · ∪ Lk ∪ · · ·
Ou seja, todas as cadeias binárias, incluindo a cadeia vazia (ε).
Logo:
L0 = ε
L1 = 0 ou L1 = 1
L2 = 00, ou L2 = 01, ou L2 = 10, ou L2 = 11
···

Alessandra Hauck Teoria da Computação FATECS 9 / 29


Operador Fechamento ou Fecho de Kleene (∗)

Ex.: Se L = {0, 11}, então, L∗ = ?

Alessandra Hauck Teoria da Computação FATECS 10 / 29


Operador Fechamento ou Fecho de Kleene (∗)

Ex.: Se L = {0, 11}, então:


L∗ = L0 ∪ L1 ∪ L2 ∪ · · ·
Ou seja, todas as cadeias de 0’s e 1’s que, quando aparece o
sı́mbolo 1, ele sempre aparece em pares, e, a cadeia vazia (ε)
também faz parte desta linguagem. Logo:
L0 = ε
L1 = 0
L2 = 00 ou L2 = 11
L3 = 000, ou L3 = 011, ou L3 = 110
L4 = 0000, ou L4 = 0011, ou L4 = 0110, ou L4 = 1100, ou
L4 = 1111
···

Alessandra Hauck Teoria da Computação FATECS 11 / 29


Operador Fechamento ou Fecho de Kleene (∗)

Ex.: Se L = {w ∈ {0} | w é composta por qualquer quantidade de


0’s (inclusive nenhuma)}

Alessandra Hauck Teoria da Computação FATECS 12 / 29


Operador Fechamento ou Fecho de Kleene (∗)
Ex.: Se L = {w ∈ {0} | w é composta por qualquer quantidade de
0’s (inclusive nenhuma)}
É fácil perceber que L é uma LR infinita. Então:
L∗ = L0 ∪ L1 ∪ L2 ∪ · · ·
Ou seja, todas as cadeias compostas por qualquer quantidade de
0’s (inclusive nenhuma, isto é a cadeia vazia (ε)) também faz parte
desta linguagem. Logo:
L0 = ε
L1 = 0
L2 = 00
L3 = 000
···
Portanto,
L = L∗
Ou seja, Se L é uma LR infinita, então L∗ também será uma LR
infinita.
Alessandra Hauck Teoria da Computação FATECS 13 / 29
Operador Fechamento ou Fecho de Kleene (∗)

Obs.: Olhando os exemplos anteriores, podemos notar que, apesar


de L ser uma LR finita, L∗ é uma LR infinita, pois pode-se
formar um número infinito de cadeias combinando os sı́mbolos de
L.
Pergunta...
Partindo dessa análise, eu posso afirmar que:
L∗ é sempre infinita, independente de L ser finita ou infinita?

Alessandra Hauck Teoria da Computação FATECS 14 / 29


Operador Fechamento ou Fecho de Kleene (∗)

Pergunta...
Partindo dessa análise, eu posso afirmar que:
L∗ é sempre infinita, independente de L ser finita ou infinita?
A resposta é: NÃO!
Veja uma excessão:
Se L = {} = ∅, então:
L∗ = L0 ∪ L1 ∪ L2 ∪ · · ·
Mas, L = ∅ (i = 1, 2, · · · ), exceto quando i = 0, pois L0 = {ε}
i

Portanto:
L∗ = {ε}, que é uma LR finita.

Alessandra Hauck Teoria da Computação FATECS 15 / 29


Expressão Regula (ER)

Uma Expressão Regular (ER) sobre um alfabeto Σ é


indutivamente definida como:
1 As constantes ε e ∅ são ERs, que denotam as LRs {ε} e ∅,
respectivamente. Ou seja:
L(ε) = {ε}
L(∅) = ∅
2 Seja a um sı́mbolo qualquer. Então a é também uma ER. Ou seja:
L(a) = {a} ⇒ LR que contém uma única cadeia formada pelo
sı́mbolo a (isto é, L(a) é uma LR unitária).
3 Uma variável, em geral, escrita utilizando uma letra maiúscula (ex:
L), representa uma LR qualquer.
Logo, as letras maiúsculas são utilizadas para representar uma
linguagem qualquer.

Alessandra Hauck Teoria da Computação FATECS 16 / 29


Expressão Regula (ER)

A partir das definições anteriores, pode-se dizer que:


I Se E1 e E2 são ERs, então:
E1 + E2 é também uma ER, que denota a união de L(E1 ) com
L(E2 ). Ou seja:

L(E1 + E2 ) = L(E1 ) + L(E2 )


Logo, a união de duas ERs também é uma ER.

II Se E1 e E2 são ERs, então:


E1 · E2 é também uma ER, que denota a concatenação de L(E1 )
com L(E2 ). Ou seja:

L(E1 · E2 ) = L(E1 ) · L(E2 )


Logo, a concatenação de duas ERs também é uma ER.

Alessandra Hauck Teoria da Computação FATECS 17 / 29


Expressão Regula (ER)

III Se E é uma ER, então:


E ∗ é também uma ER, que denota o fechamento de L(E). Ou seja:

L(E ∗ ) = [L(E)]∗
Logo, o fechamento de uma ER também é uma ER.

IV Se E é uma ER, então:


(E) é também uma ER, que denota a mesma linguagem E. Ou seja:

L(E) = [L(E)]
Logo, a inclusão de parênteses não modifica a ER E.

Alessandra Hauck Teoria da Computação FATECS 18 / 29


ER - Exemplos

Exemplos de ERs:
aa ⇒ somente a cadeia aa.
ba∗ ⇒ Todas as cadeias que iniciam por b, seguido de zero ou mais
a’s.
(a|b)∗ ⇒ Todas as cadeias sobre o alfabeto {a, b}.
(a|b)∗ aa(a|b)∗ ⇒ Todas as cadeias contendo aa como subpalavra.
a∗ ba∗ ba∗ ⇒ Todas as cadeias contendo exatamente dois b’s.
(a + b)∗ (aa + bb) ⇒ Todas as cadeias que terminam com aa ou bb.
(a + ε)(b + ba)∗ ⇒ Todas as cadeias que não possuem dois a’s
consecutivos.
0∗ 1∗ 2∗ ⇒ Todas as cadeias de 0 seguidas de 1’s seguidas d 2’s.

Alessandra Hauck Teoria da Computação FATECS 19 / 29


ER - Exemplo 1

Escreva uma ER que represente o conjunto de cadeias de 0’s e 1’s,


em que eles apareçam alternadamente, com no mı́nimo uma
alternância.
Ou seja, cadeias:
Com repetições do tipo 01: 010101 · · · 01
Com repetições do tipo 10: 101010 · · · 10
Começando por 0 com repetições do tipo 10: 0101010 · · · 10
Começando por 1 com repetições do tipo 01: 1010101 · · · 01

Alessandra Hauck Teoria da Computação FATECS 20 / 29


ER - Exemplo 1

Para escrever a ER, pode-se usar 4 ERs isoladamente, que


representam os tipos de repetições visto anteriormente, ou seja:
(01)+ = 010101 · · · 01
(10)+ = 101010 · · · 10
0(10)+ = 0101010 · · · 10
1(01)+ = 1010101 · · · 01
Fazendo a união dessas 4 ERs, teremos a ER desejada, isto é:
(01)+ + (10)+ + 0(10)+ + 1(01)+
Outra maneira de representar essa ER, seria de forma mais
agregada, ou seja:
[(ε + 1)(01) + (ε + 1)(10)]+
Portanto, uma dada LR pode ser expressa por mais de uma ER.

Alessandra Hauck Teoria da Computação FATECS 21 / 29


Expressão Regula (ER)

Outra caracterı́stica importante das ERs é a precedência dos


operadores. Ou seja:

Operador Descrição do operador Procedência


∗ Fechamento Maior
· Concatenação Intermediária
+ União Menor

Alessandra Hauck Teoria da Computação FATECS 22 / 29


ER - Exemplo 2

Escreva uma ER que represente o conjunto de cadeias sobre o


alfabeto Σ = {a, b, c}, que contém pelo menos um a e pelo menos
um b.

Alessandra Hauck Teoria da Computação FATECS 23 / 29


ER - Exemplo 2

Escreva uma ER que represente o conjunto de cadeias sobre o


alfabeto Σ = {a, b, c}, que contém pelo menos um a e pelo menos
um b.
Para facilitar nossa compreensão, vamos criar um AF que
reconheça essa linguagem. Ou seja:

Alessandra Hauck Teoria da Computação FATECS 24 / 29


ER - Exemplo 2

Logo, a ER será:
c∗ · {[a · (a + c)∗ · b] + [b · (b + c)∗ · a]} · (a + b + c)∗

Alessandra Hauck Teoria da Computação FATECS 25 / 29


ER - Exemplo 3

Escreva uma ER que represente o conjunto de cadeias sobre o


alfabeto Σ = {0, 1}, cujo décimo sı́mbolo da direita para a
esquerda seja 1.

Alessandra Hauck Teoria da Computação FATECS 26 / 29


ER - Exemplo 3

Escreva uma ER que represente o conjunto de cadeias sobre o


alfabeto Σ = {0, 1}, cujo décimo sı́mbolo da direita para a
esquerda seja 1.
Para facilitar nossa compreensão, vamos criar um AF que
reconheça essa linguagem. Ou seja:

Alessandra Hauck Teoria da Computação FATECS 27 / 29


ER - Exemplo 3

Logo, a ER será:
(0|1)∗ · 1 · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1)

Alessandra Hauck Teoria da Computação FATECS 28 / 29


ER - Exemplo 3

Observação
Em ER só existe os operadores:

+
·
Logo, NÃO podemos simplificar a ER
(0|1)∗ · 1 · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1) · (0|1)
Usando essa expressão:
(0 + 1)∗ · 1 · (0 + 1)9
Pois, ERs não possuem um operador para representar exatamente
quantas vezes queremos repetir um sı́mbolo ou cadeia de sı́mbolos.
Portanto, não é possı́vel fazer a ER repetir exatamente 9
vezes!

Alessandra Hauck Teoria da Computação FATECS 29 / 29

Você também pode gostar