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

📄 beelzebublang.cpp

📁 魔王语言解释程序 请大家多多支持 数据结构实验
💻 CPP
字号:
// BeelzebubLang.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "BeelzebubLang.h"

int _tmain(int argc, _TCHAR* argv[])
{
 InitProg();
 string command;
 while((cout<<"请输入命令: ")&&(cin >> command)&&(command != "exit"))
	{
	string BeelzebubLang = "";//魔王语言串
	cout <<"请输入魔王语言串: ";
	cin >> BeelzebubLang;

	SqStack ChStack;
	SqQueue ChQueue;
    SqStack TransLang;
	InitStack(ChStack);
	InitQueue(ChQueue);
	InitStack(TransLang);
	//将魔王语言串按照自左向右顺序进栈
	for(int i = 0; i<BeelzebubLang.size(); i++)
        Push(ChStack,BeelzebubLang[i]);
    
	
	SElemType e,ReverseFirstElem; 
	//栈不空,解释魔王语言
	while(!StackEmpty(ChStack)){
		Pop(ChStack,e);
        switch( e )
        {
		   case 'B':{
			   //如果栈顶元素是非终结符B,则将产生式右边(:)字符串
			   //按照自左至右顺序进栈
			   for(int i = 2; i<geneformula1.size();i++){
			       char c = geneformula1[i];
			       Push(ChStack,geneformula1[i]);
			   }
			   break;
		   }//end case
		   case 'A':{
		       //如果栈顶元素是非终结符A,则将产生式右边(:)字符串
			   //按照自左至右顺序进栈
			   for(int i = 2; i<geneformula2.size();i++)
                   Push(ChStack,geneformula2[i]);
			   break;
		   }//end case 
		   case ')':{
		       //如果栈顶元素是终结符),则连续出栈,将每个出栈的元素进队		
			   SElemType c;
			   SElemType topElem;
			   while(GetTop(ChStack,topElem)&&(topElem!='(')&&Pop(ChStack,c))
                     EnQueue(ChQueue,c);
			   //将最后出栈的元素作为ReverseFirstElem 
			   ReverseFirstElem = c ;
		       //先压首字符到栈中
			   Push(ChStack,ReverseFirstElem);
			   //将队列中的元素进栈,生成新序列			   			   
			   int Qlen = QueueLength(ChQueue);			   
			   for(int j = 0; j<Qlen; j++){
			       DeQueue(ChQueue,c);			   						
				   if( j != Qlen-1 ){//注意(之上的首字符出队,但不入栈
				       Push(ChStack,c);				  
				       Push(ChStack,ReverseFirstElem);
				   }				   
			   }

			   break;
			   
		   }//end case
		   case '(':{
		       //如果栈顶元素是终结符(,则说明()处理完毕,Reverse置为false
				   break;
			   }		   
		   default: {
			       Push(TransLang,e);
			       break;
		   }
        }//end switch

	}//end while 
	
	cout<<"翻译后的魔王语言: ";
	SElemType transCh;
	string ChineseStr;
	int StackLen = StackLength(TransLang);
	for(int i = 0; i<StackLen; i++){
	    Pop(TransLang,transCh);			   						
		ChineseStr.push_back(transCh);
		cout << transCh;
	}	  
	cout<<endl;
    cout<<"翻译后的中文魔王语言: ";
	TransChinese(ChineseStr);

	cout<<endl;
 
  }//end while
			
	return 0;
}

⌨️ 快捷键说明

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