实验1-源文件(g.cpp+test.cpp)

来源:互联网 发布:win32 编程 pdf 编辑:程序博客网 时间:2024/05/16 18:28
//实验一:设计文法的数据结构

//g.cpp,文件中设计了文法的数据结构

#include<string.h>
#include<iostream.h>

typedef struct Snode{
 char* s;
 struct Snode *nexts;
}Snode;

typedef struct Cnode{
 char c;
 struct Cnode *nextc;
 struct Snode *define;
}Cnode;

class G{
 public: 
  Cnode *vn,*vt,*s,*p;
  
  G(){
   vn=0;
   vt=0;
   s=0;
   p=0;
  }

  void insert_into_vn(char newc){
   Cnode *p;
   Cnode *lastvn;
   p=new Cnode;
   p->c=newc;
   p->nextc=0;
   p->define=0;
   if(!vn){
    vn=p;
    set_s(vn);
    set_p(vn);
   }else{
    lastvn=vn;
    while(lastvn->nextc)
     lastvn=lastvn->nextc;
    lastvn->nextc=p;
   }
  }

  void insert_into_vt(char newc){
            Cnode *p;
   Cnode *lastvt;
   p=new Cnode;
   p->c=newc;
   p->nextc=0;
   p->define=0;
   if(!vt)
    vt=p;
   else{
    lastvt=vt;
    while(lastvt->nextc)
     lastvt=lastvt->nextc;
    lastvt->nextc=p;
   }   
  }

  void insert_into_s(char leftvn,char* rights){
   Cnode* pc;
   Snode *ps,*lasts;
   ps=new Snode;
   ps->s=rights;
   ps->nexts=0;
   pc=find_char_inq(vn,leftvn);
   if(!pc){
    insert_into_vn(leftvn);
    pc=find_char_inq(vn,leftvn);
   }
   lasts=pc->define;
   if(!lasts)
    pc->define=ps;
   else{
    while(lasts->nexts) lasts=lasts->nexts;
    lasts->nexts=ps;
   }
  }

  void set_s(Cnode* nows){
   s=nows;
  }

  void set_p(Cnode* nowp){
   p=nowp;
  }
  
  Cnode* find_char_inq(Cnode* q,char c){
   Cnode* p=q;
   if(!p) return 0;
   while(p&&p->c!=c)
    p=p->nextc;
   if(!p) return 0; else return p;
  }

  void printG(){
   Cnode *pc;
   Snode *ps;
   pc=vn;
   while(pc){
    cout<<pc->c<<"->";
    ps=pc->define;
    while(ps){
     cout<<ps->s;
     ps=ps->nexts;
     if(ps) cout<<"|";
    }
    cout<<"/n";
    pc=pc->nextc;
   }

  }
};


//试验一测试文件

//test.cpp文件,测试上面定义的数据结构

#include<iostream.h>
#include"g.cpp"

void main(){
 G g;
 g.insert_into_vn('S');
 g.insert_into_vn('Q');
 g.insert_into_vn('R');
 g.insert_into_vt('a');
 g.insert_into_vt('b');
 g.insert_into_vt('c');
 g.insert_into_s('S',"Qc");
 g.insert_into_s('S',"c");
 g.insert_into_s('Q',"Rb");
 g.insert_into_s('Q',"b");
 g.insert_into_s('R',"Sa");
 g.insert_into_s('R',"a");
 g.printG();
}