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

📄 leftrec.cpp

📁 lex files for given decription used as assignment in compiler design
💻 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 + -