Você está na página 1de 24

Linguagens Formais

Expressões Regulares

Prof. Valdemar Neto

Adaptado do Material do Professor Gustavo Teodoro Laureano


Revisão Aula Passada

● Conceitos básicos
● Alfabetos
● Palavras/Cadeias
● Linguagens

● O que é um alfabeto?

● O que são palavras/cadeias?

● O que é uma linguagem?


Revisão dos Conceitos Básicos

● Alfabeto: é definido como um conjunto finito de símbolos.


● Σ={0,1}
● Σ={a, b, c, ..., z }
● Σ={if, then, else, while}

● Símbolo: é uma entidade abstrata que não precisa ser definida. Eles
devem ser ordenáveis. Portanto podem ser comparados quanto à
sua igualdade.
● a<b<c<…<z
● 0<1<2<…<9
Revisão dos Conceitos Básicos

● Cadeia: uma cadeia sobre um alfabeto qualquer Σ, é uma seqüência


finita de símbolos desse alfabeto.
● Sentenças sobre Σ={a, b} : a, b, aa, ab, abb, aab, bbb, …

● Tamanho da Cadeia: é a quantidade de símbolos que formam a


cadeia.
● Se w = abc, |w| = 3

● Potência: dada a cadeia w.


● Se w = ab, w 3 = ababab
● Concatenação: se w e z são cadeias, a concatenação wz é formada
pela escrita da primeira cadeia w, seguida da segunda cadeia z,
justapostas.
● Se w = ab e z = bc, wz = abbc
Revisão dos Conceitos Básicos

● Cadeia vazia: uma cadeia vazia é representada por um símbolo


nulo, que corresponde à uma cadeia especial de comprimento igual a
zero.

ε representa uma cadeia vazia. Se w = ε, então |w|= 0.

● Fechamento Estrela: ou Fecho Kleene, é o conjunto de todas as


cadeias de qualquer comprimento sobre um alfabeto.
● Dado Σ={a, b},

Σ* = Σ0 U Σ1 U Σ2 U … U Σn
= { ε, a, b, aa, bb, aab, abb, aabb, bbaa, ... }

onde Σ0 = ε

Fechamento Positivo: Σ+ = Σ* - ε
Linguagens Formais

● O que é uma linguagem formal?



É um conjunto de palavras sobre um alfabeto Σ.

Uma linguagem L é um subconjunto de Σ*. L ⊆ Σ*.

● Exemplo:
● O conjunto de cadeias ou palavras válidas para a língua portuguesa é
um subconjunto de {a, b, c, d, … z}+.
Linguagens Formais

● Uma linguagem formal pode ser um conjunto do tipo:



L = { w ∈ Σ* | w tem a propriedade P }


L = { w ∈ Σ* | w sempre termina com a }

Se Σ={a,b}, então L = {a, aa, aaa, aba, aaaba, bba, ba, bbba, ... }


L = { w ∈ Σ* | |w| = 2 }

Se Σ={a,b}, então L = {aa, bb, ab, ba}


Linguagens Formais

● Dada uma determinada linguagem:


● Qual seria a definição matemática dessa linguagem?
● Ela é formal?
● Sobre qual alfabeto ela está definida?
● Ela é finita ou infinita?
● Como representar essa linguagem?
Representações das Linguagens

● Estudo das formas de representação dessas linguagens.

● O problema da representação está relacionada com o fato da


linguagem ser finita ou infinita.

● Linguagem Finita: pode ser enumerável.


– Conjunto do números pares maior que 0 e menor que 10.

L = {2, 4, 6, 8}

● Linguagem Infinita: não pode ser enumerável. Necessita de uma


representação finita que a define.
– Conjunto dos números inteiros pares

L = {2, 4, 6, 8, 10, 12, ...}


Representações das Linguagens

As representações são classificadas como:

● Reconhecedor: é um dispositivo formal usado para verificar se uma


determinada cadeia pertence ou não à uma linguagem.
● Exemplo: Expressões Regulares, Autômatos Finitos.

● Gerador: é um dispositivo formal de geração onde as sentenças de


uma linguagem podem ser sitematicamente geradas.
● Exemplo: Gramáticas Gerativas
Linguagens Formais Regulares

● Linguagens Formais:
● São linguagens que podem ser representadas de maneira finita e
precisa, através de sistemas com sustentação matemática.

● Linguagens Regulares:
● Trata-se do conjunto de linguagens formais bastante simples e com
propriedades bem definidas.

● Essas linguagens podem ser definidas pelo que chamamos de


Expressões Regulares.
Expressões Regulares

Definição:

Seja um alfabeto Σ. As expressões regulares sobre esse alfabeto
denotam conjuntos (Linguagens) como segue:

∅ é uma expressão que denota o conjunto vazio.

ε é uma expressão que denota o conjunto {ε}

Para cada símbolo α do alfabeto Σ, α representa uma expressão regular
que gera o conjunto {α}.
● Se r e s são expressões regulares que denotam os conjuntos R e S
respectivamente
– (r ou s) equivale ao conjunto R U S
– rs equivale ao conjunto RS
– r* equivale ao conjunto R*
Operações de Expressões Regulares

