我需要在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;
如何解决问题?
答案 0 :(得分:8)
您需要从EOF
操作返回一些内容;否则,flex
将继续尝试读取输入,每次输入时都会发现它位于EOF
,导致它再次执行您的操作。
事实上,如果您正在使用0
,则应始终从<<EOF>>
模式返回yacc/bison
,因为这是您向解析器发出信号的信号输入结束。但是,在大多数情况下,实际上并不需要明确执行任何操作,因为return 0
是默认的EOF
操作。