假设我有一个名为 1.lex 的文件。提供了一个输入文件 1.c。这个的输出是下一个输入。我希望这一次发生,因为当生成第一个输出时,内存缓冲区包含第二个输入文件所需的一些信息。
下面是针对上述情况的文件处理代码。
char * basename(char *name)
{
char *temp;
int i=0, j=0, len;
temp = (char *)malloc(strlen(name));
len = strlen(name);
len--;
while(1)
{
if(name[len] != '.')
len--;
else
{
for( i = 0; i < len; i++)
temp[j++] = name[i];
break;
}
}
temp[j] = '\0';
return temp;
}
int main(int argc, char** argv)
{
if(argc != 2)
{
fprintf(stderr,"Usage: filename\n");
exit(1);
}
yyin = fopen(argv[1],"r");
if(yyin == NULL)
{
fprintf(stderr,"cannot open file: %s",argv[1]);
exit(0);
}
file = basename(argv[1]);
realloc(file, strlen(file)+10);
strcat(file,".met");
yyout = fopen(file,"w");
yyparse();
return 0;
}
int yywrap()
{
fclose(yyin);
yyin = fopen(file,"r");
if(yyin == NULL)
{
fprintf(stderr,"cannot open file: %s",file);
exit(0);
}
file = basename(file);
realloc(file, strlen(file)+10);
strcat(file,".meta");
yyout = fopen(file,"w");
yyparse();
return 1;
}
如果我在 yywrap() 函数中注释 yyparse() ,则没有分段错误,但“.meta”文件中没有写入任何内容,但第一个 o/p 文件“.met”被写入。如果我取消注释,则会出现分段错误,并且“.met”文件中没有写入任何内容。
函数“basename”是获取输入的基本名称。
函数 main() 打开第一个文件并调用 yyparse()。
当 yyparse() 处理完第一个文件后,它调用 yywrap(),打开下一个文件。
请参阅上面 yyparse() 行中的注释。
如果有其他方法可以解决我的问题,请告诉我。
谢谢。