Skip to content

Casos de Prueba y Errores Semánticos Detectados

El análisis semántico es la fase del compilador donde se detectan errores que, aunque el código sea sintácticamente correcto, violan las reglas de significado o coherencia del lenguaje (como la compatibilidad de tipos, la declaración de identificadores, o las reglas de ámbito). A continuación, se presentan ejemplos de código en LibreScript que contienen errores semánticos y los respectivos mensajes que el compilador generaría. Estos casos de prueba demuestran la capacidad del analizador semántico para identificar y reportar problemas de significado.

Ejemplo 1: Error de Tipo en Asignación (Tipo Primitivo)

Section titled “Ejemplo 1: Error de Tipo en Asignación (Tipo Primitivo)”

Este es un error fundamental de tipado donde se intenta asignar un valor de un tipo incompatible a una variable o constante previamente declarada con un tipo diferente.

Código LibreScript:

$miNumero: numero = "hola";

Mensaje de Error Generado por el Compilador:

Terminal window
Error Semántico: Tipo incompatible para variable '$miNumero'. Se esperaba 'numero' pero obtuvo 'texto'.

Explicación: La variable $miNumero ha sido declarada explícitamente con el tipo numero. Sin embargo, se le intenta asignar un literal de texto ("hola"). El analizador semántico, al comparar los tipos, detecta esta incompatibilidad directa y reporta el error, impidiendo que el programa se compile.

Ejemplo 2: Error de Tipo en Asignación (con Arreglos)

Section titled “Ejemplo 2: Error de Tipo en Asignación (con Arreglos)”

Este ejemplo muestra un error de tipo específico para la asignación de arreglos, donde el tipo del arreglo no coincide con el tipo del valor asignado.

Código LibreScript:

$nombres: texto[] = "Ana";

Mensaje de Error Generado por el Compilador:

Terminal window
Error Semántico : Tipo incompatible para variable '$nombres'. Se esperaba 'texto[]' pero se obtuvo 'texto'.

Explicación: La variable $nombres se declara como un arreglo de texto (texto[]). Sin embargo, se le asigna un simple literal de texto ("Ana") en lugar de un arreglo de textos (ej., ["Ana"]). El analizador semántico reconoce que un texto no es compatible con un texto[] y genera el error.

Ejemplo 3: Error en Llamada a Función (Tipo de Argumento Incorrecto)

Section titled “Ejemplo 3: Error en Llamada a Función (Tipo de Argumento Incorrecto)”

Este caso ilustra un error común de interfaz de función, donde una función es invocada con un argumento cuyo tipo no coincide con el tipo del parámetro esperado en la definición de la función.

Código LibreScript:

funcion saludar($nombre: texto) {
imprimir("Hola, ", $nombre);
}
saludar(123); // Intentando pasar un número donde se espera texto

Mensaje de Error Generado por el Compilador:

Terminal window
Error Semántico: El argumento 1 de 'saludar' debe ser 'texto', pero se recibió 'numero'.

Explicación: La función saludar ha sido definida para aceptar un único argumento de tipo texto. Al llamarla con el literal 123, que es de tipo numero, el analizador semántico detecta la disparidad de tipos entre el argumento proporcionado y el parámetro esperado, emitiendo el error correspondiente.


Ejemplo 4:Error en Retorno de Función (Tipo de Retorno Incompatible)

Section titled “Ejemplo 4:Error en Retorno de Función (Tipo de Retorno Incompatible)”

Este error ocurre cuando una función, que ha sido declarada para devolver un tipo específico, intenta devolver un valor de un tipo diferente.

Código LibreScript:

funcion getNumero(): numero {
devolver "hola"; // La función promete devolver un 'numero', pero devuelve un 'texto'
}

Mensaje de Error Generado por el Compilador:

Terminal window
Error Semántico: La función 'getNumero' debe devolver 'numero', pero se devuelve 'texto'.

Explicación: La firma de la función getNumero especifica claramente que su valor de retorno será de tipo numero. Sin embargo, la sentencia devolver dentro de su cuerpo intenta retornar un texto ("hola"). El analizador semántico detecta esta inconsistencia entre el tipo de retorno declarado y el tipo de valor efectivamente devuelto.

Ejemplo 5: Condición No Booleana en Estructura Condicional

Section titled “Ejemplo 5: Condición No Booleana en Estructura Condicional”

Las estructuras de control que dependen de una condición (como si o mientras) exigen que la expresión de la condición sea de tipo booleano. Usar una expresión de otro tipo genera un error semántico.

Código LibreScript:

$valor: numero = 1;
si ($valor) { // La sentencia 'si' espera una condición booleana
imprimir("Esto no debería ejecutarse con un número.");
}

Mensaje de Error Generado por el Compilador:

Terminal window
Error Semántico: La condición de la sentencia 'si' debe ser de tipo 'booleano'.

Explicación: La construcción si en LibreScript requiere una expresión que se evalúe a un booleano para determinar el flujo de control. En este caso, la variable $valor es de tipo numero. El analizador semántico identifica que un numero no es un tipo válido para una condición booleana y reporta el error. Un error similar ocurriría con un bucle mientras.

Estos casos de prueba y sus respectivos mensajes demuestran la robustez del analizador semántico de LibreScript para asegurar que el código no solo sea gramaticalmente correcto, sino que también respete las reglas de significado y tipo del lenguaje, contribuyendo a la creación de programas más fiables.