匹配EOF但是在flex中无限循环

ben*_*gxy 3 regex lex match eof flex-lexer

我需要在flex中匹配EOF

这是我的代码lex.l的主要错误部分

%{
%}
%%
<<EOF>> {printf("match EOF\n");}
%%
int main(){
    yylex();
}
Run Code Online (Sandbox Code Playgroud)

我用

flex lex.l  ;  gcc lex.yy.c -o lex.exe -lfl ; lex.exe < text 
Run Code Online (Sandbox Code Playgroud)

执行

这是我的文本文件只有一行

abc(no \n or \r at the end of file)
Run Code Online (Sandbox Code Playgroud)

但是当我执行lex.exe时,它进入无限循环并输出无限行"匹配EOF \n"

如何解决问题?

ric*_*ici 8

你需要从EOF行动中归还一些东西; 否则,flex将继续尝试读取输入,并且每次它都会发现它处于EOF,导致它再次执行您的操作.

事实上,如果你正在使用,你应该总是0从一个<<EOF>>模式返回yacc/bison,因为这就是你向解析器发出信号的信号,它已经到达输入的末尾.但是,在大多数情况下,实际上并不需要显式执行任何操作,因为这return 0是默认EOF操作.

  • 或者`yyterminate()` (2认同)