Insertar texto en el archivo de entrada en Lex (con C)
-
22-07-2019 - |
Pregunta
Estoy tratando de ayudar a un amigo en una tarea universitaria, pero me olvidé mucho de C y Lex.
La cuestión es que estamos tratando de analizar un archivo HTML y un archivo CSS correspondiente y agregar a una etiqueta su estilo.
Por ejemplo:
HTML
<body>
</body>
CSS
body{color:black;}
HTML modificado
<body style="color:black;">
</body>
Todas las expresiones regulares están hechas y las Macros también.
Problema: El HTML de entrada y el HTML modificado deben ser el mismo archivo. Intentamos redirigir yyin y yyout al mismo archivo ... y luego usar fputs (text, yyout); donde text es un char * con toda la información de estilo (y style = " "). No funciona.
Entonces ... ¿Pueden ayudarlo?
es importante no perder la noción de ubicación en el archivo (por lo que style = " " va a la etiqueta correcta).
Gracias
Solución
redirigir yyin y yyout al mismo archivo no funcionará ... (como ya sabes). Mi enfoque sería:
- Crear un archivo temporal
- yyout escribe en el archivo temporal
- cuando finaliza el análisis, haga una copia de seguridad del archivo de entrada por seguridad
- reemplazar el archivo de entrada con el archivo temporal
No hay otra manera, si yyout es igual que yyin, su texto (entrada original) se superpondrá.