^ D在yylex()函数中不起作用
我知道flex的基础
%{
#include<stdio.h>
int c=0;
int blank=0;
int line=0;
int word=0;
%}
%%
([a-zA-z])+(" "|\n) {word++; int i=0;
while(yytext[i]!='\0')
{
if(yytext[i]=' ') blank++;
else if(yytext[i]=='\n') line++;
}
}
" " {blank++; c++;}
\n {line++; c++;}
. {c++;}
%%
int main()
{
yylex();
printf("The no of characters is %d\n",c);
printf("The no of blanks is %d\n",blank);
printf("The no of lines is %d\n",line);
printf("The no of words is %d\n",word);
}
我尝试了很多,但没想到 。请帮助我坚持这一点。
答案 0 :(得分:1)
这整段代码绝对没有道理。您要查找一系列字母,后跟一个空格或换行符,然后执行while循环以查看i
中的第一个字符(您从未更改yytext
的值)何时等于恰好为空的字符串?
([a-zA-z])+(" "|\n) {word++; int i=0;
while(yytext[i]!="\0")
{
if(yytext[i]=" ") blank++;
else if(yytext[i]=="\n") line++;
}
}
如果要查找NUL终止字符,则需要将其指定为字符,而不要用双引号引起来。并且您还需要递增i
,以便遍历整个yytext
。按照目前的情况,您的while
循环将永远不会终止,这说明了^ D没有执行任何操作的原因。但是您不需要执行任何操作。
由于您所需要的只是计算有多少个单词,所以您要做的就是...
([a-zA-z])+ {word++;}
...因为其他规则将处理计数空格和换行符等...