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

📄 实验三3.cpp

📁 这是几个编译原理实验程序,有做实验的朋友可以用用!
💻 CPP
字号:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#define count 20
struct Node
{char data;
 char *next;
 Node(char item,char *add_on=NULL)
 {data=item;next=add_on;}
};
//struct Node next1,next 2;
class List
{private:
      char   *head;
 public:
     List(){head=Null;}
     void Append(char item)
       {Node char*p;
        Node char*newnode=new Node(item);
        p=head;
        if(head==Null){head=newnode;}
        else
            {do
               {p=p->next;}while(p->next!=Null)
             p->next=newnode;
            }
        }
}
struct NFA
{char *name;
 int num;
 char mark1;
 List next1;
 char mark2;
 List next2;
}NFA[count];
struct DFA
{char name[6];
 char mark1;
 char next1[6];
 char mark2;
 char next2[6];
}DFA[count];
void Input(int i=0)
 {int k,a;
  char item;
  do
    {cin>>NFA[i].name>>NFA[i].num>>NFA[i].mark1>>NFA[i].next1.List();
     cout<<"在该输入状态下得到的下一个状态个数:";
     cin>>k;
     cout<<"依次输入下一状态(每次只能输入一个):";
     for(a=0;a<k;a++){cin>>item;NFA[i].next1.Append(char item);}
     cin>>NFA[i].mark2>>NFA[i].next.List();
     cout<<"在该输入状态下得到的下一个状态个数:";
     cin>>k;
     cout<<"依次输入下一状态(每次只能输入一个):";
     for(a=0;a<k;a++){cin>>item;NFA[i].next2.Append(char item);}
     i++;
    }while(i<count)
 }
void NFA_DFA(int a=0,int n=0)
  {int m,t;
   do{
      m=a;
      for(b=0;b<a;b++)
       if(strcmp(DFA[a].next1,DFA[b].name)!=0)
        for(t=0;t<strlen(DFA[a].next1);t++))
         for(i=1;i<count;i++;)
             if(strcmp(DFA[a].next1[t],NFA[i].name)==0) 
                {DFA[a++].name=DFA[a].next1;
                 DFA[a].mark1=NFA[0].mark1;
                 do{p=NFA[i].next1.head;
                    DFA[a].next1=string append(const char*p); 
                    p=p->next;
                   }while(p!=Null);
                 }
        
       for(b=0;b<a;b++)
        if(strcmp(DFA[a].next2,DFA[b].name)!=0)
         for(t=0;t<strlen(DFA[a].next2);t++))
          for(i=1;i<count;i++;)
             if(strcmp(DFA[a].next2[t],NFA[i].name)==0) 
                {DFA[a++].name=DFA[a].next2;
                 DFA[a].mark2=NFA[0].mark2;
                 do{p=NFA[i].next2.head;
                    DFA[a].next2=string append(const char*p); 
                    p=p->next;
                   }while(p!=Null) 
                 }
       do{NFA_DFA(n++);}while(n<a);    
      }while(a==m);           
	}
void main()
{char m[10];
 int count;
 //cout<<"输入映象数目:";
 //cin>>count;
 Input(0);
 for(i=0;i<count;i++)
   {cout<<NFA[i].name<<   NFA[i].num<<    NFA[i].mark1;
    p=NFA[i].next1.head;
    do{cout<<p->data<<"->";
        p=p->next;
       }while(p!=Null);
     cout<<NFA[i].mark2;
     q=NFA[i].next2.head;
     do{cout<<q->data<<"->";
        q=q->next;
       }while(q!=Null);
    cout<<endl;
   }
 DFA[0].name=NFA[0].name;DFA[0].mark1=NFA[0].mark1;
 do{p=NFA[0].next1.head;
    DFA[0].next1=string append(const char*p); 
    p=p->next;
   }while(p!=Null)
 DFA[0].mark2=NFA[0].mark1;
  do{q=NFA[a].next2.head;
    DFA[0].next1=string append(const char*q); 
    q=q->next;
   }while(q!=Null)
 void NFA_DFA(0);
 for(i=0;i<a;i++)
   {cout<<DFA[i].name<<   DFA[i].mark1<<   DFA[i].next1<<       DFA[i].mark2<<DFA[i].next................................................................................................................................................................................... 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -