📌  相关文章
📜  用文件中的另一个词替换一个词的 Lex 代码

📅  最后修改于: 2021-10-22 02:44:16             🧑  作者: Mango

给定一个文本文件作为输入,任务是用文件中的另一个词替换给定的词。

Lex 是一个生成词法分析器的计算机程序,由 Mike Lesk 和 Eric Schmidt 编写。
Lex 读取指定词法分析器的输入流,并输出在 C 编程语言中实现词法分析器的源代码。

先决条件: Flex(快速词法分析器生成器)

方法:
我们知道, yytext保存着当前匹配的token 的值,我们可以将它与word 进行比较来替换。如果 yytext和要替换的单词的值相同,则将单词替换为另一个单词并将其写入输出文件,否则只需将输入文件的内容复制到输出文件。

输入文件: input.txt

下面是上述方法的实现:

/* 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
#include
  
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.txt