Você está na página 1de 36

Compiladores

Anlise Sinttica

Luana Barreto da Silva


Anlise Sinttica
Gramtica Livre de Contexto
Reconhecimento de Sentenas
rvores de Derivao
Gramticas Ambguas
Eliminao de Recurso Esquerda
Fatorao Esquerda
Primeiros e Seguintes

LUANA BARRETO 2
Segunda fase do compilador;
Verificar se as construes usadas no
programa esto gramaticalmente corretas;
As estruturas sintticas so especificadas
atravs de gramticas livres de contexto
(GLC);
As gramtica livre de contexto so adequadas
para representar as caractersticas de
sentenas em linguagens de programao;

LUANA BARRETO 3
As Gramticas Livres de Contexto formam a
base para a anlise sinttica das linguagens
de programao, pois permite descrever a
linguagens de programao.

Expresso Regulares -> Jlex

Gramticas Livres de Contexto -> YACC

LUANA BARRETO 4
Uma GLC um conjunto de produes,
composta por smbolos terminais e no-
terminais;

Ex: E -> E + E
| E*E
| num
| (E)

LUANA BARRETO 5
o procedimento que verifica se uma dada
sentena pertence linguagem gerada por
uma gramtica livre de contexto.

A sentena vlida numa dada gramtica


apenas quando existe pelo menos uma
sequncia de aplicao de produes que
permita obter a sentena a partir do smbolo
sentencial.

LUANA BARRETO 6
H duas formas possveis de derivar uma
seqncia de produes para validar uma
dada sentena.
Reconhecimento descendente, tambm conhecido
como top-down, o ponto de partida o smbolo
sentencial.

Reconhecimento ascendente ou bottom-up, o


ponto de partida a sentena, que ser vlida se
for possvel obter como resultado o smbolo
sentencial.

LUANA BARRETO 7
Ex: Dada a sentena : (v + v) * v
Dada a gramtica:
E -> E + E
E -> E * E
E -> (E)
E -> v

LUANA BARRETO 8
Ex: Dada a sentena : (v + v) * v
Dada a gramtica: ASCENDENTE
1- E -> E + E (v+v) * v
2- E -> E * E (E+v) * v
3- E -> (E) (E + E) * v
4- E -> v (E) * v
(E) * E
E*E
E

LUANA BARRETO 9
uma representao grfica de uma
derivao de sentena;
uma estrutura de dados que contm um
conjunto finito de elementos, denominados
de ns;
Nessa estrutura as folhas das rvores so os
smbolos terminais e os ns intermedirios
correspondem aos smbolos no-terminais.

LUANA BARRETO 10
Exemplo (v + v) * v

LUANA BARRETO 11
Uma gramtica ambgua aquela que permite
que uma mesma sentena tenha mais de uma
rvore sinttica

LUANA BARRETO 12
Para tratar o problema de ambigidade em
gramtica so utilizados os conceitos de
precedncia e associatividade.
Operadores com maior precedncia so avaliados
primeiro.

Operadores com igual precedncia so avaliados de


acordo com a associatividade esquerdadireita.

LUANA BARRETO 13
Como remover a ambiguidade?

Colando uma precedncia de acordo com a


linguagem - maior para * em relao ou + e
Determinar que cada operador seja associativo
esquerda, ou seja:
(1-2)-3 e no 1-(2-3)

Isso ser possvel introduzindo novos no-


terminais

LUANA BARRETO 14
Para tratar a precedncia dos operadores:
1-Dividese os operadores em grupos de igual
precedncia

2-Para cada nvel de precedncia, introduzse um


no terminal e uma regra gramatical

Para tratar a associatividade dos operadores:


3-Criase regras gramaticais recursivas direita ou
esquerda.

LUANA BARRETO 15
A precedncia menor est associada
operao que est mais prxima raiz da
rvore.
As produes com maior precedncia so
aquelas associadas expanso do token e s
expresses entre parnteses. 2- Adiciona-se
um smbolo no terminal para essas duas
produes.
P -> (E)
P -> v

LUANA BARRETO 16
A prxima maior precedncia est associada
a operao de multiplicao. 2 - Adiciona-se
um smbolo no terminal a esta operao.
M -> M * P
Neste caso,para anular a recursividade,
adiciona-se uma produo do tipo:
M -> P
Para a operao de soma acrescenta-se um
par de produes similares:
E -> E + M
E -> M
LUANA BARRETO 17
Removendo-se a ambigidade:

1) P-> (E)
P-> v

2) M -> M * P
M -> P

3) E -> E + M
E -> M

LUANA BARRETO 18
Exemplo:

E E*E EE+T
EET
E E/E ET
E E+E TT*F
E EE TT/F
E (E) TF
F id
E id F num
E num F (E)

