Vous êtes sur la page 1sur 8

Compiladores

Aula 09
Unidade Jundia

Plano de Ensino

Reviso de Conjuntos e Funes


Linguagens, Expresses Regulares e
Gramticas
Autmatos
Conceitos bsicos sobre compiladores e
interpretadores
Viso geral do processo de compilao
Tipos de compiladores
Anlise lxica
Anlise sinttica
Anlise semntica
Gerao de Cdigo

Livro-Texto

Bibliografia Bsica:
AHO, A.; ULLMANN, J.; REVI, S.. Compiladores :
princpios, tcnicas e ferramentas. 3 ed. Rio de
Janeiro: LTC, 2006.
Bibliografia Complementar:
TOSCANI, Simo Sirineo; PRICE, Ana M. A..
Implementao de Linguagens de Programao.
1 ed. Porto Alegre: Bookman Companhia Ed., 2008.
DELAMARO, Marcio Eduardo. Como Construir um
Compilador : Utilizando Ferramentas Java. 1 ed.:
Novatec, 2004.

1
9. Anlise Sinttica Introduo

a segunda fase de um compilador.


Consiste em descobrir, para uma cadeia x qualquer, se
a cadeia pertence ou no pertence linguagem da
gramtica.
Se x pertencer linguagem, queremos adicionalmente
descobrir a maneira (ou uma das maneiras) pela qual a
cadeia pode ser derivada seguindo as regras da
gramtica.

9. Anlise Sinttica Introduo

As regras da gramtica podem ser montadas utilizando-


se a formalidade definida anteriormente, ou seja, uma
qudrupla ordenada G=(V,T,P,S).
S nos interessam aqui as gramticas livres de contexto
(GLC), que constituem um caso particular das
gramticas em geral A .
Formalmente, a linguagem da gramtica G o conjunto
L(G) = { x S* | S * x }.

9. Anlise Sinttica Introduo

Relembrando...
Gramtica umq qudrupla ordenada G = (V, T, P, S)
V conjunto finito de smbolos variveis ou no-terminais
T conjunto finito de smbolos terminais
P conjunto finito de pares, chamado regras de produo tal que
a primeira componente palavra de (VT)+ e a segunda
componente palavra de (VT)*
S elemento de V chamado de varivel inicial
Gramticas Livres de Contexto (GLC) do lado
esquerdo da produo deve, sempre, ocorrer um e
apenas um smbolo varivel. A sentena vazia no
aceita do lado direito da produo.
P = { | N e }

2
9. Anlise Sinttica Introduo

Exemplo 1: dada uma Gramtica Livre de Contexto


G=(V, T, P, S). Onde:
V = {E, F, T}
T = { +, *, (, ), a }
P = {E E+T | T, T T*F | F, F ( E ) | a}
S = {E}

9. Anlise Sinttica rvore de Derivao

Dada a Gramtica definida anteriormente, podemos


facilmente notar que existem palavras que so
derivadas da mesma.
Por exemplo, a cadeia a + a * a.
1. E E+T T+T F+T a+T a+T*F a+F*F a+a*F
a+a*a
2. E E+T E+T*F E+T*a E+F*a E+a*a T+a*a
F+a*a a+a*a
3. E E+T E+T*F E+F*F E+a*F T+a*F T+a*a
F+a*a a+a*a

9. Anlise Sinttica rvore de Derivao

Podemos representar as GLCs atravs de uma rvore


de derivao, que para o exemplo a+a*a seria o
seguinte:

E + T

T T * F

F F a
a a

3
9. Anlise Sinttica rvore de Derivao

Num certo sentido, a rvore de derivao caracteriza as


GLCs; a expanso correspondente a cada sub-rvore
pode ser feita de forma absolutamente independente
das demais sub-rvores. Consideramos equivalentes
todas as derivaes que correspondem mesma rvore
de derivao. Existem 2 tipos de derivao:
derivao esquerda (leftmost derivation) uma regra
sempre aplicada ao primeiro no-terminal da cadeia, o que fica
mais esquerda.
derivao direita (rightmost derivation) uma regra sempre
aplicada ao ltimo no-terminal da cadeia, o que fica mais
direita.

9. Anlise Sinttica rvore de Derivao

O exemplo a+a*a derivado da gramtica G anterior,


possui 3 tipos distintos de derivao, conforme
mostrado:
(1) E E+T T+T F+T a+T a+T*F a+F*F a+a*F
a+a*a
(2) E E+T E+T*F E+T*a E+F*a E+a*a T+a*a
F+a*a a+a*a
(3) E E+T E+T*F E+F*F E+a*F T+a*F T+a*a
F+a*a a+a*a
A derivao (1) uma derivao esquerda, e a
derivao (2) uma derivao direita. A derivao (3)
nem uma derivao esquerda, nem uma derivao
direita.

