将 yyin 与 yacc 文件一起使用时出现问题

发布于 2024-09-28 15:48:23 字数 594 浏览 1 评论 0原文

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

}

I am using Yacc and lex to parse a C type language ,
I have built the data structures using c++.
everything works fine but i am not able to read the input file using yyin in main.cpp.

the following is the code :
Please help !

#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;

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我不吻晚风 2024-10-05 15:48:23

首先,我不明白

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));

是无用的,如果您已经递归地写出了你的语法。仅当您的语法一次只能解析一个语句时才需要此语句。

Firstly I don't understand

extern "C" FILE *yyin;

when you can simply write

extern FILE *yyin;

anyway why are you opening the input file for updating (the mode parameter '+') if you are not making any changes to the file then its needless. Just "r" is sufficient. The same with the second statement

fp=fopen("outfile","w");

if needless don't open file in write mode

Also you should probably add an else statement to your code.. without it your error checking becomes useless...

yyin=fopen("input_file","r+");
if(yyin==NULL)
{
     cout<<"\n Error ! \n";
}
else 
{
    cout<<"am parsing !";
    yyparse();
}

Also you are returning from function

return 0;

Again

}while(!feof(yyin));

is useless if you have written your grammar recursively. This statement is only needed when your grammar can parse only one statement at a time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文