Você está na página 1de 21

Gramáticas Livres de Contexto

25 de novembro de 2011

Definição 1 Uma Regra (ou produção) é um elemento do conjunto V × (V ∪ Σ)∗ .


Sendo que V é um conjunto finito de elementos chamados de “variáveis” e Σ
um conjunto disjunto chamado de “Al fabeto”. Uma regra [A, w] normalmente
é escrita como A → w.

Definição 2 Uma Gramática Livre de Contexto é uma quádrupla (V, Σ, P, S),


onde V é um conjunto finito de variáveis, Σ (ou o Alfafeto) é um conjunto finito
de sı́mbolos terminais, P é um conjunto finito de regras, e S é um elemento de
V chamado de sı́mbolo inicial. Os conjuntos V e Σ são disjuntos.

Definição 3 Uma Árvore de Derivação de uma palavra pertencente à uma


lingüagem gerada por uma gramática livre de contexto, é uma árvore construı́da
iterativamente da seguinte forma:
1. Inicialize a árvore com a raı́z S.
2. Se A → x1 x2 . . . xn com xi ∈ (V ∪ Σ) é a regra de derivação aplicada à
palavra uAv, então adicione x1 , x2 , . . . , xn como filhos de A na árvore.
3. Se A → λ é a única regra de derivação aplicada à palavra uAv, então
adicione λ como o único filho de A na árvore.

Definição 4 Uma Gramática Regular é uma gramática livre de contexto


na qual toda regra de derivação tem uma das seguintes formas:
1. A → a
2. A → aB
3. A → λ

Exercı́cios da Seção 0

Exercı́cio 1 - Seja G a gramática

S → abSc | A

A → cAd | cd.

1
a) Dê uma derivação de ababccddcc.

S → abSc
→ ababScc
→ ababAcc
→ ababcAdcc
→ ababccddcc

b) Construa a árvore de derivação da derivação do exercı́cio anterior.

c) Use a notação de conjuntos para definir L(G).


L(G) = {(ab)m cn dn cm |m, n ≥ 0}

Exercı́cio 2 - Seja G a gramática

S → ASB | λ
A → aAb | λ
B → bBa | ba

a) Dê uma derivação à esquerda de aabbba.

S → ASB
→ aAbSB
→ aaAbbSB
→ aabbSB
→ aabbB
→ aabbba

b) Dê uma derivação à direita de abaabbbabbaa.

2
S → ASB
→ ASbBa
→ ASbbaa
→ AASBbbaa
→ AASbabbaa
→ AAbabbaa
→ AaAbbabbaa
→ AaaAbbbabbaa
→ Aaabbbabbaa
→ aAbaabbbabbaa
→ abaabbbabbaa

c) Construa a árvore de derivação para as duas derivações anteriores.

d) Use a notação de conjuntos para definir L(G).

L(G) = {An B n , n ≥ 0}
A = {an bn , n ≥}0
B = {bn an , n > 0}

Exercı́cio 3 - Seja G a gramática

S → SAB | λ
A → aA | a
B → bB | λ

a) Dê uma derivação à esquerda de abbaab.

S → SAB
→ SABAB
→ ABAB
→ aBAB

3
→ abBAB
→ abbBAB
→ abbAB
→ abbaAB
→ abbaaB
→ abbaabB
→ abbaab

b) Dê duas derivações à esquerda de aa.

S → SAB
S → SAB → SABAB
→ AB → ABAB
→ aAB → aBAB
→ aaB → aAB
→ aa → aaB
→ aa

c) Construa a árvore de derivação das duas derivações da questão anterior.

d) Dê uma expressão regular para L(G).


(aa∗ b∗ )∗

Exercı́cio 4 - Seja DT a árvore de derivação

a) Dê uma derivação à esquerda que gera a árvore DT .

S → AB

4
→ aAB
→ aaB
→ aaAB
→ aaaB
→ aaab

b) Dê uma derivação à direita que gera a árvore DT .

S → AB
→ AAB
→ AAb
→ Aab
→ aAab
→ aaab

c) Quantas derivações diferentes podem gerar DT ?


Existem ao todo 17 diferentes derivações que resultam nesta árvore.

Exercı́cio 5 - Dê uma derivação à direita e à esquerda correspondente à cada


árvore de derivação abaixo.

5
S → AA S → AA S → AA S → AA
→ aA → AAAA → AAAA → Aa
→ aAAA → AAAa → aAAA → AAAa
→ abAAA → AAbAa → abAAA → AAbAa
→ abaAA → AAbaa → abaAA → AAbaa
→ ababAA → AbAbaa → ababAA → AbAbaa
→ ababaA → Ababaa → ababaA → Ababaa
→ ababaa → ababaa → ababaa → ababaa

A quarta árvore é igüal à primeira e a terceira é igüal à segunda. Ou ao menos deveria ser,
há um erro na imagem apresentada no livro. A segunda árvore está errada e não pode ser
gerada pela gramátida dada como exemplo.

Exercı́cio 6 - Para cada uma das seguintes gramáticas livres de contexto, use
a notação de conjuntos para definir a lingüagem gerada pela gramática.
a)

S → aaSB | λ
B → bB | b

L(G) = {a2n bm |m ≥ n ≥ 0}
b)

S → aSbb | A
A → cA | c

L(G) = {ai cn b2i |n, i ≥ 0}


c)

S → abSdc | A
A → cdAba | λ

L(G) = {(ab)m (cd)n (ba)n (dc)m |m > 0, n ≥ 0}


d)

S → aS | bA | λ
A → aA | bS

L(G) = {(A ∪ B)n |n ≥ 0}

6
A = {an |n ≥ 0}
B = {bn |n > 0}

Exercı́cio 7 - Construa uma gramática sobre {a, b, c} cuja lingüagem é


{an b2n cm |n, m > 0}.

S → AC
A → aAbb | λ
C → cC | λ

Exercı́cio 8 - Construa uma gramática sobre {a, b, c} cuja lingüagem é


{an bm c2n+m |n, m > 0}.

S → aScc | bAc | λ
A → bAc | λ

Exercı́cio 9 - Construa uma gramática sobre {a, b, c} cuja lingüagem é


{an bm ci |0 ≤ n + m ≤ i}.

S → aScC | bAcC | C | λ
A → bAcC | λ
C → cC | λ

Exercı́cio 10 - Construa uma gramática sobre {a, b} cuja lingüagem é


{am bn |0 ≤ n ≤ m ≤ 3n}.

S → aSb | aaSb | aaaSb | λ

Exercı́cio 11 - Construa uma gramática sobre {a, b} cuja lingüagem é


{am bi an |i = m + n}.

S → AB | λ
A → aAb | λ
B → bBa | λ

7
Exercı́cio 12 - Construa uma gramática sobre {a, b} cuja lingüagem é o
conjunto de palavras com o mesmo número de as e bs.

S → aSb | bSa | abS | baS | λ

Exercı́cio 13 - Para cada uma das seguintes gramáticas regulares, dê uma
expressão regular para a lingüagem gerada pela gramática.
a)

S → aA
A → aA | bA | b

a(a ∪ b)∗ b
b)

S → aA
A → aA | bB
B → bB | λ

aa∗ b∗ b
c)

S → aS | bA
A → bB
B → aB | λ

a∗ bba∗
d)

S → aS | bA | λ
A → aA | bS

(a∗ ba∗ ba∗ )∗

Exercı́cio 14 - Construa uma gramática sobre {a, b} cuja lingüagem é o


conjunto de palavras de tamanho ı́mpar e que contém o mesmo sı́mbolo no
começo e na posição do meio.

8
S → A|B
A → aA′ a | aA′ b | a
B → bB ′ a | bB ′ b | a

A → aA′ a | aA′ b | bA′ a | bA′ b | a

B → aB ′ a | aB ′ b | bB ′ a | bB ′ b | b

Exercı́cio 15 - Dê uma gramática regular para o conjunto das palavras sobre
{a, b, c} nas quais todos os as precedem bs, que por sua vez precedem cs, sendo
possı́vel que não hajam as, bs ou cs.

S → λ | aS | aB | bB | cC
B → bB | bC | λ
C → cC | λ

Exercı́cio 16 - Dê uma gramática regular para a mesma lingüagem do


exercı́cio anterior, mas sem a palavra vazia.

S → aS | aB | bB | cC
B → bB | bC | λ
C → cC | λ

Exercı́cio 17 - Dê uma gramática regular para o conjunto de palavras de


tamanho dois ou mais sobre {a, b} nos quais todos os as precedem os bs.

S → aA | bB
A → aA′ | bB ′
A′ → aA′ | λ
B → bB ′

B → bB ′ | λ

Exercı́cio 18 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} que contém a subpalavra aa e bb.

9
S → aQ | bQ | aA | bB
Q → aQ | bQ | aA | bB
A → aQ′
B → bQ′′

Q → aQ′ | bQ′ | bB ′
′′
Q → aQ′ | bQ′ | aA′

A → aQ′′′

B → bQ′′′
Q′′′ → aQ′′′ | bQ′′′ | λ

Exercı́cio 19 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} nas quais a subpalavra aa aparece ao menos duas vezes.

S → aQ | bQ | aA
Q → aQ | bQ | aA
A → aQ′
Q′ → aQ′ | bQ′ | aA′

A → aQ′′
′′
Q → aQ′′ | bQ′′ | λ

Exercı́cio 20 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} que não contém aa.

S → aN | bS | cS | λ
N → bS | cS | λ

Exercı́cio 21 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} que não começa com aaa.

S → aA′ | bS ′ | λ

S → aA′ | bS | λ

A → bS ′ | aA′′ | λ
′′
A → bS ′ | λ

10
Exercı́cio 22 - Dê uma gramática regular para o conjunto de palavras sobre
{a, b} que não contém aaa.

S → aA′ | bS | λ

A → bS | aA′′ | λ
′′
A → bS | λ

Exercı́cio 23 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} que não contém aba.

S → aA′ | bS | λ

A → aS | bA′′ | λ
A′′ → bS | λ

Exercı́cio 24 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} que contém a subpalavra aa exatamente uma vez.

S → aQ | bQ | aA
Q → aQ | bQ | aA
A → aQ′

Q → aQ′ | bQ′ | λ

Exercı́cio 25 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} que começa com a, contém exatamente dois bs e termina com cc.

S → aQ
Q → aQ | bQ′ | cQ
Q′ → aQ′ | bQ′′ | cQ′
Q′′ → aQ′′ | cQ′′ | cC
C → c

Exercı́cio 26 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} que contém ab e contém ba.

11
S → aS | bS | cS | aA | bB
A → aS | cS | bQ
B → aQ′ | cS | bS
Q → aQ | bQ | bB ′ | cQ

Q → aQ′ | bQ′ | cQ′ | aA′

A → bQ′′ | aQ′ | cQ′

B → bQ | aQ′′ | cQ
′′
Q → aQ′′ | bQ′′ | cQ′′ | λ

Exercı́cio 27 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} que contém aa, bb e cc.

S → aS | bS | cS | aA | bB | cC
A → aD | cS | bS
B → aS | cS | bE
C → aS | cF | bS
D → aD | bD | cD | bB ′ | cC ′
E → aE | bE | cE | aA′ | cC ′′
F → aF | bF | cF | aA′′ | bB ′′ Af → aQ | bA− | cA−
′ −
A → aC | cE | bE Bf → aB − | bQ | cB −
A′′ → aB − | cF | bF Cf → aC − | bC − | cQ
B′ → aD | cD | bC − Q → aQ | bQ | cQ | λ
B ′′ → aF | cF | bA−
C′ → aD | bD | cB −
′′
C → aE | bE | cA−

