📄 leftrec.cpp
字号:
//IIT2006021
//Arunanshu Pandey
//try this input Y->Yz|Yy|Yx|Yw|a|b|c|d for left recursion
// id->idz|idy|idx|idw|a|b|c|d
// else try this Y->a|b|c|d
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
string s;
getline(cin,s);
vector<string> str;
int i = 0;
while(s[i] !='>') i++;
i++;
string var="";
while(i < s.length())
{
if(s[i] == '|')
{
i++;
str.push_back(var);
var = "";
}
else
{
var += s[i];
i++;
}
}
if( var != "") str.push_back(var);
string head = "";
i = 0;
while( s[i]!='-')
{
head += s[i];
i++;
}
bool flag = false;
vector<string> ter;
vector<string> nonter;
for(int i = 0; i < str.size(); i++)
{
int index = str[i].find(head);
if(index == 0)
{
int len = head.length();
string topush = "";
for(int j = len; j < str[i].length(); j++) topush += str[i][j];
nonter.push_back(topush);
}
else ter.push_back(str[i]);
}
if( nonter.size() == 0 ) cout<<"No left recursion"<<endl;
else
{
cout<<"Remove left recursion"<<endl;
cout<<endl;
cout<<head<<"->";
for(int i = 0; i < ter.size(); i++)
{
if( i != ter.size() - 1)
{
cout<<ter[i]<<"#|";
}
else
{
cout<<ter[i]<<"#"<<endl;
}
}
cout<<"#->";
for(int i = 0; i < nonter.size(); i++)
{
cout<<nonter[i]<<"#|";
}
cout<<"E"<<endl;
cout<<endl;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -