如何在运行此代码时获取输出?此代码仅接受输入时未显示o / p的输入?

时间:2012-10-16 18:14:29

标签: lex flex-lexer

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

1 个答案:

答案 0 :(得分:0)

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

您的程序完全符合预期:它会在文件结束前消耗输入,然后yylex()返回并打印最终摘要。

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

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