A → aA− | bA− | cA− | aAf

B → aB − | bB − | cB − | bBf
C− → aC − | bC − | cC − | cCf

Exercı́cio 28 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} nas quais todo b é seguido por pelo menos um c.

S → aS | cS | bB
B → cS

Exercı́cio 29 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} com tamanho três.

12
S → aA | bA | cA
A → aB | bB | cB
B → a|b|c

Exercı́cio 30 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} com tamanho menor que três.

S → aA | bA | cA | λ
A → a|b|c|λ

Exercı́cio 31 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} com tamanho maior que três.

S → aA | bA | cA
A → aB | bB | cB
B → aC | bC | cC
C → aD | bD | cD
D → aD | bD | cD | λ

Exercı́cio 32 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} nas quais o número de as é divisı́vel por três.

S → aA | bS | λ
A → aB | bA
B → aS | bB

Exercı́cio 33 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} nas quais o número total de bs e cs é três.

S → aS | bA | cA
A → aA | bB | cB
B → aB | bC | cC
C → aC | λ

13
Exercı́cio 34 - Dê uma gramática regular para o conjunto de palavras sobre
{a, b} nas quais todo a é seguido ou precedido por b.

S → aB | bA | λ
A → aS | bA | λ
B → bA

Exercı́cio 35 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} de tamanho ı́mpar e que contém bb.

S → aI | bI | bB
I → aS | bS | bB ′
B → bI ′

B → bP ′

I → aF | bF
F → aI ′ | bI ′ | λ
P′ → aX | bX | λ
X → aP ′ | bP ′

Exercı́cio 36 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} de tamanho par e que contém exatamente um a.

S → aP ′ | bI | cI
I → aI ′ | bS | cS

P → bX | cX | λ
X → bP ′ | cP ′
I′ → bF | cF
F → bI ′ | cI ′ | λ

Exercı́cio 37 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b, c} com um número ı́mpar de ocorrências de ab.

S → aA | bS | cS
A → bI | bS | cS
I → aA′ | bI | cI | λ
A → bS | bI | cI | λ

14
Exercı́cio 38 - Dê uma gramática regular para o conjunto de palavras sobre
{a, b} com tamanho ı́mpar e exatamente dois bs.

S → aI | bBi
I → aS | bBp
Bi → aP ′ | bPf
Bp → aI ′ | bIf

P → aI ′ | bIf
I′ → aP ′ | bPf
Pf → aX | λ
X → aPf
If → aF
F → aIf | λ

Exercı́cio 39 - Dê uma gramática regular para o conjunto de palavras sobre


{a, b} com um número par de as ou ı́mpar de bs.

S → aB | bA | λ
A → aC | bS | λ
B → aS | bC
C → aA | bB | λ

Exercı́cio 40 - A gramática abaixo gera (b∗ ab∗ ab8 )+ , o conjunto de todas as


palavras com um número par e positivo de as. Prove.

S → AA
A → AAA | bA | Ab | a

À medida que fazemos qualquer derivação nesta gramática, o número total de variáveis As
e terminais as que conseguimos é sempre par. Quando temos somente S, temos zero As, e
portanto um número par. Derivando S → AA, passamos a ter dois As, e portanto, um número
par. A derivação A → AAA remove um A existente e coloca mais três. Logo, somam-se dois
As quando fazemos isso e se o número de As era par, ele continua par. A mesma propriedade
se mantém para A → bA e A → Ab, pois o valor total é o mesmo. E por fim, A → a somente
troca a variável A pelo terminal a, mantendo o número par do total de variáveis A e terminais
a.
Logo após a primeira derivação, a única variável que podemos encontrar é A, portanto,
só precisamos levar em conta ela ao analizar as derivações possı́veis.
Qualquer A pode gerar qualquer quantidade de bs à sua esquerda ou direita de modo
recursivo. Mas a recursão só encerra quando o A gera um a por meio de A → a. Portanto,

