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"
如何解决问题?
你需要从EOF行动中归还一些东西; 否则,flex将继续尝试读取输入,并且每次它都会发现它处于EOF,导致它再次执行您的操作.
事实上,如果你正在使用,你应该总是0从一个<<EOF>>模式返回yacc/bison,因为这就是你向解析器发出信号的信号,它已经到达输入的末尾.但是,在大多数情况下,实际上并不需要显式执行任何操作,因为这return 0是默认EOF操作.