Você está na página 1de 12

Capítulo 4

Análise Sintática

Análise Sintática Descente (cont.)

- Os analisadores descendentes são ajudados por duas funções


First e Follow associadas à gramática.

- Elas permitem escolher qual produção aplicar com base no


próximo símbolo de entrada

- permite ainda a recuperação de erro (follow).

Copyright © 2008 Pearson Education do Brasil slide 2


Capítulo 4
Análise Sintática

Análise Sintática Descente (cont.)

First(X)
Conjunto de terminais que iniciam cadeias derivadas de X
Regras:

1 – Se X é terminal, First(X) = {X}

2 – Se X é não-terminal e X Y1Y2... Yk é uma produção (k>=1), então


acrescente a a First(X) se
- para algum i, a estiver em First(Yi) e estiver em todos os
First(Y1...Yi-1) … ou seja, os não-terminais anteriores levam a .
- Se está em First(Yj) para todo j=1,2,...k então adicione em
First(X).
- Se Y1 não derivar , não acrescentar mais nada a First(X)
- Se Y1 => , então adicionar First(Y2), e assim por diante.

3- Se X é uma produção, então acrescente a First(X).

Copyright © 2008 Pearson Education do Brasil slide 3


Capítulo 4
Análise Sintática

Análise Sintática Descente (cont.)

Follow(X)
Conjunto de terminais que a que podem aparecer
imediatamente à direita de X em alguma forma sentencial.

Regras

1 – Coloque $ em Follow(S), onde S é o símbolo inicial da gramática e $


é o marcador de final de entrada.

2 – Se houver uma produção A B , então tudo em First( ) exceto ,


está em follow(B).

3 – Se houver uma produção A B ou uma produção A B , onde


o First( ) com tem , então inclua o Follow(A) em Follow(B).

Copyright © 2008 Pearson Education do Brasil slide 4


Capítulo 4
Análise Sintática

Análise Sintática Descente (cont.)

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

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


First(E') = {+, }
First(T') = {*, }

Follow(E) = Follow(E') = { ), $}
Follow(T) = Follow(T') = {+, ), $}
Follow(F) = { *, +, ), $)

Copyright © 2008 Pearson Education do Brasil slide 5


Capítulo 4
Análise Sintática

Análise Sintática Descente (cont.)

Algoritmo para construção de uma tabela preditiva M[A,a] onde

M = matriz, A não-terminal e a é terminal ou $ (final de cadeia)


Entrada = gramática G
Saída = tabela de análise M

Para cada produção A da gramática faça:

1. Para cada terminal a em First(A), inclua A-> em M[A,a]


2. Se pertence a First( ), inclua A em M[A,b] para cada terminal b
em Follow(A).
Se pertence a First( ) e $ pertence a Follow(A), acrescente
também A em M[A,$].

Após realizar os passos, as entradas vazias da matriz devem ser


preenchidas com indicação de erro.

Copyright © 2008 Pearson Education do Brasil slide 6


Capítulo 4
Análise Sintática

Análise Sintática Descente (cont.)

Gramáticas LL (1) – classe de gramáticas ao qual se pode implementar


analisadores descendentes preditivos (recursivos) sem retrocesso.

LL(1) – L = cadeia de entrada lida da esquerda para a direita (Left-to-


right)
L = derivação mais à esquerda (leftmost)
1 = uso de um símbolo a frente na entrada em cada passo para
tomar decisões quanto à ação de análise.

Uma gramática é LL(1) se e somente se, sempre que A | forem


duas produções distintas de G, com as condições verdadeiras:

1 -First( ) e First( ) são conjuntos distintos


2 – Se está em First ( ), então First( ) e Follow(A) são conjuntos
distintos. Idem se acontecer o com First( ).

Copyright © 2008 Pearson Education do Brasil slide 7


Capítulo 4
Análise Sintática
E T E'
E' +TE' |
T FT'
T' *FT' |
F (E) | id

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


First(E') = {+, }
First(T') = {*, }

Follow(E) = Follow(E') = { ), $}
Follow(T) = Follow(T') = {+, ), $}
Follow(F) = { *, +, ), $)

Copyright © 2008 Pearson Education do Brasil slide 8


Capítulo 4
Análise Sintática

Copyright © 2008 Pearson Education do Brasil slide 9


Capítulo 4
Análise Sintática

Copyright © 2008 Pearson Education do Brasil slide 10


Capítulo 4
Análise Sintática

E T E'
E' +TE' |
T FT'
T' *FT' |
F (E) | id

FIGURA 4.21 Movimentos efetuados por um analisador sintático preditivo para id + id * id.

Copyright © 2008 Pearson Education do Brasil slide 11


Capítulo 4
Análise Sintática

Exercícios

1.Faça a análise seguindo a tabela do slide anterior para a


cadeia (id + id) * id

2. Calcule as relações First e Follow para cada não terminal da


gramáticas abaixo

G1: G2:

S abA| S AS|BA
A aSaa|b A aB|C
B ba|d
C c

Copyright © 2008 Pearson Education do Brasil slide 12


Capítulo 4
Análise Sintática

Exercícios

3. Calcule as relações First e Follow para cada não terminal da


gramática e construa a tabela de análise preditiva para ela.
Proponha uma cadeia e analise-a segundo o método
descendente preditivo.

<Cmdos> ::= <Cmdo> ; <Cmdos> | <Cmdo>


<Cmdo> ::= if exp then <Cmdo> <Pelse>
| for id := exp to exp do <Cmdo>
| while exp do <Cmdo>
| id := exp
| begin <Cmdos> end
<Pelse> ::= else <Cmdo> |

Copyright © 2008 Pearson Education do Brasil slide 13

Você também pode gostar