将 yyin 与 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;
}
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,我不明白
什么时候你可以简单地写
,为什么要打开输入文件进行更新(模式参数“+”),如果你没有对文件进行任何更改,那么它是不必要的。只需“r”就足够了。与第二条语句相同,
如果不必要,不要以写入模式打开文件
另外,您可能应该在代码中添加一条 else 语句..如果没有它,您的错误检查将变得毫无用处...
此外,您从函数返回
再次
是无用的,如果您已经递归地写出了你的语法。仅当您的语法一次只能解析一个语句时才需要此语句。
Firstly I don't understand
when you can simply write
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
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...
Also you are returning from function
Again
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.