Analisis Sintactico Predictivo

10
Análisis Sintáctico Predictivo Optimización del Análisis Sintáctico Descendente Leonel Morales Díaz [email protected] Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores

description

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.

Transcript of Analisis Sintactico Predictivo

Page 1: Analisis Sintactico Predictivo

Análisis Sintáctico Predictivo

Optimización del Análisis Sintáctico Descendente

Leonel Morales Dí[email protected]

Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple.Derechos reservados

Disponible en: http://www.ingenieriasimple.com/compiladores

Page 2: Analisis Sintactico Predictivo

Analizador descendente

• Algoritmo1. Seleccione una producción y construya

los hijos2. Encuentre el siguiente nodo (no

terminal)3. Si hay otro nodo aplicar recursivamente4. Si no hay más nodos

1. Si la cadena coincide entonces ACEPTAR2. Si no coincide, probar recursivamente

Page 3: Analisis Sintactico Predictivo

Ejemplo

• Gramática de tipos en Pascal

Tipo -> Simple | ^id |array [ Simple ] of Tipo

Simple -> integer | char |núm puntopunto núm

Page 4: Analisis Sintactico Predictivo

Descendente (símbolo inicial)Function Tipo()

Resu = Simple()If Not Resu Then

Resu = Match(“^”) And Match(“id”)If Not Resu Then

Resu = Match(“Array”) And Match(“[”)And Simple() And Match(“]”)And Match(“of”) And Tipo()

EndEndTipo = Resu

End Function

Page 5: Analisis Sintactico Predictivo

Descendente (nodo)Function Simple()

Resu = Match(“integer”)If Not Resu Then

Resu = Match(“char”)If Not Resu Then

Resu = Match(“núm”)And Match(“puntopunto”)And Match(“núm”)

EndEndSimple = Resu

End Function

Page 6: Analisis Sintactico Predictivo

Optimizaciones

• Probar con todas las producciones– Recursividad puede tomar tiempo

• Escoger la más acertada anticipadamente

• Implementación de Primero(β)

Page 7: Analisis Sintactico Predictivo

Primero(β)

• Dice cuál es el primer lexema– De cada lado derecho

• Ejemplo:Tipo -> Simple | ^id |

array [ Simple ] of Tipo• Primero(Simple)• Primero(^id)• Primero(array [ Simple ] of Tipo)

Page 8: Analisis Sintactico Predictivo

• Antes de usar cualquier producción– Chequear primer símbolo– Compararlo contra Primero(β)– Encontrar la producción correcta

• Análisis Sintáctico Predictivo

Uso de Primero(β)

Page 9: Analisis Sintactico Predictivo

Casos especiales

• ¿Primero(β) = Primero(δ)?• ¿Primero(β) = nil?

Page 10: Analisis Sintactico Predictivo

Gramática infijo corregida

Expr -> Término RestoResto -> + Expr | - Expr | nilTérmino -> 0Término -> 1Término -> 2....Término -> 9