为什么Flex程序永远等待而不打印任何东西?

时间:2014-10-26 03:53:53

标签: c flex-lexer lex lexical-analysis

我正在翻译缩写词。也就是说,如果它发现'OMS'打印'OrganizaciónMundialdel 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;
}

1 个答案:

答案 0 :(得分:1)

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

这些行声明并初始化两个名为yyinyyout本地变量。它们在函数结束时关闭,但在其他方面保持未使用状态(也就是说,没有人对它们进行任何输入/输出)。它们不适用于该计划的其余部分。同时,与这些局部变量完全分开的全局变量yyinyyout保持不变。

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

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

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