Você está na página 1de 10

PROGRAMAÇÃO E COMPILADORES

Árvore de Derivação
DEFINIÇÃO
A árvore de derivação de uma sentença descreve univocamente como a mesma é gerada.
Seja a gramática abaixo :
G = ({E}, {a, b, +, *, (, ) }, P, E)
P : E → E * E | E + E | (E) | a | b
A sentença (a+b)*a pode ser obtida por várias derivações distintas, por exemplo :
1. E ═› E * E ═› (E) * E ═› (E + E) * E ═› (a + E) * E ═› (a + b) * E ═› (a + b) * a
2. E ═› E * E ═› E * a ═› (E) * a ═› (E+E) * a ═› (E + b) * a ═› (a + b) * a
E
E * E
(E)

E + E
a b
DEFINIÇÃO
Não existe na árvore de derivação a ordem em que foram feitas as substituições: 1 e 2
apresentam a mesma árvore.
Definição : Dada uma GLC G = (Vn , Vt , P, S), uma árvore é dita “árvore de derivação” para
G se:
a) Todo nó tem um rótulo, que é um símbolo de V = {Vn U Vt };
b) O rótulo da raiz é o símbolo inicial;
c) Todo nó não folha tem como rótulo um símbolo Є Vn;
d) Se um nó rotulado A e seus nós descendentes imediatos da esquerda para a direita;
e) rotulados A1 , A2 , A3 ... Ak, então A → A1A2A3 ... Ak deve ser uma produção de P;
f) A construção da árvore termina quando todas as folhas forem símbolos ЄVt;
EXERCÍCIO
Construir a árvore de derivação para a sentença ((a*b)+(a*a)) e para a+b*a, usando a
gramática G acima definida.
Dada uma gramática G = (Vn , Vt , P, S) ela é dita ambígua see existir uma cadeia x Є L(G)
para a qual podem ser construídas duas árvores de derivação diferentes.
Seja a cadeia a+b*a
1. E ═› E * E ═› E + E * E ═› a + E * E ═› a + b * E ═› a + b * a
E
E * E
(E)

E + E
a b
EXERCÍCIO
Construir a árvore de derivação para a sentença ((a*b)+(a*a)) e para a+b*a, usando a
gramática G acima definida.
Dada uma gramática G = (Vn , Vt , P, S) ela é dita ambígua se existir uma cadeia x Є L(G) para
a qual podem ser construídas duas árvores de derivação diferentes.
Seja a cadeia a + b * a
1. E ═› E + E ═› E + E * E ═› a + E * E ═› a + b * E ═› a + b * a
E
E + E

a E * E
a b
DEFINIÇÃO
Nota: Tem-se portanto diferentes árvores para a mesma sentença. Isso decorre da
ambiguidade da
gramática. A gramática é ambígua porque não tem precedência de operadores.
Gramática acima convertida para não ambígua (foi inserida a precedência na derivação dos
operadores (* e +)).

𝐸 → 𝐸 ∗ 𝑇|𝑇
P 𝑇 → 𝑇 + 𝐹|𝐹
𝐹 → 𝑎 𝑏 (𝐸)
Mesmo com G não ambígua, tem-se mais de uma derivação para a mesma sentença, embora
com a mesma árvore de derivação. Isto se deve ao facto de poder substituir qualquer não
terminal em qualquer ordem.
É possível escolher um determinado não terminal ou mais a esquerda ou mais a direita.
Derivação à esquerda : se 𝛼 → 𝛽 por um passo no qual o não terminal mais a esquerda é
substituído, escrevemos 𝛼 → 𝛽 . De maneira análoga podemos escrever 𝛼 → 𝛽, para a
Derivação à direita.
Derivações à direita e à esquerda são chamadas canônicas.
EXERCÍCIO
Faça as derivações à esquerda e à direita usando a gramática anterior para obter a seguinte
sentença ((a+b)+b).
EXERCÍCIO
Seja a árvore de derivação para a gramática G = (Vn , Vt , P, S)
S
A B
S S b A

c b b B S

b c b
a) Qual a cadeia representada pela árvore ?
b) Vn = ? Vt = ?
c) bcbbcbb Є L(G) ?
d) Quais produções (regra de derivações) pertencem a P ?
e) Escreva uma derivação canônica para a árvore.
f) No item “e”quais as sentenças e formas sentenciais ?
REFERÊNCIAS BIBLIOGRÁFICAS
• Freitas, Ricardo Luís de - Compiladores;
• Tanenbaum, Andrew S. – Sistemas Operacionais Modernos, 2ª
Edição, Prentice Hall, 2003.

Você também pode gostar