Detección de errores y recuperación en el compilador

En esta fase de compilación, todos los posibles errores cometidos por el usuario son detectados y notificados al usuario en forma de mensajes de error. Este proceso de localizar errores e informarlos a los usuarios se denomina proceso de gestión de errores

Funciones de un controlador de errores.

  • Detección
  • Informes
  • Recuperación

Clasificación de errores

Errores en tiempo de compilación

Los errores en tiempo de compilación son de tres tipos: – 

Errores de fase léxica

Estos errores se detectan durante la fase de análisis léxico. Los errores léxicos típicos son:

  • Exceso de longitud de identificador o constantes numéricas.
  • La aparición de personajes ilegales.
  • String sin igual
Example 1 : printf("Geeksforgeeks");$
This is a lexical error since an illegal character $appears at the end of statement.

Example 2 : This is a comment */
This is an lexical error since end of comment is present but beginning is not present

Recuperación de errores para errores léxicos: 

Recuperación del modo de pánico 

  • En este método, los caracteres sucesivos de la entrada se eliminan uno a la vez hasta que se encuentra un conjunto designado de tokens de sincronización. Los tokens de sincronización son delimitadores como; o }
  • La ventaja es que es fácil de implementar y garantiza no entrar en un bucle infinito.
  • La desventaja es que se omite una cantidad considerable de entrada sin verificar si hay errores adicionales.

Errores de fase sintáctica:

Estos errores se detectan durante la fase de análisis de sintaxis. Los errores de sintaxis típicos son:

  • Errores en la estructura
  • Operador faltante
  • Palabras clave mal escritas
  • paréntesis desequilibrado
Example : switch(ch)
              {
                 .......
                 .......
              }

La palabra clave switch está incorrectamente escrita como switch. Por lo tanto, se produce un error  de «palabra clave/identificador no identificado» .

Recuperación de errores para recuperación de fase sintáctica: 

1. Recuperación del modo de pánico 

  • En este método, los caracteres sucesivos de la entrada se eliminan uno a la vez hasta que se encuentra un conjunto designado de tokens de sincronización. Los tokens de sincronización son medidores de entrega como; o }
  • La ventaja es que es fácil de implementar y garantiza no entrar en un bucle infinito.
  • La desventaja es que se omite una cantidad considerable de entrada sin verificar si hay errores adicionales.

2. Recuperación del modo de declaración 

  • En este método, cuando un analizador encuentra un error, realiza la corrección necesaria en la entrada restante para que el resto de la declaración de entrada permita que el analizador analice más adelante.
  • La corrección puede ser la eliminación de puntos y comas adicionales, la sustitución de la coma por puntos y comas o la inserción de un punto y coma faltante.
  • Al realizar la corrección, se debe tener sumo cuidado para no entrar en un bucle infinito.
  • Una desventaja es que le resulta difícil manejar situaciones en las que se produjo el error real antes de señalar la detección.

3. Producción de errores 

  • Si un usuario tiene conocimiento de los errores comunes que se pueden encontrar, estos errores se pueden incorporar aumentando la gramática con producciones de errores que generan construcciones erróneas.
  • Si se utiliza, entonces, durante el análisis, se pueden generar los mensajes de error apropiados y se puede continuar con el análisis.
  • La desventaja es que es difícil de mantener.

4. Corrección global 

  • El analizador examina todo el programa e intenta encontrar la coincidencia más cercana que esté libre de errores.
  • El programa de coincidencia más cercano tiene menos cantidad de inserciones, eliminaciones y cambios de tokens para recuperarse de una entrada errónea.
  • Debido a la alta complejidad de tiempo y espacio, este método no se implementa en la práctica.

Errores semánticos

Estos errores se detectan durante la fase de análisis semántico. Los errores semánticos típicos son 

  • Tipo incompatible de operandos
  • Variables no declaradas
  • No emparejar los argumentos reales con uno formal
Example : int a[10], b;
                 .......
                 .......
                 a = b;

Genera un error semántico por un tipo incompatible de a y b. 

Recuperación de errores para errores semánticos

  • Si se encuentra el error «Identificador no declarado» , para recuperarlo se realiza una entrada en la tabla de símbolos para el identificador correspondiente.
  • Si los tipos de datos de dos operandos son incompatibles, el compilador realiza la conversión automática de tipos.

Publicación traducida automáticamente

Artículo escrito por Ankit87 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *