Вы находитесь на странице: 1из 9

Anlisis Sintctico

Lenguajes y Autmatas I
Maestra: Nancy Carolina Martnez

2013
Alumna: Luz Mara Zavala Pia
ITSUR
13/01/2013
Introduccin

En esta investigacin veremos los elementos bsicos de la notacin del Anlisis
Sintctico. Al igual, nos centraremos fundamentalmente en la manera en la que se
comunican analizadores lxicos y sintcticos, la forma en la que deben escribirse
las gramticas y la resolucin de cierto tipo de ambigedades sintcticas.
Este anlisis permite el reconocimiento de expresiones definidas mediante
gramticas recursivas, siempre que estas puedan ser analizadas por un analizador
recursivo descendente. Sin embargo, las expresiones regulares Perl 5.10 hace
difcil construir una representacin del rbol de anlisis sintctico abstracto.
Adems, la necesidad de explicitar en la regexp los blancos existentes entre los
smbolos hace que la descripcin sea menos robusta y menos legible.
El objetivo del analizador sintctico es agrupar los tokens suministrados por el
scanner para reconocer frases determinar si es sintcticamente correcto
establecerla estructura subyacente.
La sintaxis se suele especificar formalmente mediante una GLC
El parser recibe tokens y los agrupa de acuerdo a producciones especificadas
por la GLC
El parser detecta errores sintcticos.






Desarrollo

Qu es el 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. En teora, se supone que la salida
del analizador sintctico es alguna representacin del rbol sintctico que
reconoce la secuencia de tokens suministrada por el analizador lxico.
En la prctica, el analizador sintctico tambin hace:
Acceder a la tabla de smbolos (para hacer parte del trabajo del analizador
semntico).
Chequeo de tipos (del analizador semntico).
Generar cdigo intermedio.
Generar errores cuando se producen.
En definitiva, realiza casi todas las operaciones de la compilacin. Este mtodo de
trabajo da lugar a los mtodos de compilacin dirigidos por sintaxis.







Manejo de errores sintcticos

Si un compilador tuviera que procesar slo programas correctos, su diseo e
implantacin se simplificaran mucho. Pero los programadores a menudo escriben
programas incorrectos, y un buen compilador debera ayudar al programador a
identificar y localizar errores. Es ms, considerar desde el principio el manejo de
errores puede simplificar la estructura de un compilador y mejorar su respuesta a
los errores.
Los errores en la programacin pueden ser de los siguientes tipos:
Lxicos, producidos al escribir mal un identificador, una palabra clave o un
operador.
Sintcticos, por una expresin aritmtica o parntesis no equilibrados.
Semnticos, como un operador aplicado a un operando incompatible.
Lgicos, puede ser una llamada infinitamente recursiva.
El manejo de errores de sintaxis es el ms complicado desde el punto de vista de
la creacin de compiladores. Nos interesa que cuando el compilador encuentre un
error, se recupere y siga buscando errores. Por lo tanto el manejador de errores
de un analizador sintctico debe tener como objetivos:
Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su
localizacin.
Recuperarse del error, para poder seguir examinando la entrada.
No ralentizar significativamente la compilacin.
Un buen compilador debe hacerse siempre teniendo tambin en mente los errores
que se pueden producir; con ello se consigue:
Simplificar la estructura del compilador.
Mejorar la respuesta ante los errores.
Tenemos varias estrategias para corregir errores, una vez detectados:
Ignorar el problema (Panic mode): Consiste en ignorar el resto de la entrada
hasta llegar a una condicin de seguridad. Una condicin tal se produce cuando
nos encontramos un token especial (por ejemplo un ; o un END).A partir de este
punto se sigue analizando normalmente.

Ejemplo:






Recuperacin a nivel de frase: Intenta recuperar el error una vez descubierto. En
el caso anterior, por ejemplo, podra haber sido lo suficientemente inteligente
como para insertar el token ; . Hay que tener cuidado con este mtodo, pues
puede dar lugar a recuperaciones infinitas.
Reglas de produccin adicionales para el control de errores: La gramtica se
puede aumentar con las reglas que reconocen los errores ms comunes. En el
caso anterior, se podra haber puesto algo como: sent_errnea sent_sin_acabar
sentencia_acabada ; sentencia_acabada sentencia ; sent_sin_acabar
sentencia. Lo cual nos da mayor control en ciertas circunstancias

Correccin Global: Dada una secuencia completa de tokens a ser reconocida, si
hay algn error por el que no se puede reconocer, consiste en encontrar la
secuencia completa ms parecida que s se pueda reconocer. Es decir, el
analizador sintctico le pide toda la secuencia de tokens al lxico, y lo que hac es
devolver lo ms parecido a la cadena de entrada pero sin errores, as como el
rbol que lo reconoce.

Tipo de gramtica que acepta un analizador sintctico
Nosotros nos centraremos en el anlisis sintctico para lenguajes basados en
gramticas formales, ya que de otra forma se hace muy difcil la comprensin del
compilador, y se pueden corregir, quizs ms fcilmente, errores de muy difcil
localizacin, como es la ambigedad en el reconocimiento de ciertas sentencias.
La gramtica que acepta el analizador sintctico es una gramtica de contexto
libre:
Gramtica: G (N, T, P, S)
N = No terminales.
T = Terminales.
P = Reglas de Produccin.
S = Axioma Inicial.

En el que: N = {E, T, F} estn a la izquierda de la regla.
T = {ID, NUM, ( ,) ,+ ,*}
P = Son las siete reglas de produccin.
S = Axioma inicial. Podra ser cualquiera, en este caso es E.
Derivaciones: La idea central es que se considera una produccin como una
regla de reescritura, donde el no terminal de la izquierda es sustituido por la
cadena del lado derecho de la produccin.

Derivacin por la izquierda: Derivacin donde solo el no terminal de ms a
la izquierda de cualquier forma de frase se sustituye en cada paso.
Derivacin por la derecha o Derivacin cannica: Derivacin donde el no
terminal ms a la derecha se sustituye en cada paso.
rbol sintctico de una sentencia de un lenguaje
Es una representacin que se utiliza para describir el proceso de derivacin de
dicha sentencia.
Como nodos internos del rbol, se sitan los elementos no terminales de las
reglas de produccin que vayamos aplicando, y tantos hijos como smbolos
existan en la parte derecha de dichas reglas.

Ambigedad: Una gramtica es ambigua si derivando de forma diferente con el
mismo tipo de derivacin se llega al mismo resultado.

Forma Sentencial
Es cualquier secuencia de terminales y no terminales obtenida mediante
derivaciones a partir del axioma inicial.

Tipos de Anlisis
De la forma de construir el rbol sintctico se desprenden dos tipos o clases de
analizadores sintcticos. Pueden ser descendentes o ascendentes.
Descendentes: Parten del axioma inicial, y van efectuando derivaciones a
izquierda hasta obtener la secuencia de derivaciones que reconoce a la sentencia.
Pueden ser:
o Con retroceso.
o Con recursin.
o LL(1)
Ascendentes: Parten de la sentencia de entrada, y van aplicando reglas de
produccin hacia atrs (desde el consecuente hasta el antecedente), hasta llegar
al axioma inicial.
Pueden ser:
o Con retroceso.
o LR(1)
Anlisis descendente con retroceso.
Objetivo: El mtodo parte del axioma inicial y aplica todas las posibles reglas al
no terminal ms a la izquierda.


Conclusin

Los compiladores para lenguajes de alto nivel tienen muchas fases, en las que
progresivamente se va transformando un texto de un lenguaje a otro.
Muchas aplicaciones necesitan lenguajes especiales y, por tanto, compiladores.
Estos compiladores sencillos se pueden construir con herramientas para anlisis
lxico y sintctico, como el Lex, Yacc.


Referencias:
http://webdiis.unizar.es/~rbejar/COMPI/docs/3.AnalisisSintactico.pdf
http://nereida.deioc.ull.es/~pl/perlexamples/node41.html
http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf
http://www.ctr.unican.es/asignaturas/lan/compila-2en1.pdf

Вам также может понравиться