aula 7 expressão regular

26
Curso: Ciência da Computação Turma: 7ª Série Linguagens Formais e Autômatos Aula 7 Aspectos Teóricos da Computação

Upload: wab030

Post on 06-Jun-2015

8.263 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Aula 7   expressão regular

Curso: Ciência da Computação Turma: 7ª Série

Linguagens Formais e Autômatos

Aula 7

Aspectos Teóricos da Computação

Page 2: Aula 7   expressão regular

Aspectos Teóricos da Computação 2/26

Notas de Aula

Avaliação 15 de Abril.

Page 3: Aula 7   expressão regular

Aspectos Teóricos da Computação 3/26

Linguagens Regulares

● O estudo das linguagens regulares é abordado usando os seguintes formalismos:➔ Autômato Finito. Trata-se de um formalismo

operacional ou reconhecedor, sendo basicamente, um sistema de estados finitos;

➔ Expressão Regular. Trata-se de um formalismo denotacional, também considerado gerador, o qual é definido a partir de conjuntos (linguagens) básicos e das operações de concatenação e de união;

➔ Gramática Regular. Trata-se de um formalismo axiomático ou gerador o que, como o nome indica, é uma gramática, mas com restrições de forma das regras de produção.

Page 4: Aula 7   expressão regular

Aspectos Teóricos da Computação 4/26

Expressão Regular● Toda linguagem regular pode ser descrita por uma

expressão denominada Expressão Regular.

● Uma expressão regular é definida a partir de conjuntos básicos (linguagens) e operações de concatenação e de união.

● As expressões regulares são consideradas adequadas para a comunicação humano x humano e, principalmente, para a comunicação humano x máquina.

● A expressão regular é a maneira mais compacta e mais simples de descrever conjuntos regulares, e é usada com essa finalidade em construção de compiladores, editores, sistemas operacionais, protocolos, etc.

Page 5: Aula 7   expressão regular

Aspectos Teóricos da Computação 5/26

Expressão Regular, Linguagem GeradaUma Expressão Regular (frequentemente abreviada por ER) sobre um alfabeto ∑ é indutivamente definida como segue:a) Base de Indução. a.1) A expressão : Ø é expressão regular e denota a linguagem vazia. a.2) A expressão:

ε é uma expressão regular e denota a linguagem que contém exclusivamente a palavra vazia: {ε} a.3) Para qualquer símbolo x Є ∑, a expressão: X é uma expressão regular e denota a linguagem que contém exclusivamente a palavra constituída pelo símbolo x: {x}

b) Passo de Indução. Se r e s são expressões regulares e denotam a linguagem R e S, respectivamente, então: b.1) União. A expressão (r+s) é expressão regular e denota a linguagem R U S b.2) Concatenação. A expressão (rs) é expressão regular e denota a linguagem: R S = {uv | u Є R e v Є S}

b.3) Concatenação sucessiva. A expressão (r*) é expressão regular e denota a linguagem R*

Se r é uma expressão regular, a correspondente linguagem denotada é dita a Linguagem Gerada por r, sendo representada por:

L(r) ou GERA(R)

Page 6: Aula 7   expressão regular

Aspectos Teóricos da Computação 6/26

Expressão Regular, Linguagem Gerada

A omissão de parênteses em uma ER é usual, respeitando as seguintes convenções:

● A concatenação sucessiva tem precedência sobre a concatenação e a união;

● A concatenação tem precedência sobre a união.

Page 7: Aula 7   expressão regular

Aspectos Teóricos da Computação 7/26

Expressão RegularDetalhando a linguagem gerada pela expressão (a+b)*(aa+bb), vale que:

● a e b denotam {a} e {b}, respectivamente● a + b denota {a} U {b} = {a,b} (Lembre-se que o elemento

vazio também está aqui.)● (a+b)* denota {a,b}*● aa e bb denotam {a}{a} = {aa} e {b}{b} = {bb},

respectivamente● (aa + bb) denota {aa} U {bb} = {aa,bb}● (a+b)*(aa+bb) denota {a,b}*{aa,bb}

Portanto, GERA((a+b)*(aa+bb)) correponde à seguinte linguagem:

{aa,bb,aaa,abb,baa,bbb,aaaa,aabb,abaa,abbb,baaa,babb,bbaa,bbbb,...}

Page 8: Aula 7   expressão regular

Aspectos Teóricos da Computação 8/26

Exemplo: Expressão RegularExpressão Regular Linguagem Gerada

aa Somente a palavra aa

ba* Todas as palavras que iniciam por b, seguido por zero ou mais a's

(a+b)* Todas as palavras sobre {a,b}

(a+b)*aa(a+b)* Todas as palavras contendo aa como subpalavra

a*ba*ba* Todas as palavras contendo exatamente dois b's

(a+b)*(aa+bb) Todas as palavras que terminam com aa ou bb.

