You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将flex的输入源从标准输入stdin改为读取指定文件?

flex内置输入源切换方法

flex本身原生支持自定义输入源,不需要通过dup重定向stdin实现,操作方式如下:

  • flex生成的词法分析器默认提供全局FILE*类型变量yyin,默认值指向标准输入stdin,你可以直接修改该变量切换输入源
  • 调用yylex()启动词法分析前,用fopen打开目标文件,将返回的文件指针赋值给yyin即可,后续词法分析会自动从指定文件读取内容
  • 解析完成后记得主动调用fclose关闭文件指针,避免资源泄漏

代码示例

// 引入flex生成的头文件后可以直接使用yyin,不需要额外手动声明也可
extern FILE* yyin;

int main() {
    // 打开目标输入文件
    yyin = fopen("your_input_file.txt", "r");
    if (yyin == NULL) {
        perror("打开输入文件失败");
        return 1;
    }
    // 启动词法分析
    yylex();
    // 关闭文件
    fclose(yyin);
    return 0;
}
额外场景适配
  • 如果需要在词法分析过程中动态切换输入文件,可以调用yyrestart()方法,传入新的文件指针即可重置输入源,用法为yyrestart(new_file_ptr)
  • 如果你开启了可重入编译选项(即flex代码中加了%option reentrant配置),yyin不再是全局变量,需要通过词法分析上下文对象操作,切换输入的对应方法为yyset_in(new_file_ptr, scanner)

内容的提问来源于stack exchange,提问作者Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:24:03