Skip to content
Related Articles

Related Articles

Improve Article

Lex code to replace a word with another word in a file

  • Last Updated : 30 Apr, 2019

Given a text file as input, the task is to replace a given word with another word in the file.

Lex is a computer program that generates lexical analyzers and was written by Mike Lesk and Eric Schmidt.
Lex reads an input stream specifying the lexical analyzer and outputs source code implementing the lexer in the C programming language.

Prerequisite: Flex (Fast lexical Analyzer Generator)

Approach:
As we know, yytext holds the value of current matched token, we can compare it with word to replace. if the value of yytext and word to replace are same, replace the word with another word and write it to the output file otherwise simply copy the content of input file to output file.

Input File: input.txt



Below is the implementation of above approach:




/* 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();
}

Output:

Output file: output.txt

Go Premium (An Ad Free Experience with many more features)




My Personal Notes arrow_drop_up
Recommended Articles
Page :