15
confirmamos a propriedade de que esta gramática sempre gerará uma quantidade par de as.
E que podemos ter qualquer quantidade e bs intercalando os as.
Resta demonstrar que o número de as não pode ser nulo. Para que isso ocorrêsse, pre-
cisarı́amos ter uma derivação na qual não geramos nenhum A. Mas isso é impossı́vel, pois
a única derivação inicial possı́vel é S → AA. Portanto, encerramos a demonstração de tais
propriedades das palavras geradas por essa gramática.

Exercı́cio 41 - Prove que a gramática abaixo gera a lingüagem


{an bm cm d2n |n ≥ 0, m > 0}.

S → aSdd | A
A → bAc | bc

Primeiro demonstraremos que quando todos os sı́mbolos aparecem em uma palavra, eles sem-
pre aparecem na ordem especificada. A derivação S → aSdd é a única na qual a variável
inicial aparece à direita. Portanto, isso garante que quando temos todos os sı́mbolos, os as
aparecem primeiro e os ds por último. Como S → A e A → bAc e A → bc, não existindo
outras derivações de A, garantimos que entre os as e os ds sempre encontramos um ou mais
bs e cs nesta ordem.
Verifica-se que geramos sempre o dobro de ds que de as pela derivação S → aSdd, a única
que gera tais terminais.
Verifica-se que temos sempre um número igüal de bs e cs pela derivação A → bAc e A → bc,
as únicas que geram tais terminais. Portanto, para cada b gerado, sempre geramos um c e
vice-versa.
Podemos ter um número nulo de as e ds. Basta optarmos como derivação inicial S → A.
Fazendo isso, acabamos com as variáveis S e isso faz com que nenhum a ou d possa ser
derivado.
Entretanto, sempre temos ao menos um b e c. Para que a recursividade das derivações se
encerrem, é preciso que em algum momento façamos S → A, pois é a única forma de encerrar a
recursão de S. Uma vez tendo derivado A, a única derivação não-recursiva possı́vel é A → bc.
Não há outra. Portanto, sempre teremos ao menos um b e c.
Demonstramos assim todas as propriedades pedidas da lingüagem gerada pela gramática.

Exercı́cio 42 - Seja G a gramática abaixo, prove que


L(G) = {an bm |0 ≤ n < m}.

S → aSb | B
B → bB | b

