Você está na página 1de 4

Lista de exercícios #4 – Soluções

Prof. Jorge C. Lucero


4 de agosto de 2021

2.1 a. E ⇒ T ⇒ F ⇒ a

b. E ⇒ E+T ⇒ T +T ⇒ F +T ⇒ a+T ⇒ a+F ⇒ a+a

E + T

T F

F a

c. E ⇒ E+T ⇒ E+T +T ⇒ T +T +T ⇒ F +T +T ⇒ a+T +T ⇒ a+F +T ⇒ a+a+T ⇒ a+a+F ⇒ a+a+a

E + T

E + T F

T F a

F a

d. E ⇒ T ⇒ F ⇒ (E) ⇒ (T ) ⇒ (F ) ⇒ ((E)) ⇒ ((T )) ⇒ ((F )) ⇒ ((a))

( E )

( E )

2.3 Resposta no livro.


2.4 a. Resposta no livro.
b. S → 0R0 | 1R1 | 0 | 1
R → 0R | 1R | ε
c. S → 00S | 01S | 10S | 11S | 0 | 1
d. Resposta no livro.
e. S → 0S0 | 1S1 | 0 | 1 | ε
f. S → S

2.6 a. Resposta no livro.


b. O complemento de {an bn | n ≥ 0} é {am bn | m > n ≥ 0} ∪ {am bn | n > m ≥ 0} ∪ {w| w ∈ {a, b}∗ e w
possui a subcadeia ba}. Uma gramática para a união dessas três linguagens é
S→T |U |V
T → aT b | T b | b
U → aU b | aU | a
V → XbaX
X → aX | bX | ε
c. Resposta no livro.
d. Toda cadeia da linguagem tem a forma upv, onde u ∈ (Σ∗ #)∗ , v ∈ (#Σ∗ )∗ , e p pode ser: um palín-
dromo (caso em que i = j), ou uma cadeia da forma x#uxR (caso em que i 6= j). Então, construimos
a gramática usando três variaveis, U , V e P , que geram as cadeias u, v e p, respectivamente, e uma
quarta X que gera cadeias arbitrárias em Σ∗ .
S → UPV
P → aP a | bP b | #U | a | b | ε
U → U X# | ε
V → #XV | ε
X → aX | bX | ε

2.8 Resposta no livro.

2.9 S → BC | AD
B → aBb | ε
C → cC | ε
A → aA | ε
D → bDc | ε
A gramática é ambígua. A cadeia abc possui duas derivações mais à esquerda:
S ⇒ BC ⇒ aBbC ⇒ abC ⇒ abcC ⇒ abc,
S ⇒ AD ⇒ aAD ⇒ aD ⇒ abDc ⇒ abc.

2.13 a. L(G) é o conjunto de cadeias de 0s e #s tais que: ou contêm exatamente dois #s e qualquer quantidade
de 0s antes e depois de cada #, ou contêm exatamente um # e a quantidade de 0s à direita de # é o
dobro da quantidade de 0s à esquerda.
b. Suponha L(G) regular e faça A = L(G) ∩ 0∗ #0∗ . Se L(G) é regular, então A é regular e satisfaz o
lema do bombeamento. Seja p o comprimento de bombeamento. Considere a cadeia s = 0p #02p ∈ A,
de comprimento |s| = 3p + 1 ≥ p. Faça s = xyz, com |xy| ≤ p e |y| > 0. Então, y deve conter
somente 0s à esquerda de #. Faça y = 0k , com 0 < k ≤ p. Temos então xz = 0p−k #02p ∈ / A, pois a
quantidade de 0s à direita do # é menor que o dobro da quantidade de 0s à esquerda, o que comtradiz
o lema do bombeamento.

2.14 S → AB | CC | BA | BD | BB | ε
A → AB | CC | BA | BD | BB
B → CC
D → AB
C→0

2.15 Seja G: S → a. Então, A = L(G) = {a} e A∗ = {an | n ≥ 0}. Seguindo a construção indicada, G′ :
S → SS | a. No entanto, L(G′ ) = {an | n > 0} 6= A∗ .
2.16 Sejam L1 e L2 LLCs arbitrárias, e G1 = (V1 , Σ, R1 , S1 ) e G2 = (V2 , Σ, R2 , S2 ) as GLCs que as geram,
respectivamente. Suponha que V1 e V2 são disjuntos (caso não sejam, mude os nomes das variáveis para
obter conjuntos disjuntos). Então, as seguintes GLCs geram L1 ∪ L2 , L1 ◦ L2 e L∗1 , respectivamente:

i. (V1 ∪ V2 ∪ {S}, Σ, R1 ∪ R2 ∪ {S → S1 , S → S2 }, S),


ii. (V1 ∪ V2 ∪ {S}, Σ, R1 ∪ R2 ∪ {S → S1 S2 }, S),
iii. (V1 ∪ {S}, Σ, R1 ∪ {S → S1 S, S → ε}, S).

2.17 Seja R uma expressão regular sobre um alfabeto Σ. Mostramos como construir uma GLC G equivalente a
R, considerando os seis casos da definição formal de expressão regular.

i. R = a para algum a ∈ Σ. Então, G: S → a.


ii. R = ε. Então, G: S → ε.
iii. R = ∅. Então, G: S → S.
Os três casos restantes são: (iv) R = R1 ∪ R2 , (v) R = R1 ◦ R2 , e (vi) R = R1∗ , onde R1 e R2 são
expressões regulares sobre Σ. Sejam G1 e G2 as GLCs equivalentes a R1 e R2 , respectivamente. Para cada
caso, obtemos uma GLC G equivalente a R utilizando as construções do exercício 2.16.

2.19 L(G) é o conjunto de todas as cadeias em {a, b}∗ que não têm a forma an bn com n ≥ 0; i.e., L(G) =
{am bn | m > n ≥ 0} ∪ {am bn | n > m ≥ 0} ∪ {w ∈ {a, b}∗ | w contém a subcadeia ba}. O complemento é o
conjunto das cadeias que sim têm essa forma, e uma GLC para essa linguagem é S → aSb | ε.

2.26 Considere a derivação da cadeia w ∈ L(G), com |W | = n ≥ 1. Cada aplicação de uma regra do tipo
A → BC aumenta o comprimento da cadeia gerada em 1. Para gerar uma sequencia de n variáveis a
partir da variável inicial, é necessário aplicar n − 1 substituições desse tipo. Ainda, são necessárias n
aplicações de regras do tipo A → a para substituir todas as variáveis por terminais. Assim, w é gerada
com exatamente 2n − 1 substituições.

2.27 a. A cadeia if condition then if condition then a:= 1 else a:= 1 possui duas árvores sintáti-
cas diferentes:
hSTMTi

hIF-THENi

if condition then hSTMTi

hIF-THEN-ELSEi

if condition then hSTMTi else hSTMTi

hASSIGNi hASSIGNi

a := 1 a := 1
hSTMTi

hIF-THEN-ELSEi

if condition then hSTMTi else hSTMTi

hIF-THENi hASSIGNi

if condition then hSTMTi a := 1

hASSIGNi

a := 1

b. Na primeira derivação acima, else casa com o segundo if...then, enquanto que na segunda de-
rivação, else casa com o primeiro if...then. Podemos evitar a ambiguidade impossibilitando a
introdução de if...then antes de else. Desta forma, else sempre irá casar com o if...then mais
próximo. Assim, uma GLC não ambígua equivalente é:
hSTMTi → hASSIGNi | hIF-THENi | hMTCHi
hMTCHi → hASSIGNi | if condition then hMTCHi else hMTCHi
hIF-THENi → if condition then hSTMTi | if condition then hMTCHi
else hIF-THENi
hASSIGNi → a:= 1

Você também pode gostar