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

时间:2014-05-09 02:40:42

标签: regex match lex flex-lexer eof

我需要在flex中匹配EOF

这是我的代码lex.l

的主要错误部分
%{
%}
%%
<<EOF>> {printf("match EOF\n");}
%%
int main(){
    yylex();
}

我用

flex lex.l  ;  gcc lex.yy.c -o lex.exe -lfl ; lex.exe < text 

执行

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

abc(no \n or \r at the end of file)

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

如何解决问题?

1 个答案:

答案 0 :(得分:8)

您需要从EOF操作返回一些内容;否则,flex将继续尝试读取输入,每次输入时都会发现它位于EOF,导致它再次执行您的操作。

事实上,如果您正在使用0,则应始终从<<EOF>>模式返回yacc/bison,因为这是您向解析器发出信号的信号输入结束。但是,在大多数情况下,实际上并不需要明确执行任何操作,因为return 0是默认的EOF操作。