Curso: Ciência da Computação Turma: 7ª Série
Linguagens Formais e Autômatos
Aula 7
Aspectos Teóricos da Computação
Aspectos Teóricos da Computação 2/26
Notas de Aula
Avaliação 15 de Abril.
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.
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.
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)
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.
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,...}
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.
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.
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
ε
ε
ε ε
ε
Є
Aspectos Teóricos da Computação 11/26
ER convertida para Autômatoa*(aa+bb)
a ε a
b ε b
ε
ε ε
ε
ε a εε
ε
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
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.
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.
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.
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}
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
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 | ε
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.
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
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.
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
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
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
Aspectos Teóricos da Computação 25/26
Ler
● Seçao 3.6 do livro.
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))*