UNIDAD VII.-Manejo de errores.

7.1.-Función de manejo de errores.

Los errores encontrados en las distintas fases de análisis se envían a un módulo denominado manejo de errores. En el caso más sencillo puede ser un subprograma al que se le invoca enviándole el código de error, y que se encarga de escribir un mensaje con el error correspondiente, y el número de línea donde se ha producido, así como de cortar el proceso de traducción. Si se desea construir un tratamiento de errores más completo, por ejemplo detectando todos los errores del programa fuente, el módulo se complica dado que los analizadores deben proseguir su trabajo con falta de datos.

7.2.-  Errores léxicos.

Los errores léxicos se detectan cuando el analizador léxico intenta reconocer componentes léxicos y la cadena de caracteres de la entrada no encaja con ningún patrón. Son situaciones en las que usa un carácter inválido (@, $,",>,...), que no pertenece al vocabulario del lenguaje de programación, al escribir mal un identificador, palabra reservada u operador.

Algunos de los errores léxicos típicos son:

Nombre ilegales de identificadores: un nombre contiene caracteres inválidos.

Números incorrectos: un número contiene caracteres inválidos o no está formado correctamente.

Errores en palabras reservadas: caracteres omitidos, adicionales o cambiados de sitio.

Fin de archivo: se detecta un  fin de archivo a la mitad de un componente léxico.

Los errores léxicos se deben a descuidos del programador. En general, la recuperación de errores léxicos es sencilla y siempre se traduce en la generación de un error de sintaxis que sería detectado más tarde por el analizador sintáctico cuando el analizador léxico devuelve un componente léxico que el analizador sintáctico no espera en esa posición.

Los métodos de recuperación de errores léxicos se basan bien en saltarse caracteres en la entrada hasta que un patrón se ha podido reconocer; o bien usar otros métodos más sofisticados que incluyen la inserción, borrado, sustitución de un carácter en la entrada o intercambio de dos caracteres consecutivos.

7.3.- Errores sintácticos.

El manejo de errores de sintaxis es el más complicado desde el punto de vista de la creación 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 sintáctico debe tener como objetivos: indicar los errores de forma clara y precisa,  aclarar el tipo de error y su localización, recuperarse del error, para poder seguir examinando la entrada, no ralentizar significativamente la compilación.

Existen varias formas de corregir errores sintácticos y así evitar todos los problemas que generaría un error no detectado en esta fase y cuando se encuentra en fases más avanzadas

Ignorar el problema (Panic mode): consiste en ignorar el resto de la entrada hasta llegar a una condición de seguridad.

Recuperación a nivel de frase: intenta recuperar el error una vez descubierto. Hay que tener cuidado con este método, pues puede dar lugar a recuperaciones infinitas.

Reglas de producción adicionales para el control de errores: la gramática se puede aumentar con las reglas que reconocen los errores más comunes.

Corrección global: dada una secuencia completa de tokens a ser reconocida, si hay algún error por el que no se puede reconocer, consiste en encontrar la secuencia completa más parecida que sí se pueda reconocer. Es decir, el analizador sintáctico le pide toda la secuencia de tokens al léxico, y lo que hace es devolver lo más parecido a la cadena de entrada pero sin errores, así como el árbol que lo reconoce.

7.4.- Errores semánticos.

En cierto modo, este tipo de error es el más difícil de depurar, ya que ni el compilador ni el sistema proporcionan información sobre qué está fallando. Lo único cierto es que el programa no se está comportando como debería.

Un error semántico se produce cuando la sintaxis del código es correcta, pero la semántica o significado no es el que se pretendía. La construcción obedece las reglas del lenguaje, y por ello el compilador o intérprete no detectan los errores semánticos. Los compiladores e intérpretes sólo se ocupan de la estructura del código que se escribe, y no de su significado. 

Un error semántico puede hacer que el programa termine de forma anormal, con o sin un mensaje de error. Hablando en términos coloquiales, puede hacer que el equipo se quede "colgado".

Sin embargo, no todos los errores semánticos se manifiestan de una forma tan obvia. Un programa puede continuar en ejecución después de haberse producido errores semánticos, pero su estado interno puede ser distinto del esperado. Eventualmente, la consecuencia será un resultado incorrecto. Estos errores se denominan lógicos, ya que aunque el programa no se bloquea, la lógica que representan contiene un error.

El primer paso para corregirlo es intentar encontrar una correspondencia entre el código del programa y el comportamiento que se observa.  Quizá las variables no contengan los datos correctos, o bien es posible que el programa siga un camino distinto del pretendido.

4 comentarios:

  1. What is the best casino in Vegas to play for real money? - Dr.
    Top 10 best 하남 출장안마 casino sites 김해 출장샵 for real 양산 출장안마 money 2021. Casino.lv is 시흥 출장샵 one of our best casino online slots. They 광주 출장마사지 offer an excellent selection of

    ResponderEliminar
  2. un ejemplo de error sintactico cual seria?

    ResponderEliminar
    Respuestas
    1. un punto (.) o una coma (,) podria ser un ejemplo sintactico

      Eliminar