Escolar Documentos
Profissional Documentos
Cultura Documentos
• V é um conjunto de variáveis;
S → AA
A → AAA
A → bA
A → Ab
A→a
S → AA
A → AAA | bA | Ab | a.
v ⇒ w1 ⇒ w2 ⇒ . . . ⇒ wn = w
∗
Essa derivação pode ser representada por v ⇒
= w.
Definição 8.3. Seja G = (V, Σ, P, S) uma gramática livre de contexto e v ∈ {V ∪ Σ}∗ . O
conjunto de strings deriváveis de v é definido como
• Base: v é derivável de v;
S → AA
A → AAA | bA | Ab | a.
Aula 8: Gramáticas Livres de Contexto 3
S ⇒ AA
⇒ aA
⇒ abA
⇒ abAAA
⇒ abaAA
⇒ ababAA
⇒ ababaA
⇒ ababaa
A derivação de uma string pode também ser visualizada como uma árvore.
∗
Definição 8.4. Seja G = (V, Σ, P, S) uma gramática livre de contexto e S ⇒ = w uma
∗
derivação de G. A árvore de derivação de S ⇒
= w, pode ser construída da seguinte forma
S → AA
A → AAA | bA | Ab | a.
S ⇒ AA A A
⇒ aA
a b A
⇒ abA
⇒ abAAA A A A
⇒ abaAA a b A a
⇒ ababAA
a
⇒ ababaA
⇒ ababaa
S → aSa | aBa
B → bB | b
Exemplo 8.6
Dada a linguagem L = {an bm cm d2n | n ≥ 0, m > 0}. A gramática G tal que L(G) = L é
dada por G = ({S, B}, {a, b}, P, S) com conjunto P
S → aSdd | B
B → bBc | bc.
Note que a derivação dada nos Exemplos 8.3 e 8.4 não é única. Podemos derivar uma
mesma string fazendo escolhas diferentes para aplicação das regras e para a ordem em que
são aplicadas.
Exemplo 8.7
Diferentes derivações da string ababaa na gramática G = ({S, A}, {a, b}, P, S) com o
Aula 8: Gramáticas Livres de Contexto 5
conjunto P de regras
S → AA
A → AAA | bA | Ab | a.
S ⇒ AA S ⇒ AA S ⇒ AA S ⇒ AA
⇒ aA ⇒ AAAA ⇒ Aa ⇒ aA
⇒ abA ⇒ aAAA ⇒ AAAa ⇒ aAAA
⇒ abAAA ⇒ abAAA ⇒ AAbAa ⇒ aAAa
⇒ abaAA ⇒ abaAA ⇒ AAbaa ⇒ abAAa
⇒ ababAA ⇒ ababAA ⇒ AbAbaa ⇒ abAbAa
⇒ ababaA ⇒ ababaA ⇒ Ababaa ⇒ ababAa
⇒ ababaa ⇒ ababaa ⇒ ababaa ⇒ ababaa
Definição 8.6. A derivação de uma string w em uma gramática G é uma derivação mais à
esquerda se a aplicação de regras, a cada passo, é realizada na primeira variável que aparece
da esquerda para a direita.
A derivação dada no Exemplo 8.3 é uma derivação mais à esquerda.
Definição 8.7. A derivação de uma string w em uma gramática G é ambígua se existe
mais de uma derivação mais à esquerda. Uma gramática G é ambígua se alguma string
possui uma derivação ambígua.
Exemplo 8.8
Seja a gramática G = ({E}, {a, +, ×, (, )}, P, E) com o conjunto P de regras
E → E + E | E × E | (E) | a.
E ⇒E+E S ⇒E×E
⇒a+E ⇒E+E×E
⇒a+E×E ⇒a+E×E
⇒a+a×E ⇒a+a×E
⇒a+a×a ⇒ a + a × a.
Como existem duas derivações mais à esquerda diferentes, a gramática é ambígua. A am-
biguidade reflete em como as expressões são avaliadas, podendo gerar resultados errados,
que não respeitam ordens de precedência.
A gramática G0 = ({E, T, F }, {a, +, ×, (, )}, P, E) com o conjunto P de regras
E →E+T |T
T →T ×F |F
F → (E) | a
Gramáticas não ambíguas são essenciais para a definição de linguagens e para a construção
de compiladores. No entanto, existem linguagens inerentemente ambíguas.
Às vezes é interessante que a gramática esteja numa forma simplificada. A mais comum
é a forma de Chomsky.
Definição 8.8. Uma gramática livre de contexto está na forma normal de Chomsky se as
regras estão em uma das formas:
A → BC
A→a
S→λ
Definição 8.9. Uma linguagem L é livre de contexto se existe uma existe um PDA que
reconhece L.
Aula 8: Gramáticas Livres de Contexto 7
Definição 8.10. Uma linguagem L é livre de contexto se existe uma gramática livre de
contexto que gere L.
Exercício 8.1. Seja a gramática G = ({S, A}, {a, b, c, d}, P, S) com regras P
S → abSc | A
A → cAd | cd.
Exercício 8.2. Seja a gramática G = ({S, A, B}, {a, b}, P, S) com regras P
S → ASB | λ
A → aAb | λ
A → bBa | ba.
A B
a A A B
a a b
a) L = {{aa}i bj | i ≥ j ≥ 0};
Exercício 8.5. Defina a gramática sobre Σ = {a, b} que gere a linguagem que contém
strings de tamanho ímpar.