给定一个文本文件作为输入,任务是用文件中的另一个单词替换给定的单词。
Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。
Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。
先决条件: Flex(快速词法分析器生成器)
方法:
众所周知, yytext拥有当前匹配令牌的值,我们可以将其与要替换的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
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。