You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lex程序无输出问题求助:执行后无结果,按Ctrl+C终止

问题排查与修复

你的Lex代码存在两个核心问题,导致程序无法正常终止并输出结果:

1. 未触发EOF信号,yylex()持续阻塞等待输入

默认情况下,yylex()会从标准输入读取内容,直到遇到**EOF(文件结束符)**才会返回。手动输入多行后未触发EOF,程序会一直处于等待输入状态,只能通过Ctrl+C强制终止。

终端中触发EOF的方式:

  • Linux/macOS:按下Ctrl+D
  • Windows:按下Ctrl+Z后回车

2. 匹配规则覆盖范围有限

你的规则[/][/][a-zA-Z0-9]*仅能匹配//后紧跟字母数字的注释,一旦注释包含空格、下划线或其他符号,就无法被统计。若要匹配任意内容的单行注释,需修改规则为:

"//".* {count++;}

其中".*"表示匹配//之后的任意字符(直到行尾),可覆盖所有单行注释场景。

修复后的完整代码

%{
    int count=0;
%}
%%
"//".* {count++;}
.|\n   {/* 忽略其他所有字符和换行 */}
%%
int yywrap()
{
    return 1;
}
int main()
{
    yylex();
    printf("lines: %d\n", count);
    return 0;
}

编译运行步骤

  1. 将代码保存为count_comments.l
  2. Lex编译:lex count_comments.l
  3. 编译生成可执行文件:cc lex.yy.c -o count_comments
  4. 运行程序,输入内容后触发EOF即可查看统计结果

内容的提问来源于stack exchange,提问作者Bhumika Ailawadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:45:29