1 / 28

Análise Sintática - Continuação

Análise Sintática - Continuação. Parte 3. Profa. Heloise Manica Paris Teixeira. Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM). Análise sintática. Analisadores Sintáticos. Do símbolo de partida para a sentença. Da sentença para o simbolo de partida. Descendente (Top-down) ‏.

Download Presentation

Análise Sintática - Continuação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Análise sintática Analisadores Sintáticos Do símbolo de partida para a sentença Da sentença para o simbolo de partida Descendente (Top-down)‏ Ascendente (Bottom-up)‏ Com retrocesso (back track)‏ Sem retrocesso (preditive) Um analisador preditivo tenta prever a construção seguinte da cadeia de entrada com base em uma ou mais marcas de verificação à frente

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

  4. 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)

  5. 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

  6. ASD preditiva recursiva • Exemplo E  T + E | T T  F * T | F F  a | b | (E) procedimento ASD início prox_token(); E; 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 procedimento E início T; se (token='+‘) então prox_token(); E; fim procedimento T início F; se (token =‘*‘) então       prox_token(); T; fim

  7. a A S: 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 • Exemplo S  aAd A cA | eB B f | g Grafo sintático Símbolo terminal Símbolo não terminal

  8. a d A S 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

  9. ASD preditiva recursiva A  cA | eB c A 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 A e B

  10. ASD preditiva recursiva B  f | g f B g procedimento B início se (token =‘f’) ou (token =‘g’) então prox_token() senão ERRO; fim

  11. ASD preditiva recursiva • Programa principal procedimento ASD iní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 = $

  12. ASD preditiva recursiva • Regras de transformação • Regras gramaticais  grafos sintáticos • Toda regra da gramática é mapeada em um grafo • 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

  13. ASD preditiva recursiva • Toda ocorrência de um não-terminal A corresponde a análise imediata de A • Alternativas são representadas como A A B C

  14. ASD preditiva recursiva • Uma seqüência A B C é mapeada em • A forma A* é representada por A B C A

  15. B A C A x C + A C ( ) B ASD preditiva recursiva • Exercício: Faça o grafo sintático da gramática abaixo: A  x | (B) B  AC C  +AC | ε

  16. 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

  17. C C + + A A C ASD preditiva recursiva • Exemplo: • Simplifique o grafo abaixo para C  +AC | ε

  18. ASD preditiva recursiva • Regras de tradução • Grafos sintáticos  procedimentos • Reduzir o número de grafos: união de grafos para maior simplicidade e eficiência

  19. T E T E’ E + T T E’ + E + T ASD preditiva recursiva • Faça a união dos grafos abaixo. Se possível, simplifique após a união.

  20. ASD preditiva recursiva 2. Escrever um procedimento para cada grafo A B C • A seqüência origina o procedimento início A; B; C; fim

  21. ASD preditiva recursiva • A alternativa origina o procedimento início se (token está em Primeiro(A)) então A senão se (token está em Primeiro(B)) então B senão se (token está em Primeiro(C)) então C fim A B C

  22. ASD preditiva recursiva • Uma repetição origina o procedimento início enquanto (tokenestá em Primeiro(A)) faça A; fim A

  23. ASD preditiva recursiva • O terminal origina início se (token = x) então prox_token() senão ERRO; fim x

  24. ASD preditiva recursiva • O não terminal origina início A; fim A

  25. B A C A x + A ( ) B ASD preditiva recursiva • Exercício: fazer o(s) procedimento(s) para os grafos sintáticos • Se possível, reduza o no de grafos C

  26. B A C A A x x + + A ( ( ) ) B B A ASD preditiva recursiva • Redução dos grafos C

  27. A x + ( ) A A x + ( ) B A ASD preditiva recursiva • Redução dos grafos

  28. A x + ( ) A ASD preditiva recursiva procedimento A início se (token =‘x’) então prox_token() senão se (token =‘(‘) então faça prox_token(); A; até (token <>’+’); se (token =‘)’) então prox_token() senão ERRO; senão ERRO; fim

More Related