MENSAJES DE ERROR.

            A continuación vamos a dar un listado con todos los posibles que pueden producirse durante el proceso de compilación y qué implica cada uno de ellos.

-Asignación de tipos incompatibles. Este mensaje aparecerá si se trata de hacer una asignación a una variable con un término de tipo distinto al declarado para la variable.

-Ecuación incorrecta, se esperaba una función y se ha encontrado una variable. Al igual que en el caso de las precondiciones, en las ecuaciones se espera que la parte izquierda sea una función y no una variable.

-El tipo que se está definiendo no se puede usar instanciado. Este mensaje indica que se está tratando de instanciar el mismo TAD que se está especificando. Es decir, si nos encontramos dentro de la especificación del TAD Lista y escribimos algo como Lista(Natural).

-Fallo en la compilación de ..... .tad. Este mensaje aparecerá si, al declarar los tipos de los argumentos o de retorno de una función, se hace uso de un TAD definido en los dominios y éste no está correctamente construido. En definitiva nos indica que ese TAD no compila correctamente.

-Fallo en la instanciación de ..... .tad. Indica que la instancia no se ha podido llevar a cabo. Normalmente aparecerá acompañado de otro mensaje de los aquí expuestos que aclararán el motivo por el cual no se ha podido realizar la instanciación exitosamente.

-Fallo en la instanciación: funciones no compatibles. Aparecerá cuando tratemos de instanciar una función genérica con otra función que no se ajusta a ella, ya sea en su nombre, tipo, condicionalidad, etc.

-FALLO GRAVE DE CREACIÓN DE TAD. COMPILACIÓN DETENIDA... Este mensaje se muestra en mayúsculas para indicar que el fallo detectado es muy grave. Aparece si no se comienza correctamente la especificación de un tipo, es decir, si no se pone correctamente TIPO y un nombre que empiece por letra y vaya seguido de letras, números o “_”. Se considera un fallo grave porque al no definirse el TAD correctamente no se puede comenzar con ninguna clase de proceso de compilación. Por ejemplo si escribimos algo así: TIPO 22.

-Función  ..... definida previamente en el genérico. Aparece si dentro de las operaciones exigidas a un tipo genérico definimos dos funciones con igual nombre.

-Función no definida o uso incorrecto de argumentos. Cuando tratemos de hacer uso de una función y ésta no haya sido definida, o esté especificada con argumentos de tipo distinto a los que se le están dando.

-La función ..... no ha sido definida como condicional.  Este mensaje indica que se está definiendo una precondición para una función que no ha sido declarada como condicional.

-La parte derecha de la ecuación devuelve un tipo distinto al esperado. Dado que la parte izquierda de una ecuación es definida mediante una función, la parte derecha debe devolver el mismo tipo que el especificado como tipo de retorno para esa función, de lo contrario aparecerá este mensaje.

-No está permitido asignar una variable a otra. A una variable sólo le podrán ser asignadas funciones, es decir, términos compuestos por una función y no por una única variable, de lo contrario el compilador nos muestra este mensaje de error.

-No se ha definido la precondición para la función .....  . Indica que la función ha sido definida como condicional y no se ha definido al menos una precondición para ella.

-No se puede hacer uso de la zona de precondiciones si no hay definida ninguna función. Indica que para poder hacer uso de esta zona debe haber definidas funciones.

-Nombre de finalización y de inicio no coinciden. Si tras escribir FIN ponemos un nombre distinto al nombre del tipo que estamos especificando, el cual ha sido definido al inicio de la especificación, tras poner TIPO. Por ejemplo, si tratamos de hacer algo así: TIPO Natural ..... ...... FIN tural.

-Número de argumentos esperados y dados para instanciar diferentes.  Este mensaje aparecerá cuando se trate de instanciar un TAD con un número de argumentos diferentes a los genéricos definidos en él. Por ejemplo,  Lista(Natural) para el ejemplo 3.1., pues se esperaban dos argumentos, uno para el tipo genérico Elemento y otro para la función genérica TMax.

-Operaciones requeridas no encontradas en el tipo de instancia. Con este mensaje, el compilador nos informa de que el tipo genérico que se está tratando de instanciar exige una serie de operaciones que no se encuentran en el tipo con el que se pretende hacer la instanciación. El motivo puede ser que no exista una función con ese nombre, número o tipo de argumentos, precondiciones, etc. En definitiva que no encuentra una función que se ajuste a lo exigido.

-Para definir más de una función vuelva a usar el operador FUNCION.  Este mensaje aparecerá si en  la zona de genéricos tratamos de definir más de una función por vez. En esta zona, tanto los tipos genéricos como las funciones genéricas deben ser definidas una a una usando la palabra reservada que identifica al tipo de genérico que se quiere definir: TIPO o FUNCION.

-Precondición incorrecta, se esperaba una función y se ha encontrado una variable. Este mensaje aparecerá si en la definición de una precondición, tanto si la parte derecha como la izquierda, son variables en lugar de funciones. Por ejemplo si tratamos de hacer algo así: a:menorIgual(a,b).

-Se han detectado funciones generadoras para las cuales no se han definido ecuaciones. El compilador comprueba, tras la zona de ecuaciones, que para todas aquellas funciones que no sean generadoras se haya definido al menos una ecuación, de no ser así mostrará este mensaje.

-Tad ..... definido en los dominios y fichero no encontrado en el directorio /tades. Este mensaje aparece cuando se define un tipo en los dominios y no existe un fichero con ese mismo nombre en el directorio de trabajo. Es por esto importante recordar que los ficheros deben tener el mismo nombre que TAD que se especifica en ellos, y como extensión  “.tad”. También es importante recordar que los ficheros se van a buscar en el directorio  tades que debe haber en el lugar donde se encuentre instalada la aplicación.

-Tipo incorrecto. Este mensaje aparecerá cuando tratamos de declarar una variable de un tipo que no ha sido empleado ni en los tipos de los parámetros de entrada ni de retorno de alguna de las funciones definidas. Independientemente de que hayamos definido el tipo en los dominios, ya que si no ha sido empleado en ninguna función no tendrá sentido hacer uso de una variable de ese tipo.

-Tipo ..... no definido en los dominios. Indica que se está haciendo uso de un TAD, que no es ni el propio que se está definiendo ni ninguno de los genéricos, y no ha sido declarado en los dominios.

-Variable ..... definida con anterioridad. Indica que tratamos de definir una variable con un nombre que ya está siendo empleado por otra variable en la especificación de este mismo TAD.

-Variable ..... No definida. Si tratamos de hacer uso de una variable que no haya sido definida con anterioridad en alguna de las zonas de declaraciones de variables.

 

            Además de los vistos, pueden aparecer mensajes de errores léxicos, que indicarán que el lenguaje ha sido empleado de forma incorrecta. Estos mensajes muestran la palabra encontrada y dan una lista de todas las palabras posibles que se esperaban en lugar de ella.