【问题标题】:match EOF but go to endless loop in flex匹配 EOF 但在 flex 中进入无限循环
【发布时间】:2014-06-26 16:08:36
【问题描述】:

我需要在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 时,它​​会进入 无限循环 并输出 “match EOF\n”的无限行

如何解决问题?

【问题讨论】:

    标签: regex match lex flex-lexer eof


    【解决方案1】:

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

    事实上,如果您正在使用yacc/bison,您应该始终从&lt;&lt;EOF&gt;&gt; 模式返回0,因为这就是您向解析器发出它已到达输入末尾的信号。但是,在大多数情况下,实际上不需要显式执行任何操作,因为 return 0 是默认的 EOF 操作。

    【讨论】:

    • yyterminate()
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多