2010-10-21 238 views
2

我正在使用yacc和lex來解析C語言, 我已經使用C++構建了數據結構。 一切工作正常,但我無法使用main.cpp中的yyin讀取輸入文件。使用yyin與yacc文件的問題

以下是代碼: 請幫忙!

#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

你看到什麼錯誤? – Rudi 2010-10-25 08:35:12

回答

3

首先,我不明白

extern "C" FILE *yyin; 

時,你可以簡單地寫

extern FILE *yyin; 

反正你爲什麼要打開輸入文件用於更新(mode參數 '+')如果你沒有對文件做任何修改,那麼它是不需要的。只需「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)); 

是無用的,如果你寫的遞歸你的語法。只有當您的語法一次只能解析一條語句時才需要此語句。