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; }
编译运行步骤
- 将代码保存为
count_comments.l - Lex编译:
lex count_comments.l - 编译生成可执行文件:
cc lex.yy.c -o count_comments - 运行程序,输入内容后触发EOF即可查看统计结果
内容的提问来源于stack exchange,提问作者Bhumika Ailawadi
相关产品推荐
相关产品推荐

