我是lex的新手.Below是一个简单的lex程序,它计算给定输入C文件中的printf和scanf语句的数量,并用readf和writef替换它们,写入单独的文件。
%{
#include<stdio.h>
#include<stdlib.h>
int pc=0 ,sc=0;
%}
%%
"printf" {fprintf(yyout,"writef");pc++;}
"scanf" {fprintf(yyout,"readf");sc++;}
. {fprintf(yyout,"%c",yytext[0]);}
%%
main()
{
yyin=fopen("file5","r");
yyout=fopen("fileout5","w");
yylex();
printf("no.of printf statements=%d \n no.of scanf statements=%d \n",pc,sc);
fclose(yyin);
fclose(yyout);
}
file5:
#include<stdio.h>
int main()
{
int a=1,b=1;
printf("%d",a);
scanf("%d",&a);
//this is a comment
fprintf(stdout,"type it to console");
printf("hlh");
return (0);
}
fileout5:
#include<stdio.h>
int main()
{int a=1,b=1;
writef("%d",a);
readf("%d",&a);
//this is a comment
fwritef(stdout,"type it to console");
writef("hlh");
return (0);
}
我的问题是,当我删除第三个规则时,输出产生的是相同的。我想知道文件的剩余内容来自何处?据我说,当我删除第三个规则时,只有readf和writef应该存在在fileout5中。
答案 0 :(得分:0)
默认的lex行为是将输入复制到输出,这正是你的第三个语句所做的。如果你想吃输入,你就匹配&#34;。&#34;并且没有操作规则{}。