Você está na página 1de 24
Linguagens Formais Expressões Regulares Prof. Valdemar Neto Adaptado do Material do Professor Gustavo Teodoro Laureano

Linguagens Formais

Expressões Regulares

Prof. Valdemar Neto

Adaptado do Material do Professor Gustavo Teodoro Laureano

Revisão Aula Passada

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

Revisão dos Conceitos Básicos

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

Σ={0,1}

Σ={a, b, c,

Σ={if, then, else, while}

, z }

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

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

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

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

Linguagens Formais

Uma linguagem formal pode ser um conjunto do tipo:

L = { w

L = { w

* | w tem a propriedade P }

* | 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

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

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

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 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

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

equivale ao conjunto

R U S RS R*

rs

r*

equivale ao conjunto

Operações de Expressões Regulares

Operações de Expressões Regulares

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

operador de alternância

Dessa forma, se uma cadeia está na linguagem M | N, a cadeia pertence à linguagem M ou à linguagem N.

|

gera uma nova expressão regular M | 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

. 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.

de concatenação

gera uma nova expressão regular M.N . Dessa

Operações de Expressões Regulares

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?

As repetições possuem precedência maior. De forma que * recebe precedência maior que | .

(a | b)*

ou

a | (b)*

?

Operações de Expressões Regulares

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

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

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?

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:

r 1 = (a | c)* | (a|c)*b(a|c)*

=> r 1 = (a|c)*( | b(a|c)*)

=> r 1 = (a|c)*( | b)(a|c)*

Exemplos

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

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

|

) * b (

| c

a | c )* ) *

) ( a

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

Exemplos

Exemplos

Conjunto de todas as cadeias sobre o alfabeto ={a, b}

( a | b )*

( a* b* )*

( a* b* ) +

Por quê?

Conjunto de todas as cadeias sobre o alfabeto ={a, b, c}

( a | b | c )*

Exemplos

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 )*

outras linguagens:

representa a linguagem que é a união de 3

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

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

Exercícios