Buscar

Parte 4

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
Texto base 
4 
 
Teoria da Computação 
Ana Paula Ferreira da Rocha 
Resumo 
Compreender a diferença entre as gramáticas e suas derivações é de suma importância 
para a execução dos autômatos, base de todas as linguagens de computação, já a teoria 
da ambiguidade nos mostra a importância de definirmos de forma assertiva as 
linguagens utilizadas para menor impacto nas linguagens de programação que serão 
geras a partir das gramáticas. 
Introdução 
 Abordaremos o conceito de gramáticas regulares e ambiguidade, com 
demonstrações de execução bem como tabelas e autômatos das definições que serão 
apresentadas, sua importância e a correta aplicação dos conceitos trazem as bases para as 
linguagens de programação, compreender o conceito de ambiguidade reduz a 
probabilidade de incompatibilidade com as linguagens de programação. 
 
 
4.1. Gramáticas regulares 
No conceito de gramáticas é possível definir tanto linguagens regulares como linguagens 
não regulares. Contudo é possível estabelecer restrições nas regras de produção, de forma 
a definir exatamente a classe das linguagens regulares. Possuímos mais uma forma de 
restringir as regras de produção de forma a definir uma gramática regular, para isso 
demonstraremos a seguir quatro destas formas chamadas gramáticas lineares. 
Seja G = (V, T, P, S) uma gramática e 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 se encontram em uma e em 
somente uma das seguintes formas: 
Gramática linear à direita (GLD) – todas as regras da produção são da forma: 
 A ⟶ wB ou A⟶ w 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
Gramática linear à esquerda (GLE) – todas as regras de produção são da forma: 
 A ⟶ Bw ou A⟶ w 
Gramática linear unitária à direita (GLUD) – todas as regras de produção são como na 
gramática linear à direita e adicionalmente: 
 | w | ≤ 1 
Gramática linear unitária à esquerda (GLUE) – todas as regras de produção são como na 
gramática linear à esquerda e adicionalmente: 
 | w | ≤ 1 
Nota-se que as gramáticas lineares possuem forte restrição no formato das produções: 
• O lado esquerdo possui exatamente uma variável; 
• 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 subpalavra eventualmente vazia de terminais. 
Devemos verificar se é possível definir uma gramática que satisfaça simultaneamente as 
quatros formas lineares. 
Para demonstramos a equivalência das gramáticas lineares utilizaremos L uma 
linguagem: 
 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. 
Isto é, as diversas formas das gramáticas lineares são formalismos equivalentes. 
Uma gramática G é dita uma gramática regular GR, se G é uma gramática linear. Vamos 
demonstrar uma linguagem gerada por uma gramática. 
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} 
 
Vamos ver os tipos de gramáticas regulares, usaremos para exemplificar a(ba)*, a 
linguagem a(ba)* é gerada pelas seguintes gramáticas regulares: 
Linear à direita: G = ({S, A}, {a, b}, P, S) e P possui as seguintes regras de produção: 
 S⟶aA 
 A⟶baA | 𝜺 
Linear à esquerda: G = ({S}, {a, b}, P, S) e P possui as seguintes regras de produção: 
 S⟶Sba | a 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
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 
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 
Outro exemplo de gramática regular: (a + b)*(aa + bb), assim a linguagem (a + b)*(aa 
+ bb) é gerada pelas seguintes gramáticas regulares: 
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 
Linear à esquerda: G = ({S, A}, {a, b}, P, S} e P possui as seguintes regras de produção: 
 S⟶Aaa | Abb 
 A⟶Aa | Ab | 𝜺 
Devemos observar que nas gramáticas lineares à esquerda e à direita possuem 
particularidades para compreendermos suponhamos | w | ≥ 1. Se uma gramática tiver 
simultaneamente produções do tipo produções do tipo A⟶wB (linear à direita) e do tipo 
A⟶Bw (linear à esquerda), então a linguagem correspondente gerada poderá não ser 
regular, ou seja, esta não é uma gramática regular. Por exemplo, já abordamos que uma 
linguagem que possua duplo balanceamento não é regular. Em particular a seguinte 
linguagem não é regular: 
 {an bn | n ∈ N} 
