예제 #1
0
파일: clr.cpp 프로젝트: saitej3/samplecheck
void print(set_item R)
{
	cout<<"======================================================="<<endl;
	set_item::iterator it=R.begin();
	for(;it!=R.end();it++)
		cout<<it->lhs<<"->"<<it->rhs<<" "<<it->lhd<<endl;
	cout<<"======================================================="<<endl;
}
예제 #2
0
파일: clr.cpp 프로젝트: saitej3/samplecheck
set_item Closure(set_item I)
{
    cout<<"Finding Closure of "<<endl;
    print(I);
    set_item S;
    LR item;
    queue<LR>Q;
    set<char>F;
    set<char>::iterator it2;
    item_it itr=I.begin();
    for(;itr!=I.end();itr++)
    {
        S.insert(*itr);
        Q.push(*itr);
    }
    int a,i;
    string t;
    LR t3;
    int t2;
    while(!(Q.empty()))
    {
        item=Q.front();
        Q.pop();
        a=find_dot(item.rhs);
     //   cout<<"A  "<<a<<endl;
        if(a==item.rhs.length())
            continue;
        else if(Term.find(item.rhs[a])!=Term.end())
            continue;
        else{
            t=item.rhs.substr(a+1,item.rhs.length()-a-1);
            t+=item.lhd;
            cout<<"T string : "<<t<<endl;
            F=Find_first(t);
            t2=SYM[item.rhs[a]];
            it2=F.begin();
            for(i=0;i<V[t2].size();i++)
            {
                it2=F.begin();
                for(;it2!=F.end();it2++)
                {
                    make_LR(t3,item.rhs[a],"."+V[t2][i],*it2);
                    if(S.find(t3)==S.end())
                    {
                        S.insert(t3);
                        Q.push(t3);
                    }
                }
            }
        }
    }
    print(S);
   // cin>>i;
    return S;
}
예제 #3
0
set_item Goto(set_item I,char ch)
{
    int a;
    set_item S;
    item_it it=I.begin();
    LR t3;
    for(;it!=I.end();it++)
    {
        a=(*it).rhs.find('.')+1;
        if((*it).rhs[a]==ch){
        make_LR(t3,(*it).lhs,shift_Dot((*it).rhs),(*it).lhd);
        S.insert(t3);
        }
    }
  
    S=Closure(S);
    gto.insert(mp(mp(I,ch),S));
    return S;
}
예제 #4
0
파일: clr.cpp 프로젝트: saitej3/samplecheck
set_item Goto(set_item I,char ch)
{
    int a;
    set_item S;
    item_it it=I.begin();
    LR t3;
    for(;it!=I.end();it++)
    {
        a=find_dot((*it).rhs);
        if((*it).rhs[a]==ch){
        make_LR(t3,(*it).lhs,shift_Dot((*it).rhs),(*it).lhd);
        S.insert(t3);
        }
    }
    cout<<"GOTO OF "<<ch<<endl;
    print(S);
  //  cin>>a;
    S=Closure(S);
    gto.insert(mp(mp(I,ch),S));
    return S;
}
예제 #5
0
set_item <T> :: set_item(const set_item &s_t){
	size = s_t.get_num_items();
	delete[] items;
	items = new T[size];
}