0
//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);
}
4

1 回答 1

0

(f)lex 生成的 yylex 函数在遇到包含 return 语句的规则或调用 yyterminate() 之前不会返回。(默认的 EOF 规则调用 yyterminate。)

您的程序完全符合预期:它使用输入直到文件结束,然后 yylex() 返回并打印最终摘要。

顺便说一句,您没有正确计算单词分隔符。+从第二个模式中删除重复运算符,或将其操作更改为ch += yyleng;

如果您确实想在行尾发布报告,请\n从第二个模式中删除并添加一个\n规则,其操作是{ return; }

于 2012-10-16T22:53:01.163 回答