Programa Lex para copiar el contenido de un archivo a otro archivo

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.

Publicación traducida automáticamente

Artículo escrito por AR_Gaurav y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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