c - 为什么 Flex 程序会永远等待并且不打印任何内容?

标签 c flex-lexer lex lexical-analysis

我正在翻译缩写词。也就是说,如果它找到“OMS”,则打印“Organización Mundial del trabajo”,但是一旦我编译并运行该程序,它就会无限运行。

我使用 Windows 作为开发环境。我看过例子,但我看不出错误在哪里。这是代码:

%option noyywrap    
%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
%}

%%
OMS {fprintf(yyout,"Organización Mundial del trabajo");}

%%

int main(int argc, char *argv[]) {
    FILE*yyin=fopen(argv[1],"r");
    FILE*yyout=fopen(argv[2],"w");
    yylex();
    fclose(yyin);
    fclose(yyout);
    return 0;
}

最佳答案

FILE*yyin=fopen(argv[1],"r");
FILE*yyout=fopen(argv[2],"w");

这些行声明并初始化两个名为 yyinyyout本地变量。它们在函数结束时被关闭,但在其他情况下保持未使用(即,没有人用它们进行任何输入/输出)。它们不可用于程序的其余部分。同时,与这些局部变量完全独立的全局变量 yyin 和 yyout 保持不变。

您需要做的只是从两行中删除FILE*:

yyin=fopen(argv[1],"r");
yyout=fopen(argv[2],"w");

现在,名称 yyinyyout 指的是程序其余部分已知的全局变量。

关于c - 为什么 Flex 程序会永远等待并且不打印任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569637/

相关文章:

arrays - 使用 printf 函数格式化间距 C

Nodejs中带有uint8_t变量的C结构

c++ - CMake 不调用 FLEX/BISON

c - 在 Mac 上安装 flex(词法分析器)

c - Bison 抛出语法错误,但我看不到我的错误

c - fgets - 数组大小和 int num 之间的差异

c - 确保施工安全

c - 如何在 Linux 上调试 LEX/FLEX 程序

Java : How to prevent unexpected token exception from terminating the runtime?

c - 执行 lex 的窗口无法识别 ./a.out