A Sintactico Descendente

3,957 views

Published on

Profundización y ejemplos sobre análisis sintáctico descendente predictivo, muestra el diagrama de transiciones que puede generarse a partir de la gramática.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,957
On SlideShare
0
From Embeds
0
Number of Embeds
918
Actions
Shares
0
Downloads
48
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

A Sintactico Descendente

  1. 1. Análisis Sintáctico Descendente Sección 4.4 Leonel Morales Díaz [email_address] Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores
  2. 2. Análisis sintáctico por descenso recursivo <ul><li>Consíderese la gramática </li></ul><ul><li>S => cAd </li></ul><ul><li>A => ab | a </li></ul><ul><li>Entrada w = cad </li></ul><ul><li>Revisar las dos posibilidades de A </li></ul>
  3. 3. Análisis sintáctico por descenso recursivo <ul><li>Pero si fuera </li></ul><ul><li>S => cAd </li></ul><ul><li>A => aAb | a </li></ul><ul><li>Entrada w = cad </li></ul>
  4. 4. Análisis sintáctico predictivo <ul><li>Conocer el no terminal a expandir </li></ul><ul><ul><li>Dado el símbolo actual “a” (token) </li></ul></ul><ul><ul><li>A => α 1 | α 2 | ... | α n </li></ul></ul><ul><ul><li>Elegir α i anticipadamente </li></ul></ul>
  5. 5. Análisis sintáctico predictivo <ul><li>Ejemplo: </li></ul><ul><li>Prop => if Expr then Prop Else Prop </li></ul><ul><li>| while Expr do Prop </li></ul><ul><li>| begin lista_props end </li></ul><ul><li>¿Cómo elegir cuál usar? </li></ul>
  6. 6. Transformación <ul><li>¿Se puede usar predictivo en cualquier gramática? </li></ul><ul><li>Puede ser necesario hacer correcciones </li></ul><ul><ul><li>Eliminar recursión izquierda </li></ul></ul><ul><ul><li>Factorizar por la izquierda </li></ul></ul><ul><ul><ul><li>Agrupar todos los prefijos comunes </li></ul></ul></ul><ul><ul><ul><li>Prop => if Expr then Prop Else Prop </li></ul></ul></ul><ul><ul><ul><li>| if Expr then Prop </li></ul></ul></ul>
  7. 7. Diagrama de transiciones <ul><li>Con la gramática lista </li></ul><ul><li>Para cada no terminal: </li></ul><ul><ul><li>Crear estado inicial y final </li></ul></ul><ul><li>Para cada producción A => X 1 X 2 ...X n </li></ul><ul><ul><li>Crear camino desde inicial hasta final </li></ul></ul><ul><ul><li>Aristas X1, X2, ..., Xn </li></ul></ul>
  8. 8. Ejemplo <ul><li>Copie la siguiente gramática: </li></ul><ul><li>E => E + T | T </li></ul><ul><li>T => T * F | F </li></ul><ul><li>F => ( E ) | id </li></ul><ul><li>¿Tiene recursión izquierda? </li></ul><ul><li>¿Necesita factorización izquierda? </li></ul>
  9. 9. Gramática sin recursión <ul><li>E => TE’ </li></ul><ul><li>E’ => + TE’ | nil </li></ul><ul><li>T => FT’ </li></ul><ul><li>T’ => * FT’ | nil </li></ul><ul><li>F => ( E ) | id </li></ul>
  10. 10. Diagrama de transiciones 0 1 2 E : T E ' 3 4 6 E’ : + E’ 5 T nil

×