📄 test.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 + -