Você está na página 1de 10

CONJUNTOS FIRST E FOLLOW

Compiladores
Departamento de Computao
UEPB

Fabiano de Miranda Silva


CONJUNTOS FIRST E FOLLOW

Na anlise sinttica, em alguns momentos


preciso reconhecer um token, mas a produo da
gramtica nos d no-terminais como opo
O que o mtodo descendente recursivo faria?
O que o mtodo descendente preditivo recursivo
faria?
Como escolher a produo correta?

2
CONJUNTOS FIRST E FOLLOW

Conjunto First
Primeiro no terminal encontrado numa produo
Pode haver mais de uma possibilidade, por isso um
conjunto
Caso uma produo de um no-terminal resulte em
vazio, o conjunto primeiro deste no-terminal conter
o conjunto primeiro do no-terminal seguinte

3
CONJUNTOS FIRST E FOLLOW

1) Encontrar o conjunto first de cada no


terminal do lado esquerdo das produes da
gramtica abaixo

S -> A | B
A -> aAS | BD
B -> bB | fAC |
C -> cC | BD
D -> gD | C |

4
CONJUNTOS FIRST E FOLLOW

2) Encontrar o conjunto first de cada no


terminal do lado esquerdo das produes da
gramtica abaixo

S Abd
A aA |
B bB | cA | AC
C cB |

5
CONJUNTOS FIRST E FOLLOW

3) Encontrar o conjunto first de cada no


terminal do lado esquerdo das produes da
gramtica abaixo

S A | BC
A aAS | D
B bB | fAC |
C cC
D gD | C |

6
CONJUNTOS FIRST E FOLLOW

4) Encontrar o conjunto first de cada no terminal do


lado esquerdo das produes da gramtica abaixo

S aA | bB
A aA | BD
B bB | fAC |
C cC | Dd
D gD | C |

7
CONJUNTOS FIRST E FOLLOW

Conjunto Follow
Conjunto de terminais imediatamente seguintes ao
no-terminal analisado

Caso mais simples:


A aBc Follow(B) = { c }

8
CONJUNTOS FIRST E FOLLOW

Conjunto Follow
Possui um smbolo especial $, utilizado para indicar o
fim da rvore de derivao (no h mais derivaes
possveis). Lembra EOF

Regras para o conjunto follow


Se S o smbolo inicial da gramtica, follow(S) = { $ }

Se h uma produo A B , ento tudo em first(),


exceto por , est em follow(B)

Se h uma produo A B, ou uma produo A B


onde first() contm , ento follow(A) est contido em
follow(B)
9
CONJUNTOS FIRST E FOLLOW

Exemplo: encontrar os conjuntos first e follow dos


no-terminais da gramtica abaixo

S E FIRST FOLLOW
E T E S {(, id} {$}
E {( , id} { ) , $}
E + T E |
E {+, } { ) , $}
T F T
T {( , id} {+ , ) , $}
T * F T | T {*, } {+, ) , $}
F ( E ) | id F {( , id} {+ , * , ) , $}

10