analizador sintÁctico

Download ANALIZADOR SINTÁCTICO

Post on 25-Nov-2014

216 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

ANALIZADOR SINTCTICO

Es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramtica dada. Y en caso de que el programa de entrada sea vlido, suministra el rbol sintctico que lo reconoce.

ANALIZADOR SINTCTICO

Tambin hace: Acceder a la tabla de smbolos. Chequeo de tipos. Generar cdigo intermedio. Generar errores cuando se producen.

ANALIZADOR SINTCTICO

Tambin hace: Convierte el texto de entrada en otras estructuras (comnmente rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua implcita de la entrada. Crea tkens de una secuencia de caracteres de entrada y son estos tkens los que son procesados por el analizador sintctico para construir la estructura de datos.

ESQUEMA DEL ANALIZADOR SINTACTICOGramtica libre de contexto

Programa fuente

Token Analizador Lxico Pide siguiente Token Analizador Sintctico

rbol sintctico

Analizador Semntico

Representacin intermedia

Gestor de errores

Tabla de smbolos

IR A ERRORES

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down)

Se puede considerar como una tcnica que intenta encontrar una derivacin de la cadena de entrada. Tambin podemos considerarlo como una tcnica que intenta construir un rbol sintctico de la cadena de entrada, comenzando por la raz y creando los nodos a partir de ella hasta llegar a las hojas.

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down)

PROBLEMA DEL RETROCESOEl primer problema que se presenta con el anlisis sintctico descendente, es que a partir del nodo raz, el analizador sintctico no elija las producciones adecuadas para alcanzar la sentencia a reconocer. Cuando el analizador se da cuenta de que se ha equivocado de produccin, vuelve a tener que reconstruir parte del rbol sintctico.

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down)G = (VN, VT, S, P) donde:VN={, , } VT={module, d, p, ;, end} S= las reglas de produccin P son las siguientes: ::= module ; end ::= d | d; ::= p | p;

Analizar la cadena de entrada siguiente: module d ; d ; p ; p end

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down) Se parte del smbolo inicial

Aplicando la primera regla de produccin de la gramtica se obtiene: module ; end

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down)

module ; endd

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down)

module ; endd p

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down)

module ; endd p ;

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down)

module ; endd ;

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down) module ; endd ; d p

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down) module ; endd ; d p

;

ANALIZADORES SINTACTICOS DESCENDENTES (Top-down) module ; endd ; d p ;

p

Fin del proceso : module d ; d ; p ; p end

ANALIZADORES SINTACTICOS RECURSIVOS DESCENDENTES

Es una forma general de anlisis sintctico descendente que puede incluir retrocesos (es decir varios exmenes de la entrada). Mtodo descendente en el que se ejecuta un conjunto de mtodos recursivos para procesar la entrada. La secuencia de mtodos llamados durante el procesamiento de la entrada define implcitamente un rbol de anlisis sintctico.

ANALIZADORES SINTACTICOS RECURSIVOS DESCENDENTES Si una regla es de la forma

E1 | E2 | E3 | ... | Ek el cdigo de la funcin que le corresponde ser de la forma if( SIMB Sel(E1 ) ) Cdigo para E1 { } else if( SIMB Sel(E2 ) ) Cdigo para E2 { } : : else if( SIMB Sel(Ek ) ) { } Cdigo para Ek else { mensaje: ERROR: se espera: Sel(E1) Sel(E2) ... Sel(Ek) }

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

Se denominan analizadores sintcticos ascendentes (en ingls bottom-up) porque pretenden construir un rbol sintctico para una determinada cadena de entrada, empezando por las hojas y constituyendo el rbol hasta llegar a la raz.

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

Parte de las hojas del correspondiente rbol de derivacin derecho Anlisis de tipo shift-reduce (desplazamientoreduccin) Usaremos una pila, en la que iremos almacenando las posibles alternativas con las que trabajamos. Un movimiento consistir en comprobar si la cabeza de la pila se puede reducir por un no-terminal. Si es as, se realiza una reduccin.

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)Si coincide la cabeza de la pila con varias partes derechas de distintos smbolos no-terminales, stas han de ordenarse en alguna forma, y aplicarlas segn ese orden. Si no hubiera reduccin posible, hacemos un movimiento shift (apilar el siguiente smbolo a la entrada) Siempre se ha de reducir antes de hacer un desplazamiento. Si se agotan los smbolos a la entrada y no es posible hacer ninguna reduccin ms, aplicamos retroceso hasta el punto de la ltima reduccin.

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bEntrada= abcdef Pila vaca

c

Ed

F D Ce f

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bAvanza Pila = a

c

Ed

F D Ce f

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bReduce A Pila = A

c

Ed

F D Ce f

a

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bAvanza Pila = Ab

c

Ed

F D Ce f

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bReduce B Pila = B

c

Ed

F D Ce f

Ab

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bAvanza Pila = Bc

c

Ed

F D Ce f

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bAvanza Pila = Bcd

c

Ed

F D Ce f

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bAvanza Pila = Bcdef

c

Ed

F D Ce f

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bReduce C Pila = BcdC

c

Ed

F D Ce f

ef

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bReduce D Pila = BcdD

c

Ed

F D Ce f

C

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bReduce E Pila = BcE

c

Ed

F D Ce f

D

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bReduce F Pila = BcEF (Pila crece sin consumir entrada)

c

Ed

F D Ce f

ANALIZADORES SINTACTICOS ASCENDENTES (Bottom-up)

SB Aa bReduce S BcEF Pila = BcEF (Fin del reconocimiento)

c

Ed

F D Ce f

VENTAJAS Y DESVENTAJASVentajas: Son mtodos potentes que permiten reconocer la mayora de las construcciones de los lenguajes de programacin. Es un mtodo sin retroceso y por tanto determinista. Desventajas: Difcil de comprender, de implementar a mano y de realizar una traza.

Recommended

View more >