(a+ε)(b+ba)* Todas as palavras que não possuem dois a consecutivos.

Page 9: Aula 7   expressão regular

Aspectos Teóricos da Computação 9/26

Expressão Regular → Linguagem Regular

Por definição, uma linguagem regular é regular se, e somente se, é possível construir um autômato finito (determinístico, não determinístico ou de movimentos vazios) que reconheça essa linguagem. Assim, dada uma expressão regular r qualquer é possível construir um autômato finito.

Page 10: Aula 7   expressão regular

Aspectos Teóricos da Computação 10/26

Expressão Regular Autômato Finito Correspondente

a

b

a*

aa

bb

aa+bb

a

b

a

ε a εε

ε

a ε a

b ε b

a ε a

b ε b

ε

ε

ε ε

ε

Є

Page 11: Aula 7   expressão regular

Aspectos Teóricos da Computação 11/26

ER convertida para Autômatoa*(aa+bb)

a ε a

b ε b

ε

ε ε

ε

ε a εε

ε

Page 12: Aula 7   expressão regular

Aspectos Teóricos da Computação 12/26

Gramática RegularGramáticas Lineares

Seja G={V,T,P,S} uma gramática. Sejam A e B elementos de V e w uma palavra de T*. Então G é uma Gramática Linear se todas as suas produções encontram-se em uma e em somente uma das seguintes formas:

a) Gramática Linear à Direita (abreviada por GLD). Todas as regras de produção são da forma:

A → wB ou A → w

b) Gramática Linear à Esquerda (abreviada por GLE). Todas as regras de produção são da forma:

A → Bw ou A → w

c) Gramática Linear Unitária à Direita (abreviada por GLUD). Todas as regras de produção são como na gramática linear à direita e, adicionalmente:

|w| <= 1

d) Gramática Linear Unitária à Esquerda (abreviada por GLUE). Todas as regras de produção são como na gramática linear à esquerda e, adicionalmente:

|w| <=1

Page 13: Aula 7   expressão regular

Aspectos Teóricos da Computação 13/26

Gramática RegularNote-se que, nas gramáticas lineares, o lado direito de uma produção é constituído por, no máximo, uma variável. Adicionalmente, esta variável, se existir, sempre antecede (linear à esquerda) ou sucede (linear à direita) qualquer sub-palavra (eventualmente vazia) de terminais.

Page 14: Aula 7   expressão regular

Aspectos Teóricos da Computação 14/26

Equivalência das Gramáticas Regulares

Seja L uma linguagem. Então:

L é gerada por uma GLD se, e somente se,

L é gerada por uma GLE se, e somente se,

L é gerada por uma GLUD se, e somente se,

L é gerada por uma GLUE

● Ou seja, as diversas formas das gramáticas lineares são formalismos equivalentes.

Page 15: Aula 7   expressão regular

Aspectos Teóricos da Computação 15/26

Gramática Regular

Uma gramática G é dita uma Gramática Regular, eventualmente abreviada GR, se G é uma gramática linear.

Page 16: Aula 7   expressão regular

Aspectos Teóricos da Computação 16/26

Linguagem Gerada

Seja G=(V, T, P, S) uma gramática. A Linguagem Gerada pela gramática G, denotada por:

L(G) ou GERA(G)

É tal que:

L(G) = {w є T* | S → +w}

Page 17: Aula 7   expressão regular

Aspectos Teóricos da Computação 17/26

Exemplo: Gramática Regular: a(ba)*A linguagem a(ba)* é gerada pelas seguintes gramáticas regulares:(a) Linear à Direita. G=({S,A}, {a,b}, P, S), e P possui as seguintes

regras de produção S → aA A → baA | ε(b) Linear à Esquerda. G=({S}, {a,b}, P, S), e P possui as seguintes

regras de produção S → Sba | a(c)Linear Unitária à Direita. G=({S,A,B}, {a,b}, P, S), e P possui as

seguintes regras de produção S → aA A → bB | ε B → aA(d)Linear Unitária à Esquerda. G=({S,A}, {a,b}, P, S), e P possui as

seguintes regras de produção S → Aa | a A → Sb

Page 18: Aula 7   expressão regular

Aspectos Teóricos da Computação 18/26

Gramática Regular: (a+b)*(aa+bb)

A linguagem (a+b)*(aa+bb) é gerada pelas seguintes gramáticas regulares:

(a) Linear à Direita. G=({S,A}, {a,b}, P, S), e P possui as seguintes regras de produção

S → aS | bS | A

A → aa | bb

(b) Linear à Esquerda. G=({S}, {a,b}, P, S), e P possui as seguintes regras de produção

S → Aaa | Abb

A → Aa | Ab | ε

Page 19: Aula 7   expressão regular

Aspectos Teóricos da Computação 19/26

