⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实验一2].cpp

📁 这是几个编译原理实验程序,有做实验的朋友可以用用!
💻 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 + -