📄 实验一2].cpp
字号:
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
void main()
{
char answer,ask;
string filename;
const int M=50;
int row=0,vn=0,vt=0,i,j;
static char big[M],small[M];
char *bigC=new char[30];
char *smallC=new char[30];
char **file;
cout<<"请输入根目录下文法文件的名称!"<<endl0
<<"(格式:文件名.扩展名)"<<endl;
cin>>filename;
ifstream wen_fa_in;
ofstream wen_fa_out;
for (i=0;i<50000;i++)
{
wen_fa_in.open(filename.c_str());
wen_fa_out.open(filename.c_str(),ios::app);
if (wen_fa_in.fail() && wen_fa_out.fail())
{
cout<<"文件无法打开!"<<endl<<"是否决定继续调试?"<<endl
<<"(Y/y:继续,N/n:退出)"<<endl;
cin>>ask;
answer=toupper(ask);
if (answer=='Y')
{
cout<<"请重新输入!"<<endl;
cin>>filename;
wen_fa_in.open(filename.c_str());
wen_fa_out.open(filename.c_str(),ios::app);
if (!wen_fa_in.fail() && !wen_fa_out.fail())
break;
}
else
exit(true);
}
else
break;
}
wen_fa_in>>row;
file=new char*[row];
for (i=0;i<row;i++)
file[i]=new char[M];
for (i=0;i<row;i++)
{
wen_fa_in>>file[i];
if (wen_fa_in.eof())
break;
}
cout<<"文法已通过文件输入!"<<endl;
cout<<"文法的行数为"<<row<<"!"<<endl;
cout<<"文法如下:"<<endl;
for (i=0;i<row;i++)
cout<<" "<<file[i]<<endl;
cout<<endl;
wen_fa_in.close();
for(i=0;i<row;i++)
for(j=0;j<M;j++)
{
char test=file[i][j];
if( (test>='a' && test<='z') || (test>='0' && test<='9') || test=='+'
|| test=='-' || test=='*' || test=='/' || test=='(' || test==')')
{
bool flag=true;
for(int k=0;k<vt;k++)
if (test==smallC[k])
{
flag=false;
break;
}
if(flag==true)
smallC[vt++]=test;
}
if(test>='A' && test<='Z')
{
bool flag=true;
for(int k=0;k<vn;k++)
if (test==bigC[k])
{
flag=false;
break;
}
if(flag==true)
bigC[vn++]=test;
}
}
cout<<" "<<"统计结果如下:"<<endl;
cout<<" "<<"非终结符号"<<vn<<"个!"<<endl;
cout<<" "<<"终结符号"<<vt<<"个!"<<endl;
cout<<"统计结果同时也被保存在您的文法文件中!"<<endl;
wen_fa_out<<" "<<"统计结果如下:"<<endl;
wen_fa_out<<" "<<"非终结符号"<<vn<<"个!"<<endl;
wen_fa_out<<" "<<"终结符号"<<vt<<"个!"<<endl;
wen_fa_out.close();
delete []file;
delete []bigC;
delete []smallC;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -