analisis sintáctico

17
Análisis Sintáctico Analizadores Descendentes Método Predictivo Rercursivo

Upload: gidati

Post on 13-Jun-2015

1.026 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Analisis sintáctico

Análisis SintácticoAnalizadores Descendentes

Método Predictivo Rercursivo

Page 2: Analisis sintáctico

¿Que es un análisis descendente?

Es una técnica que intenta comprobar si una cadena x pertenece al lenguaje definido por una gramática aplicando los siguientes criterios:

• Partir del axioma de la gramática• Escoger reglas gramaticales estratégicamente• Hacer derivaciones por la izquierda (Left Most

Derivation)• Procesar la entrada de izquierda a derecha• Obtener el árbol de análisis sintáctico o error

Page 3: Analisis sintáctico

Analizadores predictivos

• Se determina qué regla aplicar a partir de un análisis de los primeros tokens a la entrada

• Son capaces de decidir qué regla de producción aplicar a cada paso en función de los elementos terminales que se encuentran en la sentencia de entrada

• Como consecuencia se consigue un proceso de análisis con complejidad lineal O (n) con respecto al tamaño del problema

• Estos analizadores son llamados analizadores LL (K)

Page 4: Analisis sintáctico

Método Predictivo Recursivo

Analizadores predictivos LL (1)• Determinan que regla de producción aplicar encada paso en

función del token que se encuentra en cada momento en la cabeza de lectura.

Analizadores predictivos LL (k)• Determinan que regla de producción aplicar en cada paso en

función de los k primeros tokens que se encuentra en cada momento en la cabeza de lectura.

Page 5: Analisis sintáctico

Analizadores LL (K)

Page 6: Analisis sintáctico

Analizadores LL (1)

• Para aplicar el análisis descendente predictivo LL(1) se asocia a cada regla de producción un conjunto de predicción.

• El conjunto de predicción de una regla está formado por la colección de todos los posibles símbolos terminales que es necesario encontrar en la sentencia de entrada para poder aplicar dicha regla

• De todas las reglas candidatas para el no terminal en curso se escoge aquella que contiene en su conjunto de predicción el terminal a la entrada.

Page 7: Analisis sintáctico

Análisis predictivo LL (1)

• Para aplicar el análisis predictivo LL (1) es necesario que los conjuntos de predicción de todas las reglas con un mismo símbolo terminal sean disjuntas entre sí.

Page 8: Analisis sintáctico

Condiciones LL (1)

• Para cumplir la condición LL (1) la gramática debe satisfacer necesariamente 3 requisitos:

› No ambigua

› Factorizada por la izquierda

› No recursiva por la izquierda

Page 9: Analisis sintáctico

Analizadores LL (1)

Page 10: Analisis sintáctico

Implementación Analizadores LL (1)

• En cada paso del proceso de derivación de la sentencia de entrada se realiza una predicción de la posible producción a aplicar

• Se comprueba si existe una concordancia entre el símbolo actual en la entrada con el primer terminal que se puede generar a partir de esa regla de producción

• Si existe esta concordancia se avanza en la entrada y en el árbol de derivación, en caso contrario se vuelve hacia atrás y se elige una nueva regla de derivación

Page 11: Analisis sintáctico

Implementación Analizadores LL (1)

• Nos restringimos al caso de métodos deterministas (no hay vuelta atrás) teniendo en cuenta un solo símbolo de pre análisis (componente léxico que se está analizando en la cadena de entrada en ese momento)

• Conocemos exactamente en todo momento que producción aplicar. El símbolo de pre análisis se actualiza cada vez que se produce una concordancia.

Page 12: Analisis sintáctico

Implementación Analizadores LL (1)

Procedimiento Parea(terminal)

Inicio

si pre análisis == terminal entonces

pre análisis=siguiente token

sino

error sintáctico

fin

Page 13: Analisis sintáctico

Implementación Analizadores LL (1)

Procedimiento A()

inicio

según pre análisis está en:

PRIMEROS(a1): {proceder según alternativa a1 }

PRIMEROS(a2): {proceder según alternativa a2 }

...

PRIMEROS(an): {proceder según alternativa an }

fin según

si pre análisis no pertenece a ningún PRIMEROS(ai) entonces error sintáctico, excepto si existe la alternativa A -> € en cuyo caso no se hace nada

fin

Page 14: Analisis sintáctico

Implementación Analizadores LL (1)

• Gramática que se va a implementar:

E --> T E’

E’--> + T E’ | - T E’ | €

T --> F T’

T’--> * F T’ | / F T’ | €

F --> (E) | num | id

Page 15: Analisis sintáctico

Implementación Analizadores LL (1)Procedimiento S() {

Expresion();

Parea(TKN #);

}

Procedimiento Expresion() {

Termino();

Expresion_Prima();

}

Procedimiento Expresion_Prima() {

según pre análisis está en:

{TKN MAS}: Parea(TKN MAS);

Termino();

Expresion_Prima();

{TKN MENOS}: Parea(TKN MENOS);

Termino();

Expresion_Prima();

si no está en ninguno de los anteriores entonces no hacer nada

fin según

}

Page 16: Analisis sintáctico

Implementación Analizadores LL (1)

Procedimiento Termino() {

Factor();

Termino_Prima();

}

Procedimiento Termino_Prima(){

según pre análisis está en:

{TKN POR}: Parea(TKN POR);

Factor();

Termino_Prima();

{TKN DIV}: Parea(TKN DIV);

Factor();

Termino_Prima();

si no está en ninguno de los anteriores entonces no hacer nada

fin según

}

Page 17: Analisis sintáctico

Implementación Analizadores LL (1)

Procedimiento Factor() {

según pre análisis está en:

{TKN ABREPAR}: Parea(TKN ABREPAR);

Expresion();

Parea(TKN CIERRAPAR);

{TKN NUM}: Parea(TKN NUM);

{TKN ID}: Parea(TKN ID);

si no está en ninguno de los anteriores entonces error();

fin según

}