📄 beelzebublang.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 + -