LUANA BARRETO 19
Uma GLC possui recurso esquerda, se h
pelo menos uma produo da forma A -> A.
Para eliminar as recurses diretas esquerda
nas produes:
A -> A1 | A2 | ... | An | ... | 1 | 2 | ... | m
onde nenhum i comea com A, deve-se
substituir estas produes pelas seguintes:
A -> 1A | 2A | ... | mA
A-> 1A | 2A | ... | nA |
onde A um novo no-terminal.

LUANA BARRETO 20
Ex: E -> E+T | T
T -> T * F | F
F -> (E) | id

LUANA BARRETO 21
LUANA BARRETO 22
Uma GLC est fatorada se ela
determinstica, ou seja, se ela no possui
produes para um mesmo no-terminal no
lado esquerdo cujo lado direito inicie com a
mesma cadeia de smbolos ou com smbolos
que derivam seqncias que iniciem com a
mesma cadeia de smbolos. A seguinte
gramtica no-determinstica:

LUANA BARRETO 23
A idia bsica est em, quando no tiver claro
por qual das produes seguir para expandir
um no-terminal A, reescreve-se as
produes de forma a postergar a deciso at
que se tenha visto o suficiente da entrada
para realizar a escolha certa.

LUANA BARRETO 24
Para fatorar uma GLC, deve-se alterar as
produes envolvidas no no-determinismo
da seguinte forma:

As produes com no-determinismo direto da


forma A -> | sero substitudas por:
A -> A
A-> |

LUANA BARRETO 25
Na gramtica acima, temos = aS, assim,
com a eliminao do no-determinismo,
teramos a seguinte gramtica:
S -> aSS
S-> B | A
A -> a
B -> b

LUANA BARRETO 26
Exemplo

LUANA BARRETO 27
O no-determinismo indireto retirado
atravs de sua transformao em no-
determinismo direto (atravs de derivaes
sucessivas).
S -> AC | BC
A -> aD | cC
B -> aB | dD
C -> eC | eA
D -> fD | AB
O no-determinismo indireto se d pelo fato
de que A e B podem iniciar com o terminal a.

LUANA BARRETO 28
Transforma-se primeiro o no-determinismo
indireto em no-determinismo direto,
substituindo os no-terminais A e B pelas
suas produes em S
S -> AC | BC S -> cCC | aDC | aBC | dDC
A -> aD | cC A -> aD | cB
B -> aB | dD B -> aB | dD
C -> eC | eA
C -> eC | eA D -> fD | AB
D -> fD | AB

LUANA BARRETO 29
um programa construdo para uma
gramtica G que recebe como entrada uma
seqncia de smbolos terminais. Se a
seqncia de smbolos for uma sentena
vlida ele constri o analisador sinttico; caso
a sentena no pertena a linguagem descrita
por G, ele dever apresentar uma mensagem
de erro.

LUANA BARRETO 30
Um autmato de pilha a estrutura formal
para efetuar o reconhecimento de sentenas.

LUANA BARRETO 31
Aplica-se as regras abaixo para determinarmos Primeiros:
1. Inicialmente, para todos os no terminais X da gramtica G,
todos os conjuntos Primeiro(X) esto vazios
2. Se X no-terminal e X->a uma produo, ento se
acrescenta a ao Primeiro(X)
3. Se X no-terminal e X-> uma produo, ento se
acrescenta ao Primeiro(X)
4. Se X e B so no-terminais e X -> B uma produo, ento se
acrescenta Primeiro(B) ao Primeiro(X)
5. Se X->Y1Y2Y3...Yk uma produo e, para algum i, todos Y1,
Y2,...Yi-1 so no-terminais e derivam , ento Primeiro(Yi) est
em Primeiro(X), juntamente com todos os smbolos no-vazio de
Primeiro(Y1), Primeiro(Y2), ..., Primeiro(Yi-1). O smbolo vazio ser
adicionado a Primeiro(X) se todo Yj (j = 1, 2, .., k) derivar
6. Aplique as regras 2-5 enquanto houver modificao em algum
dos conjuntos

LUANA BARRETO 32

LUANA BARRETO 33
LUANA BARRETO 34
LUANA BARRETO 35
Dada a gramtica abaixo:
S XYZ
X aXb |
Y cYZcX | d
Z eZYe | f

Primeiros(X) = {a, } Seguintes(X) = {c, d, b, e, f}


Primeiros(Y) = {c, d} Seguintes(Y) = {e, f}
Primeiros(Z) = {e, f} Seguintes(Z) = {$, c, d}
Primeiros(S) = {a, c, d, } Seguintes(S) = {$}

LUANA BARRETO 36