Problema: dado un archivo de texto como entrada, la tarea es copiar el contenido del archivo dado a otro archivo.
Explicación:
Lex es un programa de computadora que genera analizadores léxicos y fue escrito por Mike Lesk y Eric Schmidt. Lex lee un flujo de entrada que especifica el analizador léxico y genera el código fuente que implementa el lexer en el lenguaje de programación C.
Enfoque:
como sabemos, yytext contiene el texto que coincide con el token actual. Agregue el valor de yytext a una string temporal. Si se encuentra un carácter de nueva línea (‘\n’), escriba el contenido de la string temporal en el archivo de destino.
Archivo de entrada: input.txt
GeeksForGeeks: A Computer Science portal for geeks.
A continuación se muestra la implementación del enfoque anterior:
C
/* LEX code to replace a word with another taking input from file */ /* Definition section */ /* character array line can be accessed inside rule section and main() */ %{ #include<stdio.h> #include<string.h> char line[100]; %} /* Rule Section */ /* Rule 1 writes the string stored in line character array to file output.txt */ /* Rule 2 copies the matched token i.e every character except newline character to line character array */ %% ['\n'] { fprintf(yyout,"%s\n",line);} (.*) { strcpy(line,yytext); line[0] = '\0'; } <<EOF>> { fprintf(yyout,"%s",line); return 0;} %% int yywrap() { return 1; } /* code section */ int main() { extern FILE *yyin, *yyout; /* open the source file in read mode */ yyin=fopen("input.txt","r"); /* open the output file in write mode */ yyout=fopen("output.txt","w"); yylex(); }
Producción:
Archivo de salida: salida.txt
GeeksForGeeks: A Computer Science portal for geeks.