9. Anlise Sinttica Ambiguidade em rvores

Uma gramtica ambgua se, para alguma cadeia x,


existem duas ou mais rvores de derivao.
Podemos mostrar que uma gramtica ambgua
mostrando uma cadeia x e duas rvores de derivao
distintas de x (ou duas derivaes esquerdas distintas,
ou duas derivaes direitas distintas).

4
9. Anlise Sinttica Ambiguidade em rvores

Exemplo 1: a gramtica G=({E, F, T}, {+,*,( ,),a},


{ET+T | T, TT*T | a}, {E}) dita no ambgua, pois
para a cadeia a+a*a, temos uma nica rvore de
derivao.

E E

T+ T T+ T

a T* T a T* T

a a a a
leftmost rightmost

9. Anlise Sinttica Ambiguidade em rvores

Exemplo 2: a gramtica G=({E}, {+,*,( ,),a}, {E E+E |


E*E | (E) | a}, {E}) ambgua.
Por exemplo, para a cadeia a+a*a podemos deriv-la
de duas maneiras diferentes, de acordo com as 2
rvores:
E E

E+ E E* E

a E* E E+ E a

a a a a
leftmost rightmost

9. Anlise Sinttica Ascendente/Descendente

Os mtodos de anlise sinttica podem ser classificados


segundo a maneira pela qual a rvore de derivao da
cadeia analisada x construda:
nos mtodos descendentes, a rvore de derivao
correspondente a x construda de cima para baixo, ou seja, da
raiz (o smbolo inicial S) para as folhas, onde se encontra x.
nos mtodos ascendentes, a rvore de derivao
correspondente a x construda de baixo para cima, ou seja,
das folhas, onde se encontra x, para a raiz, onde se encontra o
smbolo inicial S.

5
9. Anlise Sinttica Ascendente/Descendente

Mtodo Descendente (top-down) deve-se decidir


qual a regra Ab a ser aplicada a um n rotulado por
um no-terminal A. A expanso de A feita criando ns
filhos rotulados com os smbolos de b.
Mtodos Ascendentes (bottom-up) deve-se decidir
quando a regra Ab a ser aplicada, e devemos
encontrar ns vizinhos rotulados com os smbolos de b.
A reduo pela regra Ab consiste em acrescentar
rvore um n A, cujos filhos so os ns correspondentes
aos smbolos de b.
Mtodos descendentes e ascendentes constroem a
rvore da esquerda para a direita.

9. Anlise Sinttica Ascendente/Descendente

Exemplo Top-Down: usando o exemplo 1 em cima da


cadeia x = a+a*a, temos:
E E E E E
E+T E+T E+T E+T
T T T
F F
E E E E a
E+ T E+T E+T E+T
TT*F TT*F TT*F TT*F
F FF FF FF a
a a aa aa

9. Anlise Sinttica Ascendente/Descendente

Exemplo Bottom-Up: usando o exemplo 1 em cima da


cadeia x = a+a*a, temos:
E E
T T T
F F F F F
a +a * a a +a * a a +a * a a +a * a a +a * a
E
E E E T E T
T T T T F T T F T T F
F F F F F F F F
a +a * a a +a * a a +a * a a +a * a

6
9. Anlise Sinttica Top Down

Embora a rvore de derivao seja usada para


descrever os mtodos de anlise, na prtica ela nunca
efetivamente construda. s vezes, se necessrio,
construmos rvores sintticas, que guardam alguma
semelhana com a rvore de derivao, mas ocupam
um espao de memria significativamente menor.
A nica estrutura de dados necessria para o processo
de anlise uma pilha, que guarda informao sobre os
ns da rvore de derivao relevantes, em cada fase do
processo.

9. Anlise Sinttica Top Down

Vamos examinar o mtodo de anlise descendente. A


representao do processo ser feita atravs de
configuraes (, y), onde e y representam
respectivamente, o contedo da pilha e o resto da
entrada ainda no analisada. Por conveno vamos
supor que o topo da pilha fica esquerda, isto , que o
primeiro smbolo de o smbolo do topo da pilha.

9. Anlise Sinttica Top Down

Derivao
Pilha (Resto) Entrada
esquerda
E a+a*a E
E+T a+a*a E+T
T+T a+a*a T+T
F+T a+a*a F+T
a+T a+a*a a+T
+T +a*a
T a*a

7
9. Anlise Sinttica Top Down

Derivao
Pilha (Resto) Entrada
esquerda
T*F a*a a+T*F
F*F a*a a+F*F
a*F a*a a+a*F
*F *a
F a
A a a+a*a

Compiladores

clayton.valdo@anhanguera.com

Vous aimerez peut-être aussi