Contudo é possível desenvolver uma gramática, com produções lineares à direita e à 
esquerda, que gera esta linguagem. Veremos dois teoremas que mostram que a classe das 
gramáticas regulares denota exatamente a classe das linguagens regulares. 
Gramática regular ⟶ linguagem regular 
Se L é uma linguagem gerada por uma gramática regular, então L é uma linguagem 
regular. 
Prova – por indução 
Para 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, 𝜹, q0, F) 
Tal que (suponha qf ∉ V): 
 ∑ = T 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
 Q = V ∪ {qf} 
 F = {qf} 
 q0 = S 
 𝜹 é construída como ilustrado na tabela abaixo (suponha A e B variáveis e a 
terminal) simulando as derivações de G, ou seja: 
 
 ACEITA(M) = GERA(G) 
 
 
Tabela 1.1 Transições construídas a partir das produções 
tipo da produção transição gerada 
A⟶ 𝜺 𝜹(A, 𝜺) = {qf} 
A⟶a 𝜹(A, a) = {qf} 
A⟶B1 | ... | Bn 𝜹(A, 𝜺) = {B1, ..., Bn} 
A⟶aB1 | ... | aBn 𝜹(A, a) = {B1, ..., Bn} 
Fonte: Paulo Blauth Menezes, 2011. 
 
A demonstração que, de fato, ACEITA(M) = GERA(G) é por indução no número de 
derivações, como segue (suponha 𝜶 elemento de (T ∪ V)* e w elemento de T*): 
a) Base de indução – Suponha que S⟹1 𝜶, então, se: 
a.1) 𝜶 = 𝜺, existe uma regra S⟶ 𝜺, por construção de M, 𝜹(S, 𝜺) = {qf} 
a.2) 𝜶 = a, existe uma regra S⟶a, por construção de M, 𝜹(S, a) = {qf} 
a.3) 𝜶 = A, existe uma regra S⟶A, por construção de M, 𝜹(S, 𝜺) = {A} 
a.4) 𝜶 = aA, existe uma regra S⟶aA, por construção de M, 𝜹(S, a) = {A} 
 
b) Hipótese de indução – Suponha que S⟹n 𝜶, n > 1, então, se: 
b.1) 𝜶 = w, então 𝜹*(S, w) = {qf} 
b.2) 𝜶 = wA, então 𝜹*(S, w) = {A} 
 
c) Passo de indução – Suponha que S⟹n+1 𝜶, obrigatoriamente ocorre somente a 
hipótese b.2 acima, então: 
 
 S⟹n wA⟹1 𝜶 
 
c.1) 𝜶 = w𝜺 = w, existe uma regra A⟶ 𝜺, logo: 
 𝜹*(S, w𝜺) = 𝜹(𝜹*(S, w), 𝜺) = 𝜹(A, 𝜺) = {qf} 
c.2) 𝜶 = wb = w, existe uma regra A⟶b, logo: 
 𝜹*(S, wb) = 𝜹(𝜹*(S, w), b) = 𝜹(A, b) = {qf} 
c.3) 𝜶 = wB, existe uma regra A⟶B, logo: 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
 𝜹*(S, w𝜺) = 𝜹(𝜹*(S, w), 𝜺) = 𝜹(A, 𝜺) = {B} 
c.4) 𝜶 = wbB, existe uma regra A⟶bB, logo: 
 𝜹*(S, wb) = 𝜹(𝜹*(S, w), b) = 𝜹(A, b) = {B} 
 
Para construirmos um AFN𝜺 a partir de uma gramática regular, podemos considerar a 
seguinte gramática linear à direita: 
 G = ({S, A, B}, {a, b}, P, S) 
Onde P é tal que: 
 S⟶aA 
 A⟶bB | 𝜺 
 B⟶aA 
O AFN𝜺 M que reconhece a linguagem gerada pela gramática G é: 
 M = ({a, b}, {S, A, B, qf}, 𝜹, S, {qf}) 
 
Para melhor entendimento observe a figura abaixo e a tabela: 
 
Figura 1.1 Autômato Finito construído a partir de uma gramática regular 
 
Fonte: Paulo Blauth Menezes, 2011. 
 
Tabela 1.2 Transições construídas a partir das produções 
produção transição 
S⟶aA𝜹(S, a) = {A} 
A⟶bB 𝜹(A, b) = {B} 
A⟶ 𝜺 𝜹(A, 𝜺) = {qf} 
A⟶aA 𝜹(B, a) = {A} 
Fonte: Paulo Blauth Menezes, 2011. 
Linguagem Regular ⟶ Gramática regular 
Se L é linguagem regular, então existe G, gramática regular que gera L. 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
Prova – por indução 
Se L é uma linguagem regular, então existe um AFD M = (∑, Q, 𝜹, q0, F) tal que 
ACEITA(M) = L. A ideia central da demonstração é construir uma gramática linear à 
direita G a partir de M tal que: 
 GERA(G) = ACEITA(M) 
Ou seja, cuja derivação simula a função programa estendida, seja a gramática regular: 
 G = (V, T, P, S) 
Tal que, suponhamos S ∉ Q: 
 V = Q ∪ {S} 
 T = ∑ 
 P é construído como vemos na tabela abaixo, supondo qi, qk elementos de 
Q, qf elemento de F e a elemento de ∑: 
 
Tabela 1.3 Transições construídas a partir das produções 
transição produção 
- S⟶q0 
- qf ⟶ 𝜺 
𝜹(qi, a) = qk qi ⟶ aqk 
Fonte: Paulo Blauth Menezes, 2011. 
 
A demonstração de que, de fato GERA(G) = ACEITA(M) é por indução no tamanho da 
palavra como segue supondo w elemento de ∑*: 
Base de indução – seja w tal que | w | = 0, por definição vale que S⟶q0 é produção. Se 
𝜺 ∈ ACEITA(M), então q0 é o estado final e por definição vale que q0⟶ 𝜺 é produção. 
Logo: 
 S⟹q0⟹ 𝜺 
Hipótese de indução – seja w tal que | w | = n (n ≥ 1) e 𝜹*(q0, w) = q, assim se: 
 b.1) q não é estado final então suponha que S⟹n wq 
 b.2) q é estado final então suponha que S⟹n wq⟹ w (este caso não é 
importante para o passo de indução). 
Passo de indução – seja w tal que | wa | = n + 1 e 𝜹*(q0, wa) = p, então: 
 𝛿(𝛿*(q0, w), a) = 𝛿(q, a) = p 
Portanto, obrigatoriamente ocorre somente a hipótese b.1, demonstrada acima, se: 
 c.1) p não é estado final, então S⟹n wq⟹1 wap 
 c.2) p é estado é final, então S⟹n wq⟹1 wap⟹1 wa 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
 
Para construção de uma gramática regular a partir de um AFD consideramos o autômato 
finito determinístico: 
 M = ({a, b, c}, {q0, q1, q2}, 𝜹, q0, {q0, q1, q2}) 
A figura abaixo se refere a gramática regular correspondente é construída: 
 G = ({q0, q1, q2, S}, {a, b, c}, P, S) 
 
Figura 1.2 Diagrama do autômato finito determinístico 
 
 
Fonte: Paulo Blauth Menezes, 2011. 
E P é dado pela tabela abaixo: 
 
Tabela 1.4 Produções construídas a partir de transições 
transição produção 
- S⟶q0 
- q0 ⟶ 𝜺 
- q1 ⟶ 𝜺 
- q2 ⟶ 𝜺 
𝜹(qo, a) = q0 q0 ⟶ aq0 
𝜹(qo, a) = q1 q0 ⟶ bq1 
𝜹(q1, b) = q1 q1 ⟶ bq1 
𝜹(q1, c) = q2 q1 ⟶ cq2 
𝜹(q2, c) = q2 q2 ⟶ cq2 
Fonte: Paulo Blauth Menezes, 2011. 
 
 
 
 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
