| INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO |

Introducción | Contenido | Bibliografía

Introducción
Contenido
UNIDAD I
UNIDAD II
UNIDAD III
UNIDAD IV
UNIDAD V
UNIDAD VI
UNIDAD VII
UNIDAD VIII Introducción 8.1 Planteamiento del problema 8.2 Téncnicas básicas de detección de errores 8.3 Agregando símbolos de error
UNIDAD IX
PROBLEMARIO
Bibliografía

8.2 Técnicas básicas de detección de errores

> La misión fundamental del analizador lexicográfico es la de encontrar dentro del programa fuente aquellas entidades primarias o de base llamadas tokens con el fin de procesarlos y convertirlos por separado a otro lenguaje que sea directamente tratable por el posterior analizador sintáctico. Es en tiempo del análisis lexicográfico donde pueden detectarse ciertas clases de error. En general, para AL estos errores provienen de la imposibilidad de localizar un token aceptable en la cadena de entrada. La forma más simple de actuación en uno de estos casos es ignorar aquellos caracteres extraños y continuar con el análisis lexicográfico hasta la localización del siguiente token.

> Los errores detectables en tiempo de AL más frecuentes pueden ser, por ejemplo:

> La presencia de un carácter que no pertenece al vocabulario terminal del lenguaje a reconocer.

> La escritura incorrecta de un nombre de usuario, un identificador, una constante, una etiqueta, etc. La presencia de dos puntos decimales dentro de una constante real, etc.

> Los comentarios o comillas sin cerrar.

> Errores sintácticos

> Cuando el analizador sintáctico no es capaz de llegar al final del reconocimiento de una cadena con éxito, es muestra de que se ha producido un error de tipo sintáctico.

> Todos los lenguajes de programación, como lenguajes formales, se construyen en base a la aplicación de las reglas de derivación de las gramáticas que las definen. Cuando, para una cadena dada, en un instante del análisis sintáctico, no se encuentra una regla de derivación que avance en el reconocimiento, implica que se han transgredido originalmente las leyes de formación de las cadenas del lenguaje. La transgresión de estas reglas es la forma habitual de detectar errores del tipo sintáctico.

> Ejemplos de errores sintácticos:

> Paréntesis que no se cierran:

> B := sin(2*(3 + A)

> Caracteres o símbolos no permitidos en un formato determinado:

> DO 100,I = 1,20

> O equivocados. Ausencia de delimitadores de instrucción válidos:

> I := 1 :
> J := 2;

> Utilización de palabras reservadas mal formadas:

> if A > B then bagin I := I + 1:
> A := A + 1
> end

> Errores en la estructura de bloques de un programa.
> Instrucciones compuestas mal construidas.

> La presencia de caracteres blanco o espacio mal situados:

> /* ESTO PODRIA SER UN COMENTARIO */

> En la mayoría de los casos, los errores sintácticos son inmediatamente asimilados por el usuario que ha desarrollado el programa. Para el compilador, en muchos casos, la precisión de saber cuantos errores hay y su exacta localización se hace una tarea difícil.

> Sea por ejemplo la siguiente instrucción de asignación:

> A := B – C * D / E )

> Ante esta circunstancia, el compilador detecta que se ha producido un error, pero no puede decidir si la contingencia es precisamente la presencia del paréntesis o la ausencia de otro de apertura y en que lugar.

> En otras circunstancias la detección del error se produce mucho más allá de su emplazamiento físico. Sea por ejemplo esta instrucción PL/I:

> IFA = B THEN A := A + 1;
> ELSE A := A – 1;

> La ausencia del carácter blanco o espacio entre la palabra IF y el identificador A únicamente es detectable cuando ya ha sido reconocido el token THEN puesto que este segmento de instrucción bien podría haber sido la instrucción de asignación

> PL/I:

> IFA := B;

> Errores semánticos

> Estos pueden ser detectados en tiempo de compilación y alguno de ellos en tiempo de ejecución. A simple vista tales errores no son perceptibles, solamente se hace extrapolando la instrucción considerando el contexto general del programa.

> Ejemplos:
> Identificadores no declarados.

> Declaraciones múltiples para el mismo nombre de usuario.
> Incompatibilidades entre operadores y operándoos.
> Inconsistencia entre parámetros formales y los reales de un subprograma.

> Errores de ejecución y del compilador

> Suele ser frecuente la aparición de errores durante la ejecución del programa ya compilado que determina la parada en dicha ejecución. Algunos errores son los siguientes:

> Errores de tipo aritmético. División por cero, raíz cuadrada de un número negativo, etc.

> Desbordamiento en la capacidad de una palabra_máquina con el consiguiente sobre flujo no deseado.

> Acceso a una matriz fuera del rango de alguno de sus subíndices.

> Las operaciones de lectura/escritura sobre ficheros no abiertos previamente.

> Pretendida lectura más allá del final de un archivo.

> Algunos métodos sofisticados debidos a Uzgalis, Essert y Book han sido realizados en este sentido.

> No obstante, algunos compiladores ponen instrucciones en sus respectivos repertorios que permiten prever en alguna medida circunstancias como las anteriores. Tal es el caso de COBOL con sus sentencias:

> ON SIZE ERROR y READ … AT END … , etc.

> Existen ciertos tipos de errores que se hacen presentes generalmente en tiempo de compilación y que se producen cuando se rebasan determinados límites o parámetros inherentes a la propia estructura del compilador. Algunos ejemplos clasificadores pueden ser:

> Límite en número de elementos de la tabla de símbolos lo que condiciona el número de identificadores distintos que pueden ser nombrados en el programa.

> Límite en tamaño de las pilas durante los análisis sintácticos y generaciones de código. Lo que condiciona la complejidad en las instrucciones. Un uso excesivo de las instrucciones IF anidadas o jerarquizadas y la adición de condiciones compuestas OR y AND facilitan la aparición de errores de este tipo.

> Limitación en el número de bloques. Lo que condiciona en algunos casos la lógica del programa dividido en módulos.

> Limitación en el número de anidamientos de ejecución repetida (como FOR, PERFORM, DO, etc.). Es habitual, por ejemplo, en intérpretes y compiladores de BASIC que el máximo número de FOR anidados sea de 50.

> Atrás Siguiente

##### Introducción / Contenido / Unidad I / Unidad II / Unidad III / Unidad IV / Unidad V / Unidad VI / Unidad VII / Unidad VIII / Unidad IX / Problemario / Bibliografía

##### Inicio

##### Créditos

José Sánchez Juárez, Andrés Ortigoza Campos, Fabiola Ocampo Botello