Successfully reported this slideshow.

Analisis Sintactico Predictivo

0

Share

Upcoming SlideShare
A Sintactico Descendente
A Sintactico Descendente
Loading in …3
×
1 of 10
1 of 10

Analisis Sintactico Predictivo

0

Share

Download to read offline

Explica cómo puede optimizarse el análisis sintáctico descendente prediciendo las producciones que se usarán en lugar de probar sistemáticamente todas las posibles.

Explica cómo puede optimizarse el análisis sintáctico descendente prediciendo las producciones que se usarán en lugar de probar sistemáticamente todas las posibles.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

Analisis Sintactico Predictivo

  1. 1. Análisis Sintáctico Predictivo Optimización del Análisis Sintáctico Descendente 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. Analizador descendente <ul><li>Algoritmo </li></ul><ul><ul><li>Seleccione una producción y construya los hijos </li></ul></ul><ul><ul><li>Encuentre el siguiente nodo (no terminal) </li></ul></ul><ul><ul><li>Si hay otro nodo aplicar recursivamente </li></ul></ul><ul><ul><li>Si no hay más nodos </li></ul></ul><ul><ul><ul><li>Si la cadena coincide entonces ACEPTAR </li></ul></ul></ul><ul><ul><ul><li>Si no coincide, probar recursivamente </li></ul></ul></ul>
  3. 3. Ejemplo <ul><li>Gramática de tipos en Pascal </li></ul><ul><li>Tipo -> Simple | ^id | </li></ul><ul><li>array [ Simple ] of Tipo </li></ul><ul><li>Simple -> integer | char | </li></ul><ul><li>núm puntopunto núm </li></ul>
  4. 4. Descendente (símbolo inicial) <ul><li>Function Tipo() </li></ul><ul><li>Resu = Simple() </li></ul><ul><li>If Not Resu Then </li></ul><ul><li>Resu = Match(“^”) And Match(“id”) </li></ul><ul><li>If Not Resu Then </li></ul><ul><li>Resu = Match(“Array”) And Match(“[”) </li></ul><ul><li>And Simple() And Match(“]”) </li></ul><ul><li>And Match(“of”) And Tipo() </li></ul><ul><li>End </li></ul><ul><li>End </li></ul><ul><li>Tipo = Resu </li></ul><ul><li>End Function </li></ul>
  5. 5. Descendente (nodo) <ul><li>Function Simple() </li></ul><ul><li>Resu = Match(“integer”) </li></ul><ul><li>If Not Resu Then </li></ul><ul><li>Resu = Match(“char”) </li></ul><ul><li>If Not Resu Then </li></ul><ul><li>Resu = Match(“núm”) </li></ul><ul><li>And Match(“puntopunto”) </li></ul><ul><li>And Match(“núm”) </li></ul><ul><li>End </li></ul><ul><li>End </li></ul><ul><li>Simple = Resu </li></ul><ul><li>End Function </li></ul>
  6. 6. Optimizaciones <ul><li>Probar con todas las producciones </li></ul><ul><ul><li>Recursividad puede tomar tiempo </li></ul></ul><ul><li>Escoger la más acertada anticipadamente </li></ul><ul><li>Implementación de Primero( β) </li></ul>
  7. 7. Primero( β) <ul><li>Dice cuál es el primer lexema </li></ul><ul><ul><li>De cada lado derecho </li></ul></ul><ul><li>Ejemplo: </li></ul><ul><li>Tipo -> Simple | ^id | </li></ul><ul><li>array [ Simple ] of Tipo </li></ul><ul><li>Primero(Simple) </li></ul><ul><li>Primero(^id) </li></ul><ul><li>Primero(array [ Simple ] of Tipo) </li></ul>
  8. 8. <ul><li>Antes de usar cualquier producción </li></ul><ul><ul><li>Chequear primer símbolo </li></ul></ul><ul><ul><li>Compararlo contra Primero( β) </li></ul></ul><ul><ul><li>Encontrar la producción correcta </li></ul></ul><ul><li>Análisis Sintáctico Predictivo </li></ul>Uso de Primero( β)
  9. 9. Casos especiales <ul><li>¿Primero( β) = Primero(δ)? </li></ul><ul><li>¿Primero( β) = nil? </li></ul>
  10. 10. Gramática infijo corregida <ul><li>Expr -> Término Resto </li></ul><ul><li>Resto -> + Expr | - Expr | nil </li></ul><ul><li>Término -> 0 </li></ul><ul><li>Término -> 1 </li></ul><ul><li>Término -> 2 </li></ul><ul><li>.... </li></ul><ul><li>Término -> 9 </li></ul>

×