Código Lex para reemplazar una palabra con otra palabra en un archivo

Dado un archivo de texto como entrada, la tarea es reemplazar una palabra dada con otra palabra en el archivo.

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.

Requisito previo: Flex (generador de analizador léxico rápido)

Enfoque:
como sabemos, yytext tiene el valor del token coincidente actual, podemos compararlo con la palabra para reemplazar. si el valor de yytext y la palabra a reemplazar son iguales, reemplace la palabra con otra palabra y escríbala en el archivo de salida; de lo contrario, simplemente copie el contenido del archivo de entrada en el archivo de salida.

Archivo de entrada: input.txt

A continuación se muestra la implementación del enfoque anterior:

/* LEX code to replace a word with another
   taking input from file */
  
/* Definition section */
/* variable replace_with and replace can be 
   accessed inside rule section and main() */
  
%{
#include<stdio.h>
#include<string.h>
  
char replace_with [] = "Best";
char replace [] ="A";
  
  
%}
  
/* Rule Section */
/* Rule 1 compares the matched token with the
   word to replace and replaces with another word
   on successful match else simply writes the
   content of input file to output file */
/* Rule 2 matches everything other than string
   like whitespace, digits, special symbols etc 
   and writes it to output file */
  
%%
[a-zA-Z]+    { if(strcmp(yytext, replace)==0)
                   fprintf(yyout, "%s", replace_with);
                else
                    fprintf(yyout, "%s", yytext);}
.            fprintf(yyout, "%s", yytext);
%%
  
  
int yywrap()
{
    return 1;
}
  
/* code section */
int main()
{
        extern FILE *yyin, *yyout;
          
        /* open the input 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

Publicación traducida automáticamente

Artículo escrito por ihritik 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 *