solucão em

Propaganda
Introdução a Teoria da Computação
Solução da Terceira Lista de Exercı́cios
Profa. Carmem Hara
Exercı́cio 1:
Considere a gramática G abaixo:
S ⇒ ASB | ǫ
A ⇒ aAb | ǫ
B ⇒ bBa | ba
a. Mostre uma derivação mais a esquerda da palavra aabbba.
S ⇒ ASB ⇒ aAbSB ⇒ aaAbbSB ⇒ aabbSB ⇒ aabbB ⇒ aabbba
b. Quantos passos de derivação tem o item (a). Resp: 6
c. Mostre uma derivação mais a direita da palavra abaabbbabbaa.
S ⇒ ASB ⇒ ASbBa ⇒ ASbbaa ⇒ AASBbbaa ⇒ AASbabbaa ⇒ AAbabbaa ⇒ AaAbbabbaa ⇒ AaaAbbbabbaa ⇒
Aaabbbabbaa ⇒ aAbaabbbabbaa ⇒ abaabbbabbaa
d. Construa a árvore de derivação dos itens (a) e (c).
S
A
S
S
a
A
b
a
A
b
ε
B
b
A
a
a
A
ε
ε
S
B
b
A
a
A
b
a
A
b
(a)
S
ε
B
b
b
a
B
b
a
a
(c)
ε
e. Qual a linguagem definida pela gramática (L(G)) ?
Ln1 .Ln2 , onde n ≥ 0, L1 = {ai bi | i ≥ 0} e L2 = {bj aj | j > 0}
Exercı́cio 2:
Construa uma gramática linear a direita que defina as linguagens abaixo.
a. (0 + 1)∗
Resp: S ⇒ ǫ | 0S | 1S
b. (0 + 1)(00 + 1)∗
Resp: S ⇒ 0A | 1A
A ⇒ 0B | 1A | ǫ
B ⇒ 0A
Exercı́cio 3:
Considere a gramática G abaixo.
S ⇒ aSA | ǫ
A ⇒ bA | ǫ
a. Construa uma expressão regular que defina L(G).
Resp: (ǫ + aa∗ b∗ )
b. Mostre que G é ambı́gua.
Resp: basta mostrar duas árvores de derivação distintas para a mesma palavra (no exemplo, aab).
c. Construa uma gramática não ambı́gua equivalente a G.
S ⇒ aAB | ǫ
A ⇒ aA | ǫ
B ⇒ bB | ǫ
1
S
S
a
S
A
a
S
A
ε
b
ε
a
S
A
a
S
A
ε
ε
A
b
A
ε
ε
Exercı́cio 4:
Mostre que todos os sı́mbolos da gramática G abaixo são úteis. Construa uma gramática equivalente Gc sem
transições em cadeia. Mostre que Gc contém sı́mbolos inúteis.
G: S → A | CB
A → C |D
B → bB | b
C → cC | c
D → dD | d
Sı́mbolos que geram palavras (seqêencis de terminais):
V ′ = {B, C, D} ∪ {S, A} = {S, A, B, C, D}
Sı́mbolos que podem ser gerados a partir de S em uma derivação:
V ′′ = {S, A, C, B} ∪ {D} = {S, A, B, C, D}
Eliminação de regras em cadeia:
encS = {S, A, C, D}
encA = {A, C, D}
encB = {B}
encC = {C}
encD = {D}
S → cC | c | dD | d | CB
A → cC | c | dD | d
B → bB | b
C → cC | c
D → dD | d
Sı́mbolos que geram palavras (seqêencis de terminais):
V ′ = {B, C, D} ∪ {S, A} = {S, A, B, C, D}
Sı́mbolos que podem ser gerados a partir de S em uma derivação:
V ′′ = {S, C, D, B}
Sı́mbolos inúteis = {A}
Exercı́cio 5:
A gramática G = ({S, A, B, C, D}, {a, b, c, d, e}, P, S), com as produções P listadas abaixo, possui transições
epsilon. Escreva uma gramática equivalente sem transições epsilon.
S → AB
S → bB
A → DA
A→a
A→ǫ
B
B
B
C
C
→ CA
→b
→C
→c
→ǫ
D → dS
D → BaC
D → eb
Resp:
E0 = {A, C} S
E1 = {A, C} {B} = {A, B, C}
2
S
E2 = {A, B, C} {S, B} = {S, A, B, C}
E3 = {S, A, B, C}
S → ǫ | AB | A | B | bB | b
A → DA | D | a
B → CA | C | A | b
C→c
D → dS | d | BaC | aC | Ba | a | eb
Exercı́cio 6:
Considere a gramática G abaixo.
E→E∨T
T→T∧F
F→a
E→T
T→F
F → (E)
onde Σ = {∨, ∧, (, ), a}. Construa a árvore sintática para as palavras a ∧ a ∨ a e a ∧ (a ∨ a).
a^ava
a ^ (a v a)
E
E
v
T
T
F
^
F
E
T
T
F
T
a
F
^
F
(
E
)
a
a
E
v
T
a
T
F
F
a
a
Construa uma gramática equivalente G′ sem produções em cadeia.
IE,0 = {T } S
IE,1 = {T } {F
S } = {T, F }
IE,2 = {T, F } {F } = {T, F }
IT,0 = {F }
E → E ∨ T | T ∧ F | a | (E)
T → T ∧ F | a | (E)
F → a | (E)
Exercı́cio 7:
Considere a gramática G = ({S}, {p, q, ∼, [, ], ⊃}, P, S) com as produções P listadas abaixo. Construa uma
gramática equivalente na forma normal de Chomsky.
S →∼ S | [S ⊃ S] | p | q
Resp:
S → N S | XF | p | q
N →∼
A→[
F →]
I →⊃
X →YS
3
Y → ZI
Z → AS
Exercı́cio 8:
Construa uma gramática na forma normal de Greibach que seja equivalente a gramática abaixo.
S → AA | 0
A → SS | 1
Resp:
1. Suponha que sejam dados os números 0 para S e 1 para A. Eliminar produções que possuem o primeiro
sı́mbolo do lado direito com número menor que o número do sı́mbolo do lado esquerdo.
S → AA | 0
A → AAS | 0S | 1
2. eliminar recursão a esquerda
S → AA | 0
A → 0SX | 1X | 0S | 1
X → ASX | AS
3. substituir lado direito de A em S e X
S → 0 | 0SXA | 1XA | 0SA | 1A
A → 0SX | 1X | 0S | 1
X → 0SXSX | 1XSX | 0SSX | 1SX | 0SXS | 1XS | 0SS | 1S
Exercı́cio 9:
Construa um autômato de pilha para cada uma das linguagens abaixo: Resp: aceitação por estado final e pilha
vazia
a.
b.
c.
d.
e.
(0 + 1)∗
(0 + 1)(00 + 1)∗
{an bn |n ≥ 0}
{am bn |1 ≤ m S
≤ n ≤ 2m}
{an bn |n ≥ 1} {an b2n |n ≥ 1}
1,E/E
0, E/E
1, E/E
q0
q0
a, E/A
0,E/E
0, E/E
q1
1, E/E
q2
q0
b,A/E
b, A/E
q1
0, E/E
(a)
(c)
(b)
a, E/A
a, E/A
q0
a,E/A
q1
b, A/E
b, A/E
b, A/E
q0
b, E/E
q2
a, E/A
b, A/E
q1
q2
q3
a, E/AA
b, A/E
b, A/E
q3
a, E/AA
(d)
(e)
Exercı́cio 10:
Seja L a linguagem {w ∈ {a, b}∗ | w tem um prefixo contendo mais b’s que a’s}. Por exemplo, baa, abba, abbaaa
são palavras em L, mas aab, e aabbab não pertencem a L.
1. construa um autômato de pilha que aceita L por estado final.
2. construa um autômato de pilha que aceita L por pilha vazia.
4
a, Z/AZ
a, A/AA
b, A/E
q1
a, E/AZ
q2
a, E/E
b, E/E
a, E/AZ
q1
q2
b, E/E
b, E/E
q3
a, Z/AZ
a, A/AA
b, A/E
b, Z/E
b, Z/E
q3
a, E/E
b, E/E
(2)
(1)
Resp:
Exercı́cio 11:
Diga se é possı́vel construir um autômato de pilha determinı́stico para as linguagens abaixo. Se afirmativo,
construa o autômato determinı́stico, caso contrário, justifique informalmente por que não é possı́vel que ele seja
determinı́stico.
1. {a2i b3i | i ≥ 0}
Resp:
a, E/E
q1
q2
b, B/E
a, E/BBB
q3
b, B/E
2. {ai bj ck | i = j ou j = k}
Resp: não é possı́vel construir um autômato determinı́stico porque não é possivel comparar i com j e j com
k ao mesmo tempo. Portanto, se a palavra comeca com a, temos que optar por contar a quantidade de a’s
ou simplesmente ignorá-los.
a, E/A
a, E/A
q1
...
aibic k
q0
a, E/E
q2
...
ajbic i
a, E/E
Exercı́cio 12:
Utilizando o algoritmo de transformação apresentado em sala de aula, construa o autômato de pilha que reconhece
a linguagem gerada pela gramática abaixo:
S → aABA | aBB | ǫ
A → bA | b
B → cB | c
Resp:
q0
a, E/ABA
a, E/BB
E, E/E
5
q1
b, A/A
b, A/E
c, B/B
c, B/E
Exercı́cio 13:
Considere o autômato com pilha M abaixo.
q0
b, A/E
q1
b, E/E
q2
b, A/E
a, E/A
a. Qual a linguagem aceita por M ?
Resp: {an b2n | n > 0}
a. Utilizando o algoritmo de transformação apresentado em sala de aula, construa a gramática que gera a
linguagem por M . Resp:
q0
b, A/E
q1
b, A/A
b, E/E
b, A/E
a, E/A
a. A/AA
S → [q0, ǫ, q2]
δ(q0, a, ǫ) = {(q0, A)}
[q0, ǫ, q0] → a[q0, A, q0]
[q0, ǫ, q1] → a[q0, A, q1]
[q0, ǫ, q2] → a[q0, A, q2]
δ(q0, a, A) = {(q0, AA)}
[q0, A, q0] →a[q0, A, q0][q0, A, q0] |
a[q0, A, q1][q1, A, q0] |
a[q0, A, q2][q2, A, q0]
[q0, A, q1] → a[q0, A, q0][q0, A, q1] |
a[q0, A, q1][q1, A, q1] |
a[q0, A, q2][q2, A, q1]
[q0, A, q2] → a[q0, A, q0][q0, A, q2] |
a[q0, A, q1][q1, A, q2] |
a[q0, A, q2][q2, A, q2]
δ(q0, b, A) = {(q1, ǫ)}
[q0, A, q0] → b[q1, ǫ, q0]
[q0, A, q1] → b[q1, ǫ, q1]
[q0, A, q2] → b[q1, ǫ, q2]
δ(q1, b, A) = {(q2, A)}
[q1, A, q0] → b[q2, A, q0]
[q1, A, q1] → b[q2, A, q1]
[q1, A, q2] → b[q2, A, q2]
δ(q1, b, ǫ) = {(q2, ǫ)}
[q1, ǫ, q0] → b[q2, ǫ, q0]
[q1, ǫ, q1] → b[q2, ǫ, q1]
[q1, ǫ, q2] → b[q2, ǫ, q2]
δ(q2, b, A) = {(q1, ǫ)}
[q2, A, q0] → b[q1, ǫ, q0]
6
q2
[q2, A, q1] → b[q1, ǫ, q1]
[q2, A, q2] → b[q1, ǫ, q2]
[q0, ǫ, q0] → ǫ
[q1, ǫ, q1] → ǫ
[q2, ǫ, q2] → ǫ
Após a eliminação dos sı́mbolos inúteis a gramática resultante é:
S → [q0, ǫ, q2]
[q0, ǫ, q2] → a[q0, A, q2]
[q0, A, q1] → a[q0, A, q1][[q1, A, q1] | a[q0, A, q2][q2, A, q1] | b[q1, ǫ, q1]
[q0, A, q2] → a[q0, A, q1][q1, A, q2] | a[q0, A, q2][q2, A, q2] | b[q1, ǫ, q2]
[q1, A, q1] → b[q2, A, q1]
[q1, A, q2] → b[q2, A, q2]
[q1, ǫ, q2] → b[q2, ǫ, q2]
[q2, A, q1] → b[q1, ǫ, q1]
[q2, A, q2] → b[q1, ǫ, q2]
[q0, ǫ, q0] → ǫ
[q1, ǫ, q1] → ǫ
[q2, ǫ, q2] → ǫ
Exercı́cio 14:
Use o pumping lemma para linguagens livres de contexto para provar que a linguagem {ai bj ci dj | i, j ≥ 0} não é
livre de contexto.
Resp: Seja L = {ai bj ci dj | i, j ≥ 0}. Suponha que L seja livre de contexto. Considere a palavra z = ak bk ck dk ,
onde k é a constante do Pumping Lemma. Particione z em uvwxy, tal que as condições do lema sejam satisfeitas.
Como |vwx| ≤ k não é possı́vel que vx contenha duas letras não consecutivas (por exemplo, a’s e c’s ou a’s e d’s)
porque elas estão k + 1 posições distantes uma da outra. Se v e x contiverem apenas a’s, então z ′ = uv 0 wx0 y
tem k b’s, k c’s, k d’s, mas menos a’s, uma vez que |vx| ≥ 1. Portanto z ′ 6∈ L, uma contradição. Os casos em que
vx contém apenas b’s, c’s, e d’s é semilar.
Se vx contiver a’s e b’s então z ′ = uv 0 wx0 y contém menos a’s e b’s que c’s e d’s e portanto z ′ 6∈ L. No caso
de vx conter b’s e c’s ou c’s e d’s encontramos uma contradição da mesma forma.
Como em todos os particionamento possı́veis encontramos uma contradição, podemos concluir que L não é
livre de contexto.
Exercı́cio 15:
Prove que a linguagem {an bk cl dm | n + l = k + m} é livre de contexto.
Resp: Construir um autômato com pilha que reconheça a linguagem. Idéia:
1. ler n a’s e empilhas n A’s.
2. ler k b’s, desempilhar k A’s e se k > n, empilhar k − n B’s.
3. ler c’s, desempilhar todos os B’s e empilhar os C’s restantes.
4. ler d’s, desempilhar A’s e C’s - rejeitar a palavra se encontrar B’s na pilha.
5. se a palavra pertence a L, a pilha deve estar vazia.
7
Download