Você está na página 1de 7

1. Construa gramática livres de contexto que gerem as seguintes linguagens.

a)
L1 = {ai bj c* | i ≠ j}
𝐺 = (𝑉, , 𝑃, 𝑆)
𝑉 = {𝑆, 𝐴, 𝐵, 𝐶, 𝑎, 𝑏, 𝑐}
 = {𝑎, 𝑏, 𝑐}
𝑁 = {𝑆, 𝐴, 𝐵, 𝐶}
𝑆=𝑆
𝑃={
𝑆  𝐴𝐶|𝐵𝐶|𝑎𝐴𝑏𝑐|𝑎𝐵𝐵𝐶.
𝐴  𝑎𝐵|𝑎|𝑎𝐴𝑏.
𝐵  𝑏𝐵|𝑏|𝑎𝐵𝑏.
𝐶  𝑐𝐶|
}

b)
L2 = {ai bj ck | i = j + k}
𝐺 = (𝑉, , 𝑃, 𝑆)
𝑉 = {𝑆, 𝐴, 𝐵, 𝐶, 𝑎, 𝑏, 𝑐}
 = {𝑎, 𝑏, 𝑐}
𝑁 = {𝑆, 𝐴, 𝐵, 𝐶}
𝑆=𝑆
𝑃={
𝑆  𝐴𝐶|𝐵𝐶,
𝐴 𝑎𝐴𝑐|𝐵,
𝐵 𝑎𝐵𝑏|𝐶,
𝐶 
}

1
c)
L3 = {ai bj ck | j = i + k}
𝐺 = (𝑉, , 𝑃, 𝑆)
𝑉 = {𝑆, 𝐴, 𝐵, 𝐶, 𝑎, 𝑏, 𝑐}
 = {𝑎, 𝑏, 𝑐}
𝑁 = {𝑆, 𝐴, 𝐵, 𝐶}
𝑆=𝑆
𝑃={
𝑆  𝐵𝐴|𝐵𝐶|𝐴𝐶,
𝐴  𝑏𝐴𝑐|𝐶
𝐵  𝑎𝐵𝑏|𝐶,
𝐶
}

2. Linguagens livre de contexto são geradas por gramáticas dos tipos 2 ou 3. No entanto,
existem algumas linguagens livres de contexto que só podem ser geradas por gramáticas do
tipo 2.
a)
Qual é o aspecto linguístico que diferencia esta classe de linguagens das demais que
também podem ser geradas por gramáticas do tipo 3?
Resposta: O aspecto linguístico principal que difere as gramáticas do tipo 3 para o tipo
2, é o uso de parênteses. Nele, é permitido tratar o balanceamento de de parênteses e
blocos de programas. Já as do tipo 2, esse aspecto não é permitido.

b)
De que forma este aspecto se manifesta nas gramáticas utilizadas para definir tais
linguagens?
Resposta: Se manisfesta através de construções alinhadas, expressões aritméticas
delimitadas por parênteses, contrução de fluxos de controle, contrução de programas,
blocos, módulos, procedimentos e funções.

3. Considere cada uma das gramáticas abaixo definidas:


◦ ({S, X, a}, {a}, {S → a, S → X, X → a, S → SS}, S)
◦ ({S, a}, {a}, {S → a, S → S, S → SS}, S)

2
Para cada uma das gramáticas, responda: A gramática em questão é ambígua? Justifique sua resposta.
𝑆 → 𝑆𝑆 → 𝑋𝑆 → 𝑎𝑆 → 𝑎𝑎
𝑆 → 𝑆𝑆 → 𝑋𝑆 → 𝑎𝑆 → 𝑎𝑥 → 𝑎𝑎
𝑆 → 𝑆𝑆 → 𝑎𝑆 → 𝑎𝑎

Resposta: A primeira representação é ambígua, pois ela contém árvores distintas na


derivação até a esquerda onde elas chegam no resultado, mas a segunda expressão não é
ambígua, porque a mesma possui apenas uma árvore para a sentença 𝑎𝑎.

4. Considere a gramática livre de contexto G apresentada a seguir e construa uma gramática


equivalente, em que tenham sido eliminadas as produções em vazio, produções simples, os
símbolos inúteis e inacessíveis.
G = (V, Σ, P, S)
V = {S, A, B, C, D, E, F, a, b, c, d, e, f}
Σ = {a, b, c, d, e, f}
P = {S → aAa | A,
A → ε | B | cCDd,
B → bSbb | b | ε,
C → aaAaa | ε,
D → CDd | dD,
E → Ff,
F → f | eEe}

• Eliminando as produções vazias:

𝐸0 = {𝐴, 𝐵, 𝐶}
𝐸1 = {𝐴, 𝐵, 𝐶, 𝑆}
𝐸2 = {𝐴, 𝐵, 𝐶, 𝑆} ∴ 𝐸 = 𝐸2
𝑃′ = {𝑆 → 𝑎𝐴𝑎|𝐴|𝑎𝑎,
𝐴 → 𝐵|𝑐𝐶𝐷𝑑|𝑐𝐶𝑑|𝑐𝐷𝑑,
𝐵 → 𝑏𝑆𝑏𝑏|𝑏|𝑏𝑏𝑏,
𝐶 → 𝑎𝑎𝐴𝑎𝑎|𝑎𝑎𝑎𝑎,
𝐷 → 𝐶𝐷𝑑|𝑑𝐷,
𝐸 → 𝐹𝑓,
𝐹 → 𝑓|𝑒𝐸𝑒,

3
𝑆′ → 𝑆|𝜀}

• Eliminação das produções unitárias:

𝑁𝑠 = {𝑆, 𝐴, 𝐵}
𝑁𝑎 = {𝐴, 𝐵}
𝑁𝑠′ = {𝑆′, 𝑆, 𝐴, 𝐵}
𝑃′′ = {𝑆 → 𝑎𝐴𝑎|𝑐𝐶𝐷𝑑|𝑐𝐶𝑑|𝑐𝐷𝑑|𝑎𝑎,
𝐴 → 𝑏𝑆𝑏𝑏|𝑏|𝑏𝑏𝑏|𝑐𝐶𝐷𝑑|𝑐𝐷𝑑|𝑐𝐷𝑑,
𝐵 → 𝑏𝑆𝑏𝑏|𝑏|𝑏𝑏𝑏,
𝐶 → 𝑎𝑎𝐴𝑎𝑎|𝑎𝑎𝑎𝑎,
𝐷 → 𝐶𝐷𝑑|𝑑𝐷,
𝐸 → 𝐹𝑓,
𝐹 → 𝑓|𝑒𝐸𝑒,
𝑆′ → 𝑎𝐴𝑎|𝑐𝐶𝐷𝑑|𝑐𝐶𝑑|𝑐𝐷𝑑|𝑎𝑎|𝜀}

• Eliminação dos símbolos inúteis:

𝑁0 = ∅
𝑁1 = {𝑆, 𝐴, 𝐵, 𝐶, 𝐹, 𝑆′}
𝑁2 = {𝑆, 𝐴, 𝐵, 𝐶, 𝐹, 𝑆′, 𝐸}
𝑁3 = {𝑆, 𝐴, 𝐵, 𝐶, 𝐹, 𝑆′, 𝐸}
𝑉′′′ = {𝑆, 𝐴, 𝐵, 𝐶, 𝐷, 𝐹, 𝑆′, 𝐸, 𝑎, 𝑏, 𝑐, 𝑑, 𝑒, 𝑓}
𝑃′′′ = {𝑆 → 𝑎𝐴𝑎|𝑐𝐶𝑑|𝑎𝑎,
𝐴 = 𝑏𝑆𝑏𝑏|𝑏|𝑏𝑏𝑏|𝑐𝐶𝑑,
𝐵 → 𝑏𝑆𝑏𝑏|𝑏|𝑏𝑏𝑏,
𝐶 → 𝑎𝑎𝐴𝑎𝑎|𝑎𝑎𝑎𝑎,
𝐸 → 𝐹𝑓,
𝐹 → 𝑓|𝑒𝐸𝑒,
𝑆′ → 𝑎𝐴𝑎|𝑐𝐶𝑑|𝑎𝑎|𝜀}

4
• Eliminação dos símbolos incessíveis:

𝑉0 = {𝑆′}
𝑉1 = {𝑆′, 𝐴, 𝐶, 𝑎}
𝑉2 = {𝑆′, 𝐴, 𝐶, 𝑎, 𝑆, 𝑏, 𝑐, 𝑑}
𝑉3 = {𝑆′, 𝐴, 𝐶, 𝑎, 𝑆, 𝑏, 𝑐, 𝑑}
𝑉′′′′ = {𝑆′, 𝑆, 𝐴, 𝐶, 𝑎, 𝑆, 𝑏, 𝑐, 𝑑}
𝛴′′′′ = {𝑎, 𝑏, 𝑐, 𝑑}
𝑃′′′′ = {𝑆′ → 𝑎𝐴𝑎|𝑐𝐶𝑑|𝑎𝑎|𝜀,
𝑆 → 𝑎𝐴𝑎|𝑐𝐶𝑑𝐴|𝑎𝑎,
𝐴 → 𝑏𝑆𝑏𝑏|𝑏|𝑏𝑏𝑏|𝑐𝐶𝑑,
𝐶 → 𝑎𝑎𝐴𝑎𝑎|𝑎𝑎𝑎𝑎}

5. Responda o que se pede em cada item abaixo.


a)
Construa uma GLC na Forma Normal de Chomsky considerando as produções P = {S →
aSb | aSc | d}.

𝑃 = {𝑆 → 𝑎𝑆𝑏|𝑎𝑆𝑐|𝑑}

𝑃′ = {𝑆 → 𝑎𝑆𝑏,

𝑆 → 𝑎𝑆𝑐,

𝑆 → 𝑑}

𝑃′ = {𝑆 → 𝐴𝑆𝐵,

𝑆 → 𝐴𝑆𝐶,

𝑆 → 𝑑,

𝐴 → 𝑎,

𝐵 → 𝑏,

𝐶 → 𝑐}

5
𝑃′ = {𝑆 → 𝐴𝑆1,

𝑆1 → 𝑆𝐵,

𝑆 → 𝐴𝑆2,

𝑆2 → 𝑆𝐶,

𝑆 → 𝑑,

𝐴 → 𝑎,

𝐵 → 𝑏,

𝐶 → 𝑐}

b)
Construa uma gramática livre de contexto na Forma Normal Greibach para a gramática
com produções P = {S → AA | a, A → SS | b}.

Passo 1: A unidade G, não possui produção em vazio, unitários, símbolos inúteis e


inacessíveis.
𝑃 = {𝑆 → 𝐴𝐴|𝑎,
𝐴 → 𝑆𝑆|𝑏}

Passo 2: Substituindo dos símbolos de acordo com o primeiro passo. Logo, 𝑆 = 𝐴1 e


𝐴 = 𝐴2 e 𝐴1 < 𝐴2 :
𝑃 = {𝐴1 → 𝐴2𝐴2|𝑎,
𝐴2 → 𝐴1𝐴1|𝑏}

Passo 3: Faz-se a verificação se o código de eliminação de recursão à esquerda.


𝑃 = {𝐴1 → 𝐴2𝐴2|𝑎,
𝐴2 → 𝐴1𝐴1|𝑏}
A produção 𝐴2 → 𝐴1𝐴1 não está de acordo com os passos anteriores do código de
recurso à esquerda, aplicado o passo 5, obtém-se

6
𝐴2→𝐴2𝐴2𝐴1|𝑎𝐴1|𝑏}
E aplicando o passo 6 do código de recursão à esquerda, tem-se
𝐴2 → 𝑎𝐴1|𝑏|𝑎𝐴1𝐴′ |𝑏𝐴′ ,
2 2
′ ′
𝐴 → 𝐴2𝐴1|𝐴2𝐴1𝐴 }
2 2

As produções atuais, são:


𝑃 = {𝐴1 → 𝐴2𝐴2|𝑎,
𝐴2 → 𝑎𝐴1|𝑏|𝑎𝐴1𝐴′ |𝑏𝐴′ }
2 2
𝐴′ → 𝐴2𝐴1|𝐴2𝐴1𝐴′ }
2 2

Passo 4: É aplicado o código de conversão, considerando 𝐴′ < 𝐴1 < 𝐴2


2
𝑃′ = {𝐴1 → 𝑎𝐴1𝐴2|𝑏𝐴2|𝑎𝐴1𝐴 𝐴2|𝑏𝐴 𝐴2|𝑎,
′ ′
2 2
𝐴2 → 𝑎𝐴1|𝑏|𝑎𝐴1𝐴′ | 𝑏𝐴′ ,
2 2
𝐴′ → 𝑎𝐴1𝐴1|𝑏𝐴1|𝑎𝐴1𝐴′ 𝐴1| 𝑏𝐴′ 𝐴1|𝑎𝐴1𝐴1𝐴′ |𝑏𝐴1𝐴′ |𝑎𝐴1𝐴′ 𝐴1𝐴′ |𝑏𝐴′ 𝐴1𝐴′ }
2 2 2 2 2 2 2 2 2

Você também pode gostar