Todo B gera um ou mais bs, não sendo capaz de gerar outros terminais. Isso ocorre por que
todo B é derivado como B → bB, que pode gerar potencialmente infinitos bs graças à recursão
ou é derivado como B → b, que gera um b e é também a única opção de encerrar a recursão
da primeira derivação.
Como S → aSb, temos que as palavras geradas pela lingüagem podem sempre começar
com as e terminar com bs. A outra derivação possı́vel para S é S → B, que é uma derivação
obrigatória para toda palavra, pois é a única forma de encerrar a recursão de S. Quando ela
é usada, ou não temos qualquer terminal gerado, ou temos um número igüal de as e bs, com
os bs depois dos as.
Como B pode gerar qualquer número positivo de bs (é equivalente à b+ , temos que quando
finalmente usamos S → B, que o número de bs será sempre maior que o de as, pois B gerará

16
no mı́nimo um b quando tı́nhamos um número igüal dos dois sı́mbolos. E depois disso nenhum
a poderá ser gerado.
Por fim, o número de as pode ser nulo, bastando aplicar como derivação inicial S → B.
Mas o número de bs nunca é nulo, pois é obrigatório derivarmos um B para qualquer palavra
e isso sempre nos trás ao menos um b.

Exercı́cio 43 - Seja G a gramática

S → aSaa | B
B → bbBdd | C
C → bd

.
a) O que é L(G)?
L(G) = {an bm dm a2n |n ≥ 0, m > 0, m é ı́mpar}
b) Prove.
A ordem dos sı́mbolos é garantida, pois a única forma de gerar as é por meio de S → aSaa, o
que faz com que se existirem as, eles sempre estarão no começo e no fim. Por sua vez, a única
outra derivação possı́vel de S é S → B, e B só pode gerar bs e ds nesta ordem por meio de
B → bbBdd e B → C → bd.
Podem existir zero ou mais as. Nenhum a é derivado se a derivação inicial for S → B. O
número de as no fim é sempre o dobro do número do começo. Isso é válido quando não temos
as, que é o caso inicial (0 = 0 × 2), e permanece válido para toda derivação S → aSaa, que
faz com que para cada a derivado no começo, derivemos o dobro no fim.
O menor número possı́vel de bs e ds é um, pois a única derivação que não gera variáveis,
somente terminais é C → bd. O que significa que obrigadoriamente um de cada um destes
terminais deve ser gerado. A menor palavra gerada então, é obtida por meio de S → B →
C → bd.
O número de bs e ds é sempre igüal, pois as únicas derivações que os geram é B → bbBdd
e C → bd. As duas geram sempre o mesmo número de bs e ds.
Por fim, este número é sempre ı́mpar, pois uma vez que derivamos um único B (o que
sempre ocorre em toda palavra), teremos sempre um número par de bs e ds enqüanto usamos
a derivação B → bbBdd recursivamente. Mas uma vez que formos encerrar a recursão, acaba-
remos usando B → C → bd, adicionando um de cada sı́mbolo. Como até este ponto tı́nhamos
um número par de cada um dos sı́mbolos, quando enfim adicionamos mais um, passamos a
ter uma quantidade ı́mpar.

Exercı́cio 44 - Seja G a gramática

S → aSbS | aS | λ.

Prove que todo prefixo de um palavra em L(G) tem ao menos tantos as como
bs.

Isso equivale a demonstrar que o número de as nunca será menor que o de bs.
A derivação S → aSbS gera o mesmo número de as e bs. A derivação S → aS gera um
número maior de as que de bs. E a derivação S → λ não altera o número de as e bs.
Portanto, nunca teremos menos as que bs.

17
Exercı́cio 45 - Usando a definição de Pascal do Apêndice III do livro,
construa uma derivação de xly à partir de < variavel >.

< variavel > → < variavel inteira >


→ < identif icador variavel >
→ < identif icador >
→ < letra > {< letra ou digito >}
→ < letra >< letra > {< letra ou digito >}
→ < letra >< letra >< letra >
→ x < letra >< letra >
→ xl < letra >
→ xly

Exercı́cio 46 - Usando a definição de Pascal do Apêndice III do livro,


construa uma derivação de (xly) à partir de < expressao >.

< expressao > → < expressao simples >


→ < termo >
→ < f ator >
→ (< expressao >)
→ (< termo >)
→ (< f ator >)
→ (< variavel >)
→ (< variavel inteira >)
→ (< identif icador variavel) >
→ (< identif icador >)
→ (< letra > {< letra ou digito >})
→ (< letra >< letra > {< letra ou digito >})
→ (< letra >< letra >< letra >)
→ (x < letra >< letra >)
→ (xl < letra >)
→ (xly)

Exercı́cio 47 - Usando a definição de Pascal do Apêndice III do livro,


construa uma derivação de (x ∗ y ∗ 5) à partir de < expressao >.

< expressao > → < expressao simples >


→ < termo >

18
→ < f ator >
→ (< expressao >)
→ (< expressao simples >)
→ (< termo >)
→ (< termo >< operador multiplicacao >< f ator >)
→ (< termo >< operador multiplicacao >< f ator >< operador multiplicacao >< f ator >)
→ (< f ator >< operador multiplicacao >< f ator >< operador multiplicacao >< f ator >)
→ (< f ator > ∗ < f ator >< operador multiplicacao >< f ator >)
→ (< f ator > ∗ < f ator > ∗ < f ator >)
→ (< variavel > ∗ < f ator > ∗ < f ator >)
→ (< variavel > ∗ < variavel > ∗ < f ator >)
→ (< variavel > ∗ < variavel > ∗ < unsigned constant >)
→ (< variavel inteira > ∗ < variavel > ∗ < unsigned constant >)
→ (< identif icador variavel > ∗ < variavel > ∗ < unsigned constant >)
→ (< identif icador > ∗ < variavel > ∗ < unsigned constant >)
→ (< letra > ∗ < variavel > ∗ < unsigned constant >)
→ (x∗ < variavel > ∗ < unsigned constant >)
→ (x∗ < variavel inteira > ∗ < unsigned constant >)
→ (x∗ < identif icador variavel > ∗ < unsigned constant >)
→ (x∗ < identif icador > ∗ < unsigned constant >)
→ (x∗ < letra > ∗ < unsigned constant >)
→ (x ∗ y∗ < unsigned number >)
→ (x ∗ y∗ < unsigned number >)
→ (x ∗ y∗ < unsigned integer >)
→ (x ∗ y∗ < digito >)
→ (x ∗ y ∗ 5)

Exercı́cio 48 - Usando a definição de Pascal do Apêndice III do livro,


construa uma derivação de (x + y ∗ (12 + z)) à partir de < expressao >.

< expressao > → < expressao simples >


→ < termo >
→ < f ator >
→ (< expressao >)
→ (< expressao simples >)
→ (< expressao simples >< operador soma >< termo >)
→ (< termo >< operador soma >< termo >)
→ (< f ator >< operador soma >< termo >)
→ (< variavel >< operador soma >< termo >)
→ (< variavel inteira >< operador soma >< termo >)
→ (< identif icador variavel >< operador soma >< termo >)
→ (< identif icador >< operador soma >< termo >)

19
→ (< letra >< operador soma >< termo >)
→ (x < operador soma >< termo >)
→ (x+ < termo >)
→ (x+ < termo >< operador multiplicacao >< f ator >)
→ (x+ < f ator >< operador multiplicacao >< f ator >)
→ (x+ < variavel >< operador multiplicacao >< f ator >)
→ (x+ < variavel inteira >< operador multiplicacao >< f ator >)
→ (x+ < identif icador variavel >< operador multiplicacao >< f ator >)
→ (x+ < identif icador >< operador multiplicacao >< f ator >)
→ (x+ < letra >< operador multiplicacao >< f ator >)
→ (x + y < operador multiplicacao >< f ator >)
→ (x + y∗ < f ator >)
→ (x + y ∗ (< expressao >))
→ (x + y ∗ (< expressao simples >))
→ (x + y ∗ (< expressao simples >< operador soma >< termo >))
→ (x + y ∗ (< termo >< operador soma >< termo >))
→ (x + y ∗ (< f ator >< operador soma >< termo >))
→ (x + y ∗ (< unsigned constant >< operador soma >< termo >))
→ (x + y ∗ (< unsigned constant >< operador soma >< termo >))
→ (x + y ∗ (< unsigned number >< operador soma >< termo >))
→ (x + y ∗ (< unsigned integer >< operador soma >< termo >))
→ (x + y ∗ (< digito >< digitos >< operador soma >< termo >))
→ (x + y ∗ (< digito >< digito >< operador soma >< termo >))
→ (x + y ∗ (1 < digito >< operador soma >< termo >))
→ (x + y ∗ (12 < operador soma >< termo >))
→ (x + y ∗ (12+ < termo >))
→ (x + y ∗ (12+ < f ator >))
→ (x + y ∗ (12+ < variavel >))
→ (x + y ∗ (12+ < variavel inteira >))
→ (x + y ∗ (12+ < identif icador >))
→ (x + y ∗ (12+ < letra >))
→ (x + y ∗ (12 + z))

