28
Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Embed Size (px)

Citation preview

Page 1: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Análise Sintática - Continuação

Profa. Heloise Manica Paris Teixeira

Parte 3

Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Page 2: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Análise sintática

Descendente(Top-down)

Ascendente(Bottom-up)

Com retrocesso(back track)

Sem retrocesso(preditive)

Analisadores SintáticosDo símbolo de partida para

a sentença Da sentença para o simbolo de partida

Um analisador preditivo tenta prever a construção seguinte da cadeia de entrada com base em uma ou mais marcas de verificação à frente

Page 3: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Análise sintática Descendente Sem Retrocesso (Preditiva)

Page 4: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD Preditiva

• ASD preditiva– Sabe-se de antemão qual regra aplicar

• Algoritmos:– LL(1)

• O primeiro “L” se refere ao fato de o processamento ocorrer da esquerda para a direita (Left)

• O segundo “L” se refere ao fato de o analisador acompanhar uma derivação à esquerda para a cadeia de entrada.

• O número (1) significa que é usado um símbolo da entrada para prever a direção da análise.

– LL(1)Recursivo

• Ambos algoritmos exigem, em geral, a computação dos conjuntos de verificação Primeiro (First) e de Seqüência (Follow)

Page 5: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD Preditiva Recursiva

• Um analisador sintático recursivo é um conjunto de procedimentos possivelmente recursivos, um para cada não terminal a ser derivado

– Também chamado de analisador de “descida recursiva”

– Cada regra gramatical para um A não terminal é vista como uma definição de um procedimento, em que o lado direito de A especifica o código para esse procedimento

Page 6: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva• Exemplo

E T + E | T

T F * T | F

F a | b | (E)

procedimento ASDinício prox_token(); E;fim

procedimento Einício T; se (token='+‘) então prox_token(); E;fim

procedimento Tinício F; se (token =‘*‘) então       prox_token(); T;fim

procedimento F início se ( token ='(‘ ) então    prox_token();    E;    se (token =')‘) então prox_token()      senão ERRO; senão se (token =‘a‘) ou (token =‘b‘) então prox_token()    senão ERRO; fim

Page 7: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Método formal para gerar os procedimentos– Regras de transformação: mapeamento das regras de

um não terminal em grafos sintáticos• Também podem ser usados diagramas de transição

(Aho et al., 1995, pg82)– Regras de tradução: mapeamento dos grafos em

procedimentos

• ExemploS aAd A cA | eBB f | g

a AS:

Símbolo terminal

Símbolo não terminal

Grafo sintático

Page 8: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

S aAd

procedimento S início se (token =‘a’) então prox_token(); A; se (token =‘d’) então prox_token() senão ERRO; senão ERRO;fim

a A dS

Page 9: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

A cA | eB

procedimento A início se (token =‘c’) então prox_token(); A; senão se (token =‘e’) então prox_token(); B; senão ERRO;fim

c AA

e B

Page 10: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

B f | g

procedimento B início se (token =‘f’) ou (token =‘g’) então prox_token() senão ERRO;fim

fB

g

Page 11: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva• Programa principal

procedimento ASDinício prox_token();   S;    se (terminou_cadeia) então SUCESSO     senão ERROfim

Geralmente, concatenamos um símbolo $ no fim da cadeia antes do seu reconhecimento.

terminou_cadeia é a verificação da condição token = $

Page 12: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Regras de transformação– Regras gramaticais grafos sintáticos

1. Toda regra da gramática é mapeada em um grafo

2. Toda ocorrência de um terminal x corresponde ao seu reconhecimento na cadeia de entrada e a leitura do próximo símbolo dessa cadeia

x

Page 13: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva3. Toda ocorrência de um não-terminal A

corresponde a análise imediata de A

4. Alternativas são representadas como

A

A

B

C

Page 14: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

5. Uma seqüência A B C é mapeada em

6. A forma A* é representada por

A B C

A

Page 15: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Exercício: Faça o grafo sintático da gramática abaixo:

A x | (B)B AC C +AC | ε

( B )

Ax

BA C

CA+ C

Page 16: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Os grafos sintáticos podem ser simplificados

• transformar chamadas recursivas em loops

– Os grafos simplificados devem ser equivalentes aos grafos originais

– As simplificações nos grafos vão se refletir no código gerado para cada grafo

Page 17: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Exemplo:

• Simplifique o grafo abaixo para C +AC | ε

CA+

CA+ C

Page 18: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Regras de tradução– Grafos sintáticos procedimentos

1. Reduzir o número de grafos: união de grafos para maior simplicidade e eficiência

Page 19: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Faça a união dos grafos abaixo. Se possível, simplifique após a união.

ET E’

E’

T

+

T

+E

T

+E

T

Page 20: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva 2. Escrever um procedimento para cada grafo

• A seqüência

origina o procedimentoinício

A;B;C;

fim

A B C

Page 21: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• A alternativa

origina o procedimento início

se (token está em Primeiro(A)) então Asenão se (token está em Primeiro(B)) então Bsenão se (token está em Primeiro(C)) então C

fim

A

B

C

Page 22: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• Uma repetição

origina o procedimento início

enquanto (token está em Primeiro(A)) façaA;

fim

A

Page 23: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

• O terminal

origina

iníciose (token = x)

então prox_token()senão ERRO;

fim

x

Page 24: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva• O não terminal

origina

início

A;

fim

A

Page 25: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva• Exercício: fazer o(s) procedimento(s) para os

grafos sintáticos– Se possível, reduza o no de grafos

( B )

Ax

BA C

C A+

Page 26: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

( B )

Ax

C A+

BA C

( B )

Ax

+

A

Redução dos grafos

Page 27: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursiva

Redução dos grafos

( )

Ax

+

A

( B )

Ax

+

A

Page 28: Análise Sintática - Continuação Profa. Heloise Manica Paris Teixeira Parte 3 Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

ASD preditiva recursivaprocedimento Ainício

se (token =‘x’) então prox_token()senão se (token =‘(‘) então

façaprox_token();A;

até (token <>’+’);se (token =‘)’)

então prox_token()senão ERRO;

senão ERRO;fim

( )

Ax

+

A