Estrategias de recuperación de errores en el diseño del compilador

El error puede ocurrir en varios niveles de compilación, por lo que el manejo de errores es importante para la correcta ejecución del código. Existen principalmente cinco estrategias de recuperación de errores, que son las siguientes:

  1. modo pánico
  2. Recuperación de nivel de fase
  3. Producción de errores
  4. Corrección global
  5. Tabla de símbolos

Modo de pánico:

Esta estrategia es utilizada por la mayoría de los métodos de análisis. En este método de descubrir el error, el analizador descarta los símbolos de entrada uno a la vez. Este proceso continúa hasta que se encuentra uno de los conjuntos designados de tokens de sincronización. Los tokens de sincronización son delimitadores como punto y coma o extremos. Estos tokens indican el final de la declaración de entrada.

Por lo tanto, en el modo de pánico, la recuperación de una cantidad considerable de entrada verifica si hay errores adicionales. Si hay menos errores en la misma declaración, esta estrategia es la mejor opción.

Ejemplo:   

C

int a, 5abcd, sum, $2;

// Después de int a, 5abcd , sum, $2 ; // el analizador descarta el símbolo de entrada uno a la vez.

Ventaja:

  1. Es fácil de usar.
  2. El programa nunca cae en el bucle.

Desventaja:  

  1. Esta técnica puede conducir a errores semánticos o errores de tiempo de ejecución en etapas posteriores.

Recuperación de nivel de fase:

En esta estrategia, al descubrir un error, el analizador realiza la corrección original en la entrada restante. Puede reemplazar un prefijo de la entrada restante con alguna string. Esto realmente ayuda al analizador a continuar con su trabajo. La corrección original puede ser la sustitución de la coma por punto y coma, la omisión de punto y coma o el ajuste de punto y coma faltante. Este tipo de corrección original lo decide el desarrollador del compilador.  

Ejemplos:

C

int a,b            
// AFTER RECOVERY:
int a,b;

 

Ventajas:   Este método se utiliza en muchos compiladores de reparación de errores.

Desventajas: Al realizar el reemplazo, se debe evitar que el programa caiga en un bucle infinito.

Producción de errores:

Requiere un buen conocimiento de los errores comunes que se pueden encontrar, luego podemos aumentar la gramática del lenguaje correspondiente con producciones de errores que generan las construcciones erróneas. Si se utiliza la producción de errores durante el análisis, podemos generar un mensaje de error adecuado para indicar el error que se ha reconocido en la entrada. Este método es extremadamente diferente de mantener, porque si cambiamos la gramática entonces se hace necesario cambiar las producciones correspondientes.

Ejemplo: suponga que la string de entrada es abcd.

                                Gramática: S-> A

                                                   A-> aA | bA | un | b  

                                                   B-> cd

La string de entrada no se puede obtener con la gramática anterior, por lo que debemos agregar la gramática aumentada.

                                Gramática: E->SB // AUMENTAR LA GRAMÁTICA

                                                   S -> A

                                                   A-> aA| bA | un | b  

                                                   B-> cd

Ahora, es posible obtener la string abcd.

ventajas: 

  1. Los errores de fase sintáctica generalmente se recuperan mediante la producción de errores.

Desventajas:

  1. El método es muy difícil de mantener porque si cambiamos la gramática entonces se hace necesario cambiar la producción correspondiente.
  2. Es difícil de mantener por los desarrolladores.

Corrección global:

A menudo queremos un compilador de este tipo que realice muy pocos cambios al procesar una string de entrada incorrecta. Dada una string de entrada x y una gramática G incorrectas , el propio algoritmo puede encontrar un árbol de análisis para una string relacionada y; tal que el número de inserciones, eliminaciones y cambios de token necesarios para transformar x en y sea lo más bajo posible. Los métodos de corrección global aumentan los requisitos de tiempo y espacio en el momento del análisis. Esto es simplemente un concepto teórico.

Ventajas: hace muy pocos cambios al procesar una string de entrada incorrecta.

Desventajas: Es simplemente un concepto teórico, que es inaplicable.

Tabla de símbolos:

En los errores semánticos, los errores se recuperan utilizando una tabla de símbolos para el identificador correspondiente y si los tipos de datos de dos operandos no son compatibles, el compilador realiza automáticamente la conversión de tipo .

Ventajas: permite la conversión de tipos básicos, que generalmente hacemos en los cálculos de la vida real.

Desventajas: solo es posible la conversión de tipos implícita .

Publicación traducida automáticamente

Artículo escrito por rajzzz 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 *