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

📄 test.txt

📁 C编译器
💻 TXT
字号:
#include "parse.h"

//extern vector<string> strVec;
//extern	vector<string> terminals;
//extern	vector<string> nonterminals;

//void readGrammar()
int main()
{
	//string str = "";

   vector<string> strVec;
   vector<string> terminals;
   vector<string> nonterminals;


	ifstream grammarfile;string name = "grammar.txt";
	grammarfile.open( name.c_str() );

 	if(!grammarfile)cout<<"Cannot open the grammar file!";
	
	else
	{
		//int i,j;
		string str,prestr;
		//while(grammarfile >> str){cout<<str;grammarfile.seekg(-1,ios_base::end);}
		while(grammarfile >> str) 
		{
			//for(i=0;i<strVec.size() && str != strVec[i];i++);
			//if(i == strVec.size() && str != "|" && str != "→")strVec.push_back(str);
			if( str != "|" && str != "→" && !hasexisted(strVec,str) )strVec.push_back(str);

			else if( str == "→" )
			{
				nonterminals.push_back(prestr);
				continue;
			}		
			prestr=str;
		}	
		for(int i = 0;i < strVec.size();i++)
		{
			//for(j=0;j < nonterminals.size() && nonterminals[j] != strVec[i];j++);
			//if( j == nonterminals.size() )terminals.push_back( strVec[i] );
			if( !hasexisted( nonterminals,strVec[i]) && !hasexisted(terminals,strVec[i] ) )terminals.push_back( strVec[i] );
		}
		/*
		while( grammarfile >> str )
		{
		
			if( str == "→"  && !hasexisted(nonterminals,prestr) )
				nonterminals.push_back( prestr );
			prestr = str;
		}

		//grammarfile.seekg( 0,ios_base::beg );
		grammarfile.close();
		grammarfile.open( name.c_str() );

 	if(!grammarfile)cout<<"2Cannot open the grammar file!\n";
		cout << grammarfile.tellg();
		//char c;grammarfile.get(c);
		//cout<<c;

		while( grammarfile >> str  )
		{
			cout<< str;
			if( str != "→" && str != "|" && !hasexisted(terminals,str) && !hasexisted(nonterminals,str) )
				terminals.push_back( str );
		}

	}*/
	cout<<"The terminals has:\n";
	for(int i=0;i<terminals.size();i++)
		cout<<terminals[i]<<"\n";

	cout<<"\n\nThe nonterminals has:\n";
	for(int i=0;i<nonterminals.size();i++)
		cout<<nonterminals[i]<<"\n";
	return 0;
}
bool hasexisted( vector< string >vec ,string str)
{
	int i ;
	for(i= 0;i < vec.size() && str != vec[ i ];i++);
	if( i == vec.size() )return false;
	else return true;
}


******************************************************************************************
/*
int main()
{
	vector<string> strVec;
	vector<string> terminals;
	vector<string> nonterminals;

	ifstream inf( "grammar.txt" );
	ofstream outf( "grammar_changed.txt" );

	if( !inf ) cout << "Cannot open the source grammar file!";
	else if( !outf ) cout << "Cannot open the aim grammar file";

	else
	{
		string prestr,str;
		changeGrammar(inf,outf);
		while(inf >> str) 
		{
			if( str != "|" && str != "→" && !hasexisted(strVec,str) )strVec.push_back(str);

			else if( str == "→" )
			{
				nonterminals.push_back(prestr);
				continue;
			}		
			prestr=str;
		}	
		for(int i = 0;i<strVec.size();i++)
			if( !hasexisted( nonterminals,strVec[i]) && !hasexisted(terminals,strVec[i] ) )terminals.push_back( strVec[i] );
	}
	cout<<"The terminals has:\n";
	for(int i=0;i<terminals.size();i++)
		cout<<terminals[i]<<"\n";

	cout<<"\n\nThe nonterminals has:\n";
	for(int i=0;i<nonterminals.size();i++)
		cout<<nonterminals[i]<<"\n";

	return 0;
}

bool hasexisted( vector< string >vec ,string str)
{
	int i ;
	for(i= 0;i < vec.size() && str != vec[ i ];i++);
	if( i == vec.size() )return false;
	else return true;
}

********************************************
另一种扫描:
else
	{
             string str,prestr;
             while( grammarfile >> str )
		{
		
			if( str == "→"  && !hasexisted(nonterminals,prestr) )
				nonterminals.push_back( prestr );
			prestr = str;
		}

		grammarfile.seekg( 0,ios_base::beg );

        while( grammarfile >> str  )
		{
			cout<< str;
			if( str != "→" && str != "|" && !hasexisted(terminals,str) && !hasexisted(nonterminals,str) )
				terminals.push_back( str );
		}

************************************************************************************************************************

ε




		switch(action)
		{
		case POP:
			string = productions[index][0] +  " → ";
			for(int n = 0;n < productions[index].)
			cout<<

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -