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

📄 jiandan.cpp

📁 我前一段时间,做的一个编译原理实验的作业 请大家为我多提意见
💻 CPP
字号:
#include"iostream.h"
#include"iomanip.h"
#include"stdlib.h"
#include"stdio.h"
#include"fun.h"
char M[9][9]={ '#','S','b','A','(','B','a',')','$',
               'S','#','#','#','#','#','#','#','>',
               'b','#','#','=','<','#','<','#','>',
               'A','#','=','#','#','#','=','#','>',
               '(','#','#','<','<','=','<','#','>',
               'B','#','>','#','#','#','>','#','>',
               'a','#','>','#','#','#','>','#','>',
               ')','#','>','#','#','#','>','=','>',
               '$','<','<','<','<','<','<','<','='};


void main()
{
	 char x,y,Buf[64],b;
	 int i=0;
	 wordlist *in,*stack;
	 in=(wordlist *)malloc(sizeof(wordlist));
	 stack=(wordlist *)malloc(sizeof(wordlist));
	 in->next=NULL;
	 stack->next=NULL;
     setcolor(20,10);
	 cout<<"-------------------------------------------------"<<endl;
	 cout<<"-----------------语法分析(M)-------------------"<<endl;
	 cout<<"                                                 2004级计算机一班"<<endl;
	 cout<<"                                                 姓名:常振华 学号:20041783"<<endl;
	 listM(M);
     creatword(in);
	 creatstack(stack);
	 cout<<"单词序列为:"<<endl;
	 listword(in);
     cout<<"栈中的信息为:"<<endl;
	// cout<<"stack->head: "<<stack->name<<endl;
     listword(stack);
     cout<<"Gethead(in)->name: "<<Gethead(in)->name<<endl;
     cout<<"Getend(in)->name: "<<Getend(in)->name<<endl;
     cout<<"Gethead(in)->name: "<<Gethead(stack)->name<<endl;
     cout<<"Getend(in)->name: "<<Getend(stack)->name<<endl;
	 cout<<"--------------分析如下所示----------------"<<endl;	 
	 while(stack->next->name!='S'||Gethead(in)->name!='$')
	 {		  
	      x=Getend(stack)->name;
		  y=Gethead(in)->name;
		  cout<<"x: "<<x<<"y: "<<y<<endl;
		  cout<<"Search(M,x,y):"<<Search(M,x,y)<<endl;
		  if(Search(M,x,y)=='<'||Search(M,x,y)=='=')
		  {
			  listword(stack);listword(in);
			  Buf[i]=Gethead(in)->name;Buf[i+1]='\0';
			  cout<<"Buf: "<<Buf<<endl;
			  Instack(stack,Gethead(in)->name);
              Outhead(in);
		  }
		  else if(Search(M,x,y)=='>')
		  {
			  listword(stack);listword(in);
			  cout<<"这里是>"<<endl;
			  Outhead(in);
			  //////////////////////
			  //处理栈
			  Buf[i]='$';
			  b=ChangeStack(stack,Buf);
			  for(int j=0;j<i;j++)
                   Outhead(stack);
			  cout<<"b: "<<b<<endl;
              Instack(stack,b);
			  Buf[0]='\0';
			  i=-1;
		  }
		  else if(Search(M,x,y)=='#')
		  {
			  setcolor(6,12);
			  cout<<"出错了!"<<endl;
			  setcolor(20,10);
			  Outhead(in);
		  }
		  else
		  {cout<<"Nothing !"<<endl;}
		  if(stack->next->name=='S'&&Gethead(in)->name=='$')
			  cout<<"正常退出!"<<endl;
           i++;
		 cout<<"--------------------------"<<endl;
	 }
	 setcolor(6,12);
	 cout<<"分析结束!!!"<<endl;
}    

⌨️ 快捷键说明

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