Sei sulla pagina 1di 4

Manejo de errores lxicos

Son pocos los errores que se pueden


detectar al hacer anlisis lxico
fi (a == f(x)) //Error de sintaxis
Pero puede existir algn error si ninguno de
los patrones con cuerda con el prefijo de
entrada
Tcnicas de recuperacin de errores
Borrar un carcter extrao
Insertar un carcter que falta
Reemplazar un carcter incorrecto por otro
correcto
Intercambiar dos caracteres adyacentes
http://antares.itmorelia.edu.mx/~jcolivares/courses/ps207b/ps2_u3.pdf
3.1 Manejo de errores lxicos.

Recuperacin en modo pnico: este tipo de estrategia es la ms comn.
Consiste en que cuando se detecta una cadena no reconocible, se siguen leyendo
caracteres hasta que se vuelve a detectar un token vlido. Borrar un carcter
extrao. Insertar un carcter que falta (e.g. reemplazar 2C por 2*C). Reemplazar
un carcter incorrecto por otro correcto (e.g. reemplazar INTEJER por INTEGER si
el lugar en donde aparece el primer lexema no es el indicado para un identificador)
Intercambiar dos caracteres, tokens, adyacentes (e.g. I INTEGER por INTEGER
I).
La recuperacin de errores durante el AL puede producir otros en las
siguientes fases. var numero : integer; begin num?ero:=10; end el compilador
podra producir los siguientes mensajes de error: ERROR LXICO: carcter no
reconocido (?) ERROR SEMNTICO: identificador no declarado (num) ERROR
SINTCTICO: falta operador entre identificadores ERROR SEMNTICO:
identificador no declarado (ero)
Otras veces no: var i,j: integer; begin i:=1; ? j:=2; end




1.1. MANEJO DE ERRORES

Debido a la naturaleza del proceso de programacin, un traductor de programas
se confronta con errores sintcticos con mucha frecuencia en los programas.
Debido a esto, se requiere de una estrategia para tratar los errores respecto a las reglas
que define el lenguaje de programacin. La respuesta a los errores cae entre el colapso
total del sistema hasta a la correccin automtica completa del programa fuente.

Una clasificacin posible de los errores es la siguiente:

I. Respuestas inaceptables
1. Respuesta incorrecta (el error no se reporta)
a. El compilador sufre un colapso y falla
b. El compilador cae en un lazo infinito
c. El compilador continua
2. Respuesta correcta (pero casi sin utilidad)
a. El compilador reporta el primer error y se detiene

II. Respuesta aceptable
1. Respuestas posibles
a. El compilador reporta el error y continua para encontrar otros posteriores
si existen.
b. El compilador reporta el error y lo repara si es posible, continua y entrega
el cdigo correcto.
2. Respuestas imposibles con la tecnologa actual
a. El compilador corrige el error y entrega el cdigo que el programador
intentaba escribir.




1.2. DETECCIN DE ERRORES

1.2.1. La Naturaleza de los errores

Por definicin, un compilador slo puede detectar errores sintcticos. Los errores
semnticos se manifiestan slo al ejecutar el programa y no son posibles de
detectar antes con las tcnicas actuales. Para ello se requiere un programa que
verifique que lo que el programador escribi sea lo que se requiere para el
problema en cuestin.

Cualquier desviacin de las reglas de programacin de un lenguaje dado es
llamado error sintctico. Los errores sintcticos son detectadas en parte, en la
mayora de los compiladores modernos, por un analizador libre de contexto y el
resto por algunos mecanismos a la medida con el uso de tablas de compilacin.

1.2.2. Cmo se detectan los errores?
Los errores son detectados de dos formas:

Los errores en la sintaxis libre de contexto del programa fuente son las ms fciles
de encontrar debido a las especificaciones precisas de la sintaxis.

Los errores pueden detectarse tambin por verificaciones de la sintaxis sensitiva al
contexto del programa fuente.

Los errores en este tipo incluyen los de definicin de tipo en variables y
expresiones y son difciles de detectar en forma efectiva debido a lo vago e
impreciso de las descripciones propuestas para la sintaxis libre de contexto.

Dnde se detectan los errores?

Es posible que la deteccin del error no ocurra hasta que el analizador haya procedido una
distancia arbitraria ms all del punto donde el error tuvo lugar:

a=b+c
THEN x=x-2 ;
ELSE x=x+1 ;

En este ejemplo est claro para casi cualquier programador que el error es una
ficha del tipo IF que falta. El punto donde se localiza THEN es el mnimo donde el error se
puede detectar en un analizador de izquierda a derecha. Cuando nuestros ojos alcanzan
este punto somos capaces rpidamente de saltar hacia atrs para descubrir el punto
exacto del error.

Se puede codificar un analizador que salte hacia atrs para encontrar el error, pero el
proceso en general lleva demasiado tiempo para ser prctico. Algunos autores ofrecen
algoritmos para reparar un programa invlido y transformarlo en uno vlido lo ms prximo
al errneo. El algoritmo toma un nmero de pasos proporcional a n3 donde n representa el
nmero de smbolos del programa fuente.

Se debe recalcar que un compilador usualmente no es capaz de determinar la causa de un
error aunque este se detecte de inmediato. El error puede deberse a un error de
mecanografa, un descuido del programador o una falta de entendimiento del lenguaje de
programacin. Mientras ms pronto se detecte el error hay ms probabilidad de que el
compilador pueda tratar de adivinar la causa y tomar la accin correctiva adecuada.

1.2.3. Reporte de errores

Cada error una vez detectado debe ser reportado de forma clara y precisa.

Existen an compiladores que confrontan al usuario con mensajes tales como: error 221-
34 o, pero an erro de tipo desconocido.

El usuario debe referirse, entonces, a un manual de explicaciones que provee el autor del
compilador donde quiz encuentre una explicacin.

En los mensajes de error se debe incluir cualquier informacin que el compilador conozca y
pueda utilizarse para que el usuario discierna la causa del error; tal informacin puede
incluir apuntadores, nombres, atributos, etc. Toda esta informacin se debe expresar en
trminos de lenguaje fuente y debe orientarse hacia el usuario.

CONCLUSIONES

Para empezar se debe entender el proceso de compilacin, para que la maquina entienda
el lenguaje a analizar, esto inicia con el lxico.
Los autmatas son para poder entender el proceso del compilador, cuando pasa por
diferentes estados para llegar a su estado final.
.
BIBLIOGRAFIA
Anlisis y diseo de compiladores Emiliano Llano Daz
Errores lxicos
El anlisis lxico constituye la primera fase, aqu se lee el programa fuente de izquierda a derecha
y se agrupa en componentes lxicos (tokens), que son secuencias de caracteres que tienen un
significado. Adems, todos los espacios en blanco, lneas en blanco, comentarios y dems
informacin innecesaria se elimina del programa fuente. Tambin se comprueba que los smbolos
del lenguaje (palabras clave, operadores,...) se han escrito correctamente.

Como la tarea que realiza el analizador lxico es un caso especial de coincidencia de patrones, se
necesitan los mtodos de especificacin y reconocimiento de patrones, y stos mtodos son
principalmente las expresiones regulares y los autmatas finitos. Sin embargo, un analizador lxico
tambin es la parte del traductor que maneja la entrada del cdigo fuente, y puesto que esta
entrada a menudo involucra un importante gasto de tiempo, el analizador lxico debe funcionar de
manera tan eficiente como sea posible.

Son pocos los errores simplemente en el nivel lxico ya que tiene una visin muy restringida de un
programa fuente. El analizador lxico debe devolver el componente lxico de un identificador y
dejar a otra fase se ocupe de los errores.

Suponga que una situacin en la cual el analizador lxico no puede continuar por que ninguno de
los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia de recuperacin ms
sencilla sea recuperacin EN MODO PANICO (este mtodo de recuperacin es donde se borra
caracteres sucesivos de la entrada hasta que el analizador lxico pueda encontrar un componente
lxico bien formado). Los programas no siempre son correctos!!

El compilador tiene que:
1. Reportar clara y exactamente la presencia de errores
2. Recuperarse de cada error lo suficientemete rpido para poder detectar errores
subsiguientes:
Tratar de evitar mensajes falsos de error
Un error que produce un token erroneo
Errores lxicos posibles

Un token o componente lxico es una cadena de caracteres que tiene un significado coherente en
cierto lenguaje de programacin. Ejemplos de tokens, podran ser palabras clave (if, while,
int), identificadores, nmeros, signos, o un operador de varios caracteres. Son los elementos ms
bsicos sobre los cuales se desarrolla toda traduccin de un programa, surgen en la primera fase,
llamada anlisis lxico.
http://manejodeerrores.blogspot.mx/

Potrebbero piacerti anche