我正在使用c ++编写一个简单的编译器,但是输出仅在控制台窗口中显示!
class Scanner{
private:
ifstream f;
Token check_reserved(string s){
if (s == "program") return PROGRAM_SY;
else if (s == "is")return IS_SY;
else if (s == "begin")return BEGIN_SY;
else if (s == "end")return END_SY;
else if (s == "var")return VAR_SY;
}
void display_tokens(void){
Token t;
if (f.eof())cout << "end_of_file " << endl;
while (!f.eof()){
t = get_token();
switch (t){
case PROGRAM_SY: cout << "program token" << endl; break;
case IS_SY: cout << "is token" << endl; break;
case BEGIN_SY: cout << "begin token" << endl; break;
case END_SY: cout << "end token" << endl; break;
}
}
}
};
int main(){
ofstream myfile;
myfile.open("example.txt");
myfile << SC.display_tokens();
myfile.close();
string Filename;
cout << "Enter Name of input File : ";
cin >> Filename;
Scanner SC(Filename);
SC.display_tokens();
SC.~Scanner();
}
我希望我的代码可以在控制台窗口中打印输出,并将其保存在文本文件中。 这是什么问题,什么是获取我的输出的正确代码?
答案 0 :(得分:0)
一个问题是函数需要返回值,以便您将值输出到流。
您的函数声明说该函数没有返回值:
void display_tokens(void)
但是,您可以像使用函数一样返回值:
myfile << SC.display_tokens();
我建议您在“编译器理论”书中复习“功能”的主题。另外,请阅读您最喜欢的C ++书籍中的“函数”。
您可以更改功能:
void display_tokens(std::ostream& my_file)
{
//...
my_file << "Here are the tokens:\n";
//...
}