Você está na página 1de 14

Anlise Sinttica - Continuao

Prof. Heloise Manica Paris Teixeira


Parte 2

Slides cedidos pela Prof. Valria Feltrin (DIN-UEM)

Coletando informaes sobre


uma gramtica
Dada uma gramtica GLC, podem-se identificar certas
informaes necessrias para a construo de
compiladores
Deciso de qual regra aplicar

Para um no-terminal A, queremos saber:


Se A gera a cadeia vazia (visto em aula anterior)
Quais so os terminais que iniciam as cadeias
geradas por A Conjunto Primeiro(A) (ou first(A))
Quais so os terminais que seguem A Conjunto
Seguidor(A) (ou follow(A))

Seguidor (ou follow)


Conjunto de terminais que seguem um smbolo
da gramtica, ou seja, que aparecem
imediatamente direita deste smbolo
a est em Seguidor(A) se A * Aa, para cadeias
e quaisquer
Em outras palavras:
a est em Seguidor(A) se em algum ponto de uma
derivao a for o smbolo imediatamente a direita
de A

Regras para determinar o conjunto Seguidor


1.

Inicialmente, para todos os no terminais A da gramtica G, todos


os conjuntos Seguidor(A) esto vazios, excetuando-se
Seguidor(S)= { $ }

2.

Se h uma regra A Ba, ento acrescente a ao Seguidor(B)

3.

Se h uma regra A Ba, e =B1 ... Bm *, ento acrescente


a ao Seguidor(B)

4.

Se h uma regra A BC, e =B1 ... Bm *, ento acrescente


Primeiro(C), exceto , a Seguidor(B)

5.

Se h uma regra A B, e =B1 ... Bm *, ento acrescente


Seguidor(A) a Seguidor(B)

6.

Aplique as regras 2-5 enquanto houver modificao em algum


dos conjuntos

Seguidor: Exemplo
P: E TE
E +TE |
T FT
T *FT |
F (E) | id

First (E) = Fistr(T) = First(F) = { ( , id }


First (E) = { +, }
First (T) = { *, }
First (T) = { (, id }
First (F) = { (, id }

onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E

Uma forma de proceder


para cada no terminal A, examine todas as produes em que A
aparece do lado direito, segundo as regras para o clculo do
seguidor, e monte o conjunto seguidor(A).

1.
2.

Inicialmente, para todos os no terminais A da


gramtica G, todos os conjuntos Seguidor(A) esto
vazios, excetuando-se Seguidor(S)= { $ }
Se h uma regra A Ba, ento acrescente a ao
Seguidor(B)

P: E TE
E +TE |
T FT
T *FT |
F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E

seguidor(E) = { $ , ) }

regras 1 e 2

Regra 5: Se h uma regra


A B, e =B1 ... Bm *, ento
acrescente Seguidor(A) a Seguidor(B)

P:E TE
E +TE |
T FT
T *FT |
F (E) | id

onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E


seguidor(E) = { $ , ) }
regras 1 e 2
seguidor(E') = seguidor(E) = { ), $ }
regra 5

4.

5.

P:E TE
E +TE |
T FT
T *FT |
F (E) | id

Se h uma regra
A BC, e =B1 ... Bm *, ento acrescente
Primeiro(C), exceto , a Seguidor(B)
Se h uma regra
E T, e =B1 ... Bm *, ento acrescente
Seguidor(E) a Seguidor(T)

First (E) = { ( , id }
First (E) = { +, }
First (T) = { *, }
First (T) = { (, id }
First (F) = { (, id }

onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E

seguidor(E) = { ), $ }

regras 1 e 2

seguidor(E') = seguidor(E) = { ), $ }

regra 5

seguidor(T) = primeiro(E) U seguidor(E) = { +, ), $ } regras 4 e 5

Regra 5: Se h uma regra


A B, e =B1 ... Bm *, ento
acrescente Seguidor(A) a Seguidor(B)

P: E TE
E +TE |
T FT
T *FT |
F (E) | id
onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E
seguidor(E) = { ), $ }

regras 1 e 2

seguidor(E') = seguidor(E) = { ), $ }

regra 5

seguidor(T) = primeiro(E) U seguidor(E) U seguidor(E) = { +, ), $ } regras 4 e 5


seguidor(T) = seguidor(T) = { +, ), $ }

regra 5

4.

5.

P: E TE
E +TE |
T FT
T *FT |
F (E) | id

Se h uma regra
A BC, e =B1 ... Bm *, ento acrescente
Primeiro(C), exceto , a Seguidor(B)
Se h uma regra
A B, e =B1 ... Bm *, ento acrescente
Seguidor(A) a Seguidor(B)

onde Vn = {E,T,F,E',T'}, Vt = { (, ), id, +, * }, S=E

First (E) = { ( , id }
First (E) = { +, }
First (T) = { *, }
First (T) = { (, id }
First (F) = { (, id }

seguidor(E) = { ), $ }
regras 1 e 2
seguidor(E') = seguidor(E) = { ), $ }
regra 5
seguidor(T) = primeiro(E) U seguidor(E) U seguidor(E) = { +, ), $ } regras 4 e 5
seguidor(T) = seguidor(T) = { +, ), $ } regra 5
seguidor(F) = primeiro(T') U seguidor(T) U seguidor(T) = {*, +, ), $ } regras 4 e 5

Seguidor:Exerccio
Encontre os conjuntos Seguidor para a gramtica abaixo:
P ABCD
A aA |
B Bb |
C AB | c
Dd
onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P

F(P) = { a, b, c, d}
F(A) = { a, }
F(B) = { b, }
F(C) = { a, b, c, }
F(D) = { d }

Seguidor:Exerccio
P ABCD
A aA |
B Bb |
C AB | c
Dd

P(P) = { a, b, c, d}
P(A) = { a, }
P(B) = { b, }
P(C) = { a, b, c, }
P(D) = { d }

onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P

S(P) = {$}
1.

regra 1

Inicialmente, para todos os no terminais A da


gramtica G, todos os conjuntos Seguidor(A) esto
vazios, excetuando-se Seguidor(S)= { $ }

Seguidor:Exerccio
P ABCD
A aA |
B Bb |
C AB | c
Dd

P(P) = { a, b, c, d}
P(A) = { a, }
P(B) = { b, }
P(C) = { a, b, c, }
P(D) = { d }

onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P


S(P) = {$}
S(A) = P(B) U P(C) U P(D) = {a, b, c, d}
4.

Se h uma regra
A BC, e =B1 ... Bm *, ento
acrescente Primeiro(C), exceto , a
Seguidor(B)

regra 1
regra 4

Seguidor:Exerccio
P ABCD
A aA |
B Bb |
C AB | c
Dd

P(P) = { a, b, c, d}
P(A) = { a, }
P(B) = { b, }
P(C) = { a, b, c, }
P(D) = { d }

onde Vn = {P, A, B, C, D}, Vt = { a, b, c, d }, S=P


S(P) = {$}
S(A) = P(B) U P(C) U P(D) = {a, b, c, d}
S(B) = {b} U P(C) U P(D) U S(C) = {a, b, c, d}
S(C) = {d}
S(D) = {$}

regra 1
regra 4
regras 2 e 4
regra 4
regra 5

Você também pode gostar