//源程序的输入及预处理
#include <fstream.h>
#include <iostream.h>
void pro_process(char *);
void main( ) //测试驱动程序
{
//定义扫描缓冲区
char buf[4048]={'/0'}; //缓冲区清0
//调用预处理程序
pro_process(buf);
//在屏幕上显示扫描缓冲区的内容
cout<<buf<<endl;
}
void pro_process(char *buf) //预处理程序
{
ifstream cinf("source.txt",ios::in);
int i=0; //计数器
char old_c='/0',cur_c; //前一个字符,当前字符。
bool in_comment=false; //false表示当前字符未处于注释中。
while(cinf.read(&cur_c,sizeof(char))){ //从文件读一个字符
switch(in_comment){
case false:
if(old_c=='/' && cur_c=='*'){ //进入注释
i--; //去除已存入扫描缓冲区的字符'/'
in_comment=true;
}
else {
if(old_c=='//' && cur_c=='/n') //发现续行
i--; //去除已存入扫描缓冲区的字符'/'
else {
if(cur_c>='A' && cur_c<='Z')//大写变小写
cur_c+=32;
if(cur_c =='/t' || cur_c =='/n') //空格取代TAB换行
cur_c=' ';
buf[i++]=cur_c ;
}
}
break;
case true:
if(old_c=='*' && cur_c=='/') //离开注释
in_comment=false;
}//end of switch
old_c= cur_c; //保留前一个字符
}//end of while
buf[i++]='#'; //在源程序尾部添加字符'#'
}
//source.txt
Begin/*S=2*3.14*R*R+2*3.14*R*H*/
Real r,h,s;
s=2*3./
14*r*(r+h)
End