我正在使用Yacc和lex来解析C语言, 我用c ++构建了数据结构。 一切正常,但我无法在main.cpp中使用yyin读取输入文件。
以下是代码: 请帮忙!
#include "parse_tree.h"
#include<iostream>
#include<cstdlib>
#include<stdio.h>
#include"y.tab.h"
extern "C" FILE *yyin;
FILE *fp;
using namespace std;
int main() {
system("clear");
yyin=fopen("input_file","r+");
if(yyin==NULL)
{
cout<<"\n Error ! \n";
}
do{
cout<<"am parsing !";
yyparse();
}while(!feof(yyin));
return 0;
fp=fopen("outfile","w");
yyparse();
}
int yywrap()
{
return 1;
}
答案 0 :(得分:3)
首先我不明白
extern "C" FILE *yyin;
什么时候可以写简单
extern FILE *yyin;
无论如何,如果您没有对文件进行任何更改,那么为什么要打开更新的输入文件(模式参数'+'),这是不必要的。只要“r”就足够了。与第二个陈述相同
fp=fopen("outfile","w");
如果不必要,请勿在写入模式下打开文件
另外你应该在你的代码中添加一个else语句..没有它你的错误检查变得无用......
yyin=fopen("input_file","r+");
if(yyin==NULL)
{
cout<<"\n Error ! \n";
}
else
{
cout<<"am parsing !";
yyparse();
}
你也从功能
返回return 0;
再次
}while(!feof(yyin));
如果你递归地写了你的语法,那么就没用了。只有当您的语法一次只能解析一个语句时才需要此语句。