Despertando a Lestat

bug-lestat-config1 He despertado a  Lestat para ampliar y mejorar sus funciones. Es una dura tarea retomar un programa que se ha dejado reposar demasiado tiempo. Con paciencia y perseverancia estoy intentando  volver a entenderlo como el día que lo  dejé aunque esto tiene su precio. Una de las facturas que me ha pasado Lestat por este abandono ha sido un bug que me ha costado un poco encontrarlo. Estoy falta de reflejos pero en mi favor tengo que decir que el bug tenía  un sentido del humor muy sutil. Aquí lo cuento para que juzgue el lector: Una de las funciones que le he añadido a Lestat es un fichero de configuración para darle más flexibilidad en la ejecución. Para ello he definido una gramática que permita describir la configuración y la he analizado con lex/bison.  Además de la  definición del léxico de la gramática puse una expresión regular para descartar caracteres en blanco, tabulaciones y saltos de línea de esta manera  [\ \t\n]* y un default para gestionar errores léxicos  que ejecutaba lo siguiente: fprintf(stderr,  "Error lexico en linea %d. Mira a ver si \'%s\' es el culpable.\n",  yylineno, yytext); fprintf(stderr,"Lestat le desea mejor suerte la proxima vez \n"); Al ejecutar el analizador del fichero de configuración obtenía un resultado incomprensible: ' es el culpable.inea 1. Mira a ver si ' Lestat le desea mejor suerte la próxima vez Primero sospeché que la función fprintf tenía un error en los parámetros y que el stack estaba corrupto. Lo miré con tanta fijeza como incredulidad.  Tras muchas trazas y muchas vueltas encontré la explicación: El fichero de configuración lo había escrito en Windows por lo que el  salto de línea era (\r\n) en vez de carácter  de salto  de línea (\n) que utiliza unix. El análisis léxico detectaba el carácter    como error léxico y se ejecutaba la sentencia: fprintf(stderr,  "Error lexico en linea %d. Mira a ver si \'%s\' es el culpable.\n",  yylineno, yytext); yytext contenía un que hacía que cuando se había escrito Error lexico en linea 1. Mira a ver si ' Se volviera al inicio de la línea para escribir lo restante: es el culpable.inea 1. Mira a ver si’ La solución al problema era tan sencilla como poner la expresión regular [\ \t\r\n]* para filtrar blancos, tabulaciones y salto de línea. Estas son las cosas que pasan en la programación y que nos hacen perder mucho tiempo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *