At 9
At 9
At 9
Aula Teórica 9:
Expressões Regulares
António Ravara
6 de Abril de 2020
Expressões regulares Motivação
Linguagem
Um autómato “faz”, isto é, executa, sequências de acções. O conjunto
destas diz-se a linguagem do autómato.
Como é um conjunto pode-se definir em compreensão.
Exemplos
Considere o AFD com alfabeto {a, b}. Vejamos linguagens de AFDs da
aula passada.
Seja NS ⊆ {a, b}∗ × {a, b} → N0 uma função que conta o número de
ocorrências de um sı́mbolo (a ou b) numa palavra de as e bs.
I Palavras com pelo menos dois bs: {w ∈ {a, b}∗ | NS(w , b) ≥ 2}
I Palavras com pelo menos dois bs e um a:
{w ∈ {a, b}∗ | NS(w , b) ≥ 2 ∧ NS(w , a) ≥ 1}
I Palavras com pelo menos um b logo após dois as: mais desafiante...
António Ravara (DI/FCT/UNL) Teoria da Computação 6 de Abril de 2020 2 / 20
Expressões regulares Exemplos de modelação
(b ∗ ab ∗ abb ∗ )∗
O ficheiro AFILE
Utilização
Para usar tem que se abrir; depois pode-se ler ou escrever (quantas vezes
se quiser); para terminar de usar tem que se fechar.
Expressão regular que define o comportamento (linguagem fica implı́cita):
Palavra ou traço
Alfabeto
Um conjunto finito de sı́mbolos diz-se um alfabeto. Exemplos:
I ΣAFILE = {open, read, write, close}
I DIGITS = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Palavra
I Uma sequência finita (eventualmente vazia) de sı́mbolos de um
alfabeto diz-se uma palavra (sobre esse alfabeto).
I ε é uma palavra sobre qualquer alfabeto;
I close close write write é uma palavra sobre ΣAFILE ;
I 1 1 1 1 é uma palavra sobre DIGITS;
I open 1 2 close não é uma palavra, nem sobre ΣAFILE nem sobre
DIGITS.
António Ravara (DI/FCT/UNL) Teoria da Computação 6 de Abril de 2020 5 / 20
Noções úteis - revisão Palavra
Conjunto de palavras
Words(Σ)
O conjunto Words(Σ) de todas as palavras sobre um alfabeto Σ define-se
indutivamente como se segue:
ε ∈ Words(Σ)
w ∈ Words(Σ) ∧ a ∈ Σ ⇒ aw ∈ Words(Σ)
Linguagem
Propriedades
I Se Σ é não vazio, Words(Σ) é infinitamente contável.
I Note-se que Words(Σ) = Σ∗ .
Lang (Σ)
I Uma linguagem sobre Σ é um conjunto LΣ ⊆ Words(Σ).
I Denote-se por Lang (Σ) = ℘(Words(Σ)) o conjunto de todas as
linguagens sobre Σ.
Exemplos de linguagens
Expressões regulares
Definição
Dado um alfabeto Σ, o conjunto RegExp(Σ) é definido indutivamente:
∅ ∈ RegExp(Σ)
ε ∈ RegExp(Σ)
a ∈ Σ ⇒ a ∈ RegExp(Σ)
E ∈ RegExp(Σ) ∧ F ∈ RegExp(Σ) ⇒ (EF ) ∈ RegExp(Σ)
E ∈ RegExp(Σ) ∧ F ∈ RegExp(Σ) ⇒ (E + F ) ∈ RegExp(Σ)
E ∈ RegExp(Σ) ⇒ (E ∗ ) ∈ RegExp(Σ)
Expressões regulares
Exemplos
São expressões regulares:
I (a(b + c))
I ((a∗ )b)
I ((ab)((b + c)∗ ))
Para simplificar, omitem-se os parênteses exteriores, considera-se o
operador estrela mais forte que a concatenação, e esta que a soma.
As expressões acima escrevem-se:
I a(b + c)
I a∗ b
I ab(b + c)∗
def
Para qualquer conjunto A considera-se A+ = A∗ \ {ε}
Propriedades
Seja L uma linguagem
(conjunto eventualmente vazio de palavras sobre um alfabeto).
I Como ε é o elemento neutro da concatenação de palavras,
{ε}∗ = {ε}
I O vazio é o elemento absorvente da concatenação:
∅·L=∅=L·∅
I O fecho de Kleene do vazio é a linguagem ε
∅∗ = {ε}
I O fecho de Kleene é idempotente:
(L∗ )∗ = L∗
I Dados dois sı́mbolos distintos a e b, tem-se
{a, b}∗ = {a}∗ ({b}{a}∗ )∗
Naturalmente, sendo as linguagens conjuntos, as propriedades usuais
verificam-se (e.g. a união é comutativa e associativa, tem o vazio como
elemento neutro, etc.).
António Ravara (DI/FCT/UNL) Teoria da Computação 6 de Abril de 2020 15 / 20
Expressões Regulares Definições
Concisão
Uma expressão regular identifica univoca e concisamente uma linguagem.
Análise de sub-palavras
w ∈ L(E ) com E ∈ RegExp(Σ), se:
I E = E1 E2 , w = w1 w2 e w1 ∈ L(E1 ) e w2 ∈ L(E2 )
I E = E1 + E2 , w ∈ L(E1 ) ou w ∈ L(E2 )
I E = F ∗ , w ∈ Ln (F ), para algum n.
Exemplos
I ε ∈ L(a∗ + b ∗ ), pois ε ∈ L(a∗ ) porque ε ∈ L0 (a)
I ε ∈ L(a∗ b ∗ ), pois ε = εε, ε ∈ L(a∗ ) e ε ∈ L(b ∗ )
I a ∈ L(a∗ ), pois a ∈ L1 (a)
I bb ∈ L(a∗ ) · L(b ∗ ), pois bb = εbb, ε ∈ L(a∗ ) e bb ∈ L(b ∗ ) porque
bb ∈ L2 (b)
Note-se que E ∗ = ε + E + e E + = E E ∗ = E ∗ E
abc ∈ L((a + b)∗ (c + d))?
I abc ∈ L((a + b)∗ (c + d)) porque ab ∈ L((a + b)∗ ) e c ∈ L(c + d)
I c ∈ L(c + d) porque L(c + d) = L(c) ∪ L(d) e c ∈ L(c) = {c}
I ab ∈ L((a + b)∗ ) porque ab ∈ L(ε + (a + b)+ ) uma vez que
ab ∈ L((a + b)+ )
I ab ∈ L((a + b)+ ) porque a ∈ L((a + b)) e b ∈ L((a + b)∗ )
I b ∈ L((a + b)∗ ) porque b ∈ L(ε + (a + b)+ ) uma vez que
b ∈ L((a + b)+ )
I b ∈ L((a + b)(a + b)∗ ) porque b = bε, b ∈ L(a + b) e ε ∈ L((a + b)∗ )
I Tem que se mostrar que não há nenhuma decomposição que permita
provar que pertence...
I Note-se que, para um alfabeto Σ, se dado sı́mbolo a ∈
/ Σ, então
/ Σ∗ , para {w1 , w2 } ⊆ Σ∗ .
w1 aw2 ∈
Exemplos
I ε∈/ L(a+ ) pois L(a+ ) = L(a) · L(a∗ ), ε = εε, mas ε ∈
/ L(a)
I abc ∈ +
/ L((a + b) ), pois considerando:
- (a + b)+ = (a + b)∗ (a + b) e apesar de ab ∈ L((a + b)∗ ), tem-se
que c ∈/ L(a + b) = {a, b}
- (a + b)+ = (a + b)(a + b)∗ e apesar de a ∈ L(a + b), tem-se que
bc ∈/ L((a + b)∗ ) = {a, b}∗