Errores detectados
Errores en Fase Léxica
Section titled “Errores en Fase Léxica”Los errores léxicos ocurren cuando el analizador léxico (lexer) encuentra caracteres o secuencias de caracteres que no corresponden a ningún token válido definido en el lenguaje. Estos son los errores más tempranos detectados.
Causas Comunes:
- Caracteres inválidos: Símbolos que no forman parte del alfabeto permitido del lenguaje.
- Literales mal formados: Cadenas de texto sin cerrar, números con formato incorrecto, o comentarios de bloque no terminados.
Formato del Reporte de Error Léxico:
El compilador reportará el tipo de error (usualmente Error léxico
), la línea y columna exactas donde se detectó el problema, y una descripción del carácter o la secuencia inesperada.
Carácter Inválido
Section titled “Carácter Inválido”Intentar usar un símbolo no reconocido por el lexer.
Código LibreScript con error:
$a: numero = 10;$b: texto = "hola"; // Esto es un comentario$c: numero = $a @ 5; // El '@' no es un operador válido
Salida de Error (Ejemplo Esperado):
{ type: 'OP_ASIGNACION', value: '=', text: '=', line: 3, col: 16 },{ type: 'IDENTIFICADOR_VAR', value: '$a', text: '$a', line: 3, col: 18},{ type: 'error', value: '@ 5;', text: '@ 5;', line: 3, col: 21 }
Cadena de Texto sin Terminar
Section titled “Cadena de Texto sin Terminar”Olvidar cerrar una cadena con comillas.
Código LibreScript con error:
imprimir("Este es un mensaje sin cerrar;
Salida de Error (Ejemplo Esperado):
{ type: 'error', value: '"Este es un mensaje sin cerrar;', text: '"Este es un mensaje sin cerrar;', line: 1, col: 10 }
Errores en Fase Sintáctica
Section titled “Errores en Fase Sintáctica”Los errores sintácticos (también conocidos como errores de parseo) ocurren cuando el flujo de tokens es léxicamente válido, pero la secuencia de estos tokens no se ajusta a las reglas gramaticales del lenguaje. El analizador sintáctico (parser) es el encargado de detectar estas inconsistencias.
Causas Comunes
Section titled “Causas Comunes”- Sentencias incompletas: Falta de un punto y coma al final de una sentencia, o expresiones a medio construir.
- Paréntesis o llaves no balanceados: Falta un
)
para cada(
o un}
para cada{
. - Uso incorrecto de palabras clave o operadores: Por ejemplo, usar
si
sin una condición entre paréntesis, o un operador binario sin un operando a la derecha. - Estructuras de control mal formadas: Un
segun
sincaso
, o unpara
con los separadores incorrectos.
Formato del Reporte de Error Sintáctico
Section titled “Formato del Reporte de Error Sintáctico”El compilador, a través de Nearley, reportará un Error de parseo
indicando la línea y columna del token inesperado, el token que se encontró (Unexpected TOKEN token
), y una lista de los tokens que se esperaban en su lugar (Instead, I was expecting to see one of the following:
).
Ejemplos:
-
Punto y Coma Faltante: Una de las causas más comunes de errores sintácticos.
Código LibreScript con error:
$valor: numero = 10;imprimir($valor);Salida de Error (Ejemplo Esperado):
Terminal window Error de parseo: Syntax error at line 1 col 20:1 $valor: numero = 10^2 imprimir($valor);Unexpected nl token: "\n". Instead, I was expecting to see one of the following:A PUNTO_Y_COMA token based on:DeclaracionVariable → %IDENTIFICADOR_VAR _ %DOS_PUNTOS _ Tipo _ %OP_ASIGNACION _ Expresion _ ● %PUNTO_Y_COMASentencia → ● DeclaracionVariableSentencias → ● Sentencia _nlPrograma → _nl ● Sentencias _nlError cerca de la línea 1, columna 20 (offset 19). Token: '' (tipo: nl)No se pudo generar el AST debido a errores de parseo. -
Condicional
si
mal Formado (sin condición):Código LibreScript con error:
si {imprimir("Esto no es válido");}Salida de Error (Ejemplo Esperado):
Terminal window Error de parseo: Syntax error at line 1 col 4:1 si {^2 imprimir("Esto no es válido");3 }Unexpected LBRACE token: "{". Instead, I was expecting to see one of the following:A LPAREN token based on:CondicionalSi → %PR_SI _ ● %LPAREN _ Expresion _ %RPAREN _ BloqueCodigo _ CondicionalSi$ebnf$1 _ CondicionalSi$ebnf$2EstructuraControl → ● CondicionalSiSentencia → ● EstructuraControlSentencias → ● Sentencia _nlPrograma → _nl ● Sentencias _nlError cerca de la línea 1, columna 4 (offset 3). Token: '{' (tipo: LBRACE)No se pudo generar el AST debido a errores de parseo.