给定一个文本文件作为输入,任务是用文件中的另一个词替换给定的词。
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