Exercı́cio 49 - Seja G1 e G2 as seguintes gramáticas:

G1 : S→ aABb G2 : S′ → A′ A′ B ′ B ′
A→ aA | a A′ → A′ A′ | a
B→ bB | b B′ → B′B′ | b

a) Para cada variável X, mostre que o lado direito de cada regra de G1 é


derivável de sua variável correspondente X ′ usando as regras de G2 . Use isso
para concluir que L(G1 ) ⊆ L(G2 ).

20
Pela definição b é derivável de B ′ . A outra derivação de B é B → bB. Mas bB pode
ser derivável de B ′ fazendo B ′ → B ′ B ′ → bB ′ . Como para a outra derivação de B ′ , já
demonstramos ser equivalente à uma derivação de B, temos então que bB ′ é equivalente à bB.
Portanto, tudo que pode ser derivado de B, pode ser derivado de B ′ .
O mesmo raciocı́nio demonstra que A e A′ são equivalentes.
Portanto, S ′ → A′ A′ B ′ B ′ é equivalente à S ′ → AABB. Basta continuar derivando
AABB → aABB → aABb, que verificamos que a última regra que faltava analizar das duas
gramáticas são equivalentes. Sendo assim, L(G1 ) = L(G2 ), e portanto, L(G1 ) ⊆ L(G2 ).

b) Prove que L(G1 ) = L(G2 ).


Vide resposta anterior.

Exercı́cio 50 - Uma gramática linear direita é uma gramática livre de


contexto cujas regras tem uma das seguintes formas:
1. A → w
2. A → wB
3. A → λ,
onde w ∈ Σ∗ . Prove que uma lingüagem L é gerada por uma gramática linear
direita se, e somente se, L é gerada por uma gramática regular.

Se |w| = 0, o primeiro tipo de regra vira igüal ao terceiro e ambos são regras de gramáticas
regulares. Já a regra A → B pode ser substituı́da por A → x, para todo x tal que B → x.
Portanto, se as outras regras forem compatı́veis com a de uma gramática regular, esta regra
também será.
Se |w| = 1, então não há diferença alguma entre a regra de uma gramática linear direita
e uma gramática livre de contexto.
Se |w| > 1, assumindo que para w = aw′ , a ∈ Σ, w′ ∈ Σ∗ e que as regras do tipo A → w′ ,
A → w′ B temos algo equivalente às regras de uma gramática regular, podeos escrever A → w
e A → wB de modo que também seja equivalente à uma gramática regular. Para A → w,
basta reescrever como A → w′ A′ e A′ → a. Para A → wB, basta reescrever como A → w′ B ′ ,
B ′ → aB.
Com isso, demonstramos que toda gramática linear direita pode ser reduzida à uma
gramática regular. Temos também que toda gramática regular é também uma gramática
linear direita. Com isso, demonstramos que os dois tipos de gramática são equivalentes.

Exercı́cio 51 - Tente construir uma gramática regular que gere a lingüagem


{an bn |n ≥ 0}. Explique por que nenhuma das suas tentativas foi bem-sucedida.

Nem vou tentar. Essa não é uma lingüagem regular. É preciso memorizar de alguma forma
o número de as escrito para poder escrever a quantidade de bs. Isso não é possı́vel com
gramáticas regulares, pois não há como memorizar isso de forma alguma.

Exercı́cio 52 - Tente construir uma gramática livre de contexto que gere a


lingüagem {an bn cn |n ≥ 0}. Explique por que nenhuma das suas tentativas foi
bem-sucedida.

Nem vou tentar. Não é possı́vel, pois tendo somente um sı́mbolo do lado esquerdo de uma
regra, não é possı́vel garantir uma quantia igüal de três sı́mbolos diferentes em uma lingüagem.
A lingüagem especificada não é livre de contexto.

21

Você também pode gostar