Análisis Sintáctico Predictivo Optimización del Análisis Sintáctico Descendente Leonel Morales Díaz [email_address] Copyri...
Analizador descendente <ul><li>Algoritmo </li></ul><ul><ul><li>Seleccione una producción y construya los hijos </li></ul><...
Ejemplo <ul><li>Gramática de tipos en Pascal </li></ul><ul><li>Tipo  ->  Simple  | ^id | </li></ul><ul><li>array [  Simple...
Descendente (símbolo inicial) <ul><li>Function Tipo() </li></ul><ul><li>Resu = Simple() </li></ul><ul><li>If Not Resu Then...
Descendente (nodo) <ul><li>Function Simple() </li></ul><ul><li>Resu = Match(“integer”) </li></ul><ul><li>If Not Resu Then ...
Optimizaciones <ul><li>Probar con todas las producciones </li></ul><ul><ul><li>Recursividad puede tomar tiempo </li></ul><...
Primero( β) <ul><li>Dice cuál es el primer lexema </li></ul><ul><ul><li>De cada lado derecho </li></ul></ul><ul><li>Ejempl...
<ul><li>Antes de usar cualquier producción </li></ul><ul><ul><li>Chequear primer símbolo </li></ul></ul><ul><ul><li>Compar...
Casos especiales <ul><li>¿Primero( β) = Primero(δ)? </li></ul><ul><li>¿Primero( β) = nil? </li></ul>
Gramática infijo corregida <ul><li>Expr -> Término Resto </li></ul><ul><li>Resto -> + Expr | - Expr | nil </li></ul><ul><l...
Upcoming SlideShare
Loading in …5
×

Analisis Sintactico Predictivo

3,555 views

Published on

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.

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,555
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
Downloads
46
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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>

×