问题描述:<br>魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听懂,但他<br>的语言是可逐步解释成人能听懂的语言,因为他的语言是由以下两种形式<br>的规则由人的语言逐步抽象上去的:<br>-----------------------------------------------------------<br>1)a---> (B1)(B2)....(Bm)<br>2)[(op1)(p2)...(pn)]---->[o(pn)][o(p(n-1))].....[o(p1)o]<br>-----------------------------------------------------------<br>在这两种形式中,从左到右均表示解释.试写一个魔王语言的解释系统,把<br>他的话解释成人能听得懂的话.<br>###########################################################<br>基本要求:<br>用下述两条具体规则和上述规则形式(2)实现.<br>设大写字母表示魔王语言的词汇;<br> 小写字母表示人的语言的词汇;<br>希腊字母表示可以用大写字母或小写字母代换的变量.<br>魔王语言可含人的词汇.<br>1) B --> tAdA<br>2) A --> sae<br>############################################################<br>测试数据:<br>B(ehnxgz)B 解释成 tsaedsaeezegexenehetsaedsae<br>若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:<br>"天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅".<br>---------------------------------------------------<br>| t | d | s | a | e | z | g | x | n | h |<br>---------------------------------------------------<br>| 天 | 地 | 上 | 一只| 鹅 | 追 | 赶 | 下 | 蛋 | 恨 |<br>---------------------------------------------------<br>#############################################################<br>实现提示:<br>将魔王的语言自右至左进栈,总是处理栈顶字符.若是开括号,则逐一出栈,将<br>字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈.<br>其它情形较简单.<br>应首先实现栈和队列的基本操作.<br>#############################################################<br>选作内容:<br>1)由于问题的特殊性,可实现栈和队列的顺序存储空间共享<br>2)代换变量的数目不限,则在程序开始运行时首先读入一组第一种形式的规则,<br>而不是把规则固定在程序中(第二种形式的规则只能固定在程序中). <br><br>本程序在VC++上运行通过