//program for displaying words and lines
%{
int w=0,ch=0;
%}
%%
[^ \t\n.:;,]+ {w++;ch+=yyleng;}
[ \t\n.:;,]+ {ch++;}
%%
main()
{
printf("Enter the data \n");
yylex();
printf("No of words: %d \nNo of characters: %d\n",w,ch);
}
答案 0 :(得分:0)
由(f)lex生成的yylex函数在遇到包含return语句的规则或调用yyterminate()之前不会返回。 (默认的EOF规则调用yyterminate。)
您的程序完全符合预期:它会在文件结束前消耗输入,然后yylex()返回并打印最终摘要。
顺便说一下,你没有正确计算单词分隔符。从第二个模式中删除+
重复运算符,或将其操作更改为ch += yyleng;
如果您确实想在一行末尾发布报告,请从第二种模式中删除\n
,然后添加一个\n
规则,其操作为{ return; }