Você sabia? 
Ficou curioso em aprofundar seu conhecimento sobre Gramática Regular? Vamos 
assistir a um vídeo sobre o assunto. Assista ao vídeo Gramática Regular e 
Transformações – com o Prof. José Rui. Disponível em: 
< https://www.youtube.com/watch?v=CzaVNvWMXz0&t=11s>. Acesso em: 18 abr. 
2023. 
 
4.2. Ambiguidade 
Como vimos diversas vezes uma gramática pode gerar a mesma cadeia de diversas formas 
diferentes. 
Esta cadeia terá árvores sintáticas diferentes e por consequência vários significados 
diferentes. Sendo que o resultado pode ser indesejável para certas aplicações, por exemplo 
em linguagens de programação onde um programa deve ter apenas uma única 
interpretação. 
Já que uma gramática pode gerar a mesma cadeia de diversas maneiras diferentes, 
dizemos que a cadeia é derivada ambiguamente naquela gramática. E se esta gramática 
gera alguma cadeia ambiguamente dizemos que a gramática é ambígua. Por exemplo, 
consideraremos a gramática G5: 
 
<EXPR> ⟶ <EXPR> + <EXPR> | <EXPR> * <EXPR> | (<EXPR>) | a 
 
Esta gramática gera a cadeia a+a*a ambiguamente. 
 
Figura 1.3 Duas árvores sintáticas para a cadeia a+a*a na gramática G5 
 
Fonte: Michael Sipser, 2007. 
 
Como podemos ver essa gramática não captura as relações de precedência usuais e, 
portanto, pode agrupar o + antes do * ou vice-versa. Neste momento formalizamos a 
noção de ambiguidade, ao dizermos que uma gramática gera uma cadeia ambiguamente, 
significa que a cadeia tem duas árvores sintáticas diferentes e não duas derivações 
diferentes. Duas derivações podem diferenciar-se na sua estrutura, portanto vamos focar 
sobre a estrutura definindo um tipo de derivação que substitui variáveis em ordem fixada. 
Uma derivação de uma cadeia w em uma gramática G é uma derivação à esquerda, se a 
cada passo a variável à esquerda restante é aquela a ser substituída. 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
Já uma cadeia w é derivada ambiguamente na gramática livre do contexto G se ela tem 
duas ou mais derivações à esquerda. A gramática G é ambígua se ela gera alguma cadeia 
ambiguamente. 
 
 
 
Você sabia? 
Como vimos a ambiguidade ocorre quando uma gramática gera a mesma cadeia de 
várias formas diferentes? Assista ao vídeo Ambiguidade em GLCs. Disponível em: 
< https://www.youtube.com/watch?v=gM6_X-zedyQ>. Acesso em: 16 abr. 2023. 
 
 
 
Considerações finais 
 Entender a diferença entre gramáticas e suas derivadas é de suma importância na 
implementação de autômatos, que é a base de todas as linguagens de computador, pois a 
teoria da ambiguidade nos mostra a importância de definir as linguagens utilizadas para 
minimizar o impacto nas linguagens de programação aritmética a ser gerada a partir de 
regras gramaticais. Abordamos o conceito de gramáticas regulares e de ambiguidade, com 
demonstrações de execução bem como tabelas e autômatos das definições que foram 
expostas, sua importância e a correta aplicação dos conceitos fundamentam as linguagens 
de programação, o entendimento do conceito de a ambiguidade reduz a probabilidade de 
incompatibilidade com linguagens de programação. 
 
Teoria da Computação 
 
Núcleo de Educação a Distância | Faculdade Impacta 
Referências 
DIVERIO, Tiarajú Asmuz; MENEZES, Paulo Blauth. Teoria da Computação: 
máquinas universais e computabilidade. Porto Alegre: Bookman, 2011. 
MENEZES, Paulo Blauth. Linguagens Formais e Autômatos. 6. ed. Porto Alegre: 
Bookman, 2011. 
SIPSER, Michael. Introdução à Teoria da Computação. 2. ed. São Paulo: Cengage 
Learning, 2007.

Outros materiais