使用yyin和yacc文件的问题

时间:2010-10-21 18:22:09

标签: yacc

我正在使用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;

}

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));
如果你递归地写了你的语法,那么

就没用了。只有当您的语法一次只能解析一个语句时才需要此语句。