【发布时间】:2014-10-26 03:53:52
【问题描述】:
我正在翻译首字母缩略词。也就是说,如果它找到“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");你声明并初始化了一个局部未使用的变量,而全局yyin保持不变。 -
@n.m.:您的诊断基本上是正确的——我建议将其添加为答案,这样问题就可以结束了。严格来说,
main()中的局部变量yyin被 用于相应的fclose()中(尽管它是一个空洞的用法),但你绝对正确的是词法分析器将是使用全局变量yyin(由本地定义隐藏在main()中)。 Alfito:如果你使用 GCC,你可以使用-Wshadow来获得关于这个问题的警告。
标签: c flex-lexer lex lexical-analysis