Gramática Linear à Esquerda e Linear à Direita

Suponha |w| >= 1. Se uma gramática tiver simultaneamente produções do tipo A → wB (linear à direita) e do tipo A → Bw (linear a esquerda), então a correspondente linguagem gerada poderá não ser regular, ou seja, esta não é uma gramática regular.

Por exemplo, a linguagem a seguir não é regular:

{ anbn | n є N }

Entretanto, é possível desenvolver uma gramática, com produções lineares à direita e à esquerda, que gera esta linguagem.

Page 20: Aula 7   expressão regular

Aspectos Teóricos da Computação 20/26

Gramática Regular → Linguagem Regular

Se L é uma linguagem gerada por uma gramática regular, então L é uma linguagem regular. Prova: Por induçãoPara mostrar que uma linguagem é regular, é suficiente construir um autômato finito que a reconheça. Suponha G=(V,T,P,S) uma gramática linear unitária à direita. Então o AFNε : M=( ∑, Q,δ,q

0, F)

Tal que: (suponha qf não pertence a V):

∑ = TQ = V U {q

f}

F = {qf}

q0 = S

δ é construída como ilustrado na tabela (Suponha A e B variáveis e a terminal) simula as derivações de G, ou seja: ACEITA(M) = GERA(G)

A demonstração que, de fato, ACEITA(M) = GERA(G) é por indução no número de derivações. (Vamos omitir essa demonstração mas ela pode ser vista na página 77 do livro texto.)

Tipo da Produção

Transição Gerada

A → ε δ(A,ε) = qf

A → a δ(A,a) = qf

A → B δ(A,ε) = B

A → aB δ(A,a) = B

Page 21: Aula 7   expressão regular

Aspectos Teóricos da Computação 21/26

Exemplo: Construção de um AFNε a partir de uma gramática regular

Considere a seguinte gramática linear unitária à direita, G=({S,A,B},{a,b},P,S) onde P é tal que:

S → aA A → bB | ε B → aA

O AFNε que reconhece a linguagem gerada pela gramática G é:

5 minutos para fazer.

Page 22: Aula 7   expressão regular

Aspectos Teóricos da Computação 22/26

Exemplo: Construção de um AFNε a partir de uma gramática regular

Considere a seguinte gramática linear unitária à direita, G=({S,A,B},{a,b},P,S) onde P é tal que:

S → aA A → bB | ε B → aA

O AFNε que reconhece a linguagem gerada pela gramática G é:

M = ({a,b}, {S,A,B,qf},δ,S,{q

f})

Produção Transição

S → aA δ(S,a) = A

A → bB δ(A,b) = B

A → ε δ(A,ε) = qf

B → aA δ(B,a) = A

S qfa A

B

b a

εA

Page 23: Aula 7   expressão regular

Aspectos Teóricos da Computação 23/26

Construção de uma Gramática Regular a partir de um AFD

Considere o autômato finito determinístico:

M = ({a,b,c}, {q0,q

1,q

2},δ,q

0,{q

0,q

1,q

2})

A gramática correspondente regular construída é?

5 minutos.

q0

q2b cq

1

a b c

Page 24: Aula 7   expressão regular

Aspectos Teóricos da Computação 24/26

Considere o autômato finito determinístico:

M = ({a,b,c}, {q0,q

1,q

2},δ,q

0,

{q0,q

1,q

2})

A gramática correspondente regular construída é?

G = ({q0,q

1,q

2,S}, {a,b,c}, P,S)

onde P é dado pela tabela:

Construção de uma Gramática Regular a partir de um AFD

q0

q2b cq

1

a b c

Transição Produção

- S → q0

- q0 → ε

- q1 → ε

- q2 → ε

δ(q0,a)=q

0q

0 → aq

0

δ(q0,b)=q

1q

0 → bq

1

δ(q1,b)=q

1q

1 → bq

1

δ(q1,c)=q

2q

1 → cq

2

δ(q2,c)=q

2q

2 → cq

2

Page 25: Aula 7   expressão regular

Aspectos Teóricos da Computação 25/26

Ler

● Seçao 3.6 do livro.

Page 26: Aula 7   expressão regular

Aspectos Teóricos da Computação 26/26

Exercícios1. (Exercício 3.7 do livro) Desenvolva expressões regulares que gerem as seguintes linguagens sobre

∑ = {a,b}:

(a) {w | w tem no máximo um par de a como subpalavra e no máximo um par de b como subpalavra.

(b) {w | qualquer para de a antecede qualquer par de b}

(c) {w | w não possui aba como subpalavra}

2. Descreva em palavras as linguagens geradas pelas seguintes expressões regulares:

(a) (aa+b)*(a+bb)

(b) (b+ab)*(ε +a)

(c) (aa +bb + (aa+bb) (ab+ba)(aa+bb))*