● Alternância/Escolha: dada duas expressões regulares M e N, o


operador de alternância | gera uma nova expressão regular M | N.
Dessa forma, se uma cadeia está na linguagem M | N, a cadeia
pertence à linguagem M ou à linguagem N.
– Obs.: Em algumas bibliografias, o símbolo que denota alternância/escolha é o
símbolo de união (U).

● Concatenação: dada duas expressões regulares M e N, o operador


de concatenação . gera uma nova expressão regular M.N . Dessa
forma, uma string está na linguagem M.N, se a string pertence à
concatenação de duas strings a e b, desde que a pertença à
linguagem M, e b pertença à linguagem N.
Operações de Expressões Regulares

● Repetição: dada uma expressão regular M,


● Fechamento Estrela é dado por M*. Uma string está em M* se ela for
uma concatenação de zero ou mais strings de M.

● Fechamento Positivo é dado por M+. Uma string está em M+ se ela for
uma concatenação de uma ou mais strings de M.

● Precedência de Operadores: Uso de parênteses


● Dada a expressão regular:
a | b*
● Como ela deve ser interpretada? (a | b)* ou a | (b)* ?
● As repetições possuem precedência maior. De forma que * recebe
precedência maior que | .
Operações de Expressões Regulares

● Dada a expressão regular: a | b*


● Ela deve ser interpretada como: a | (b)*

● Dada a expressão regular: a | bc*


● Ela deve ser interpretada como: a | (b (c)*)

● Dada a expressão regular: ab | c*d


● Ela deve ser interpretada como: (ab) | ( (c)* d )
Nomes para Expressões Regulares

● Frequentemente, é útil simplificar a notação com nomes para ERs


muito longas.
● Ex.: Expressão regular para expressar números com no mínimo um
dígito.
● a) (0 | 1 | 2 | … | 9) (0 | 1 | … | 9)*
– Ou ainda: (0 | 1 | 2 | … | 9)+
● b) Denotemos dígito como dígito = (0 | 1 | … | 9).
– Logo: dígito+ expressa a linguagem que queremos.
Intervalos

● Outra forma de expressar uma alternância de caracteres muito


grande. Ex.:
● Caracteres de a a z: [a-z]
● Caracteres em caixa alta: [A-Z]
Como construir expressões a partir de especificações?

● Primeira forma: tentar expressar um número razoável de cadeias que


pertençam à linguagem e tentar encontrar o padrão. (Documente isso
na sua avaliação escrita e exercícios!!)
● Ex.: Cadeias que contêm no máximo um b sobre o alfabeto Σ={a, b,c}
● Algumas cadeias que pertencem à linguagem:
● a, aa, ac, aac, abc, aaabc, c, b. (Díficil? Separe por comprimento da
cadeia):

Comprimento 0: ε
● Comprimento 1: a, b, c
● Comprimento 2: aa, ab, ba, ac, ca, cc, bc, cb.
● Comprimento 3: aaa, aab, …
● O que se pode pensar é: se tem no máximo 1 b, então pode não ter
bs. Logo, sua expressão deveria contemplar casos em que há b e
casos em que não há. Logo:
– r1= (a | c)* | (a|c)*b(a|c)* => r1= (a|c)*(ε | b(a|c)*) => r1= (a|c)*(ε | b)(a|c)*
Exemplos


Considere o alfabeto Σ={a, b, c}

● a = {a}

a* = {ε, a, aa, aaa, …}
● ab* = {a, ab, abb, abbb, ...}

(a | c)* = {ε, a, c, aa, ac, aac, cc, ccca, aaccc, …}
Exemplos


Conjunto de todas as cadeias sobre o alfabeto Σ={a, b, c} que
contenha somente um b.
● ( a | c ) * b ( a | c)* = {b, abc, abac, abaca, baaac, aaccbac, … }

● Conjunto de todas as cadeias que possuem no máximo um b.


● ( a | c ) * | ( a | c ) * b ( a | c )*

(a|c)*(b|ε)(a|c)*

– OBS: A mesma linguagem pode ser representada por muitas expressões regulares
diferentes.
Exemplos


Conjunto de todas as cadeias sobre o alfabeto Σ={a, b}
● ( a | b )*
● ( a* b* )* Por quê?
● ( a* b* )+


Conjunto de todas as cadeias sobre o alfabeto Σ={a, b, c}
● ( a | b | c )*
Exemplos

● Conjunto de todas as cadeias constituídas da concatenação de pares


de a's e b's.
● ( aa | bb )*

● aa(b)*c | aaac | ( a|c )* representa a linguagem que é a união de 3


outras linguagens:
● Todas as cadeias começando com a duplo seguido por qualquer
quantidade de b's seguido por c.
● A linguagem cadeia aaac.
● Todas as cadeias constituídas de a's e c's.
Exemplos

● Conjunto de todas as cadeias constituídas da concatenação de pares


de a's e b's. (do slide anterior)
● ( aabb)*

● (aa | bb)* deveria ser entendida como o conjunto de todas as cadeias


constituídas de um número arbitrário de pares de a's e b's.
Exercícios

Você também pode gostar