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