数据结构与算法课程设计求助

来源:百度知道 编辑:UC知道 时间:2024/06/02 23:04:21
针对一个简单的基于对象的动画语言,设计一个程序解释并执行用该语言编写的动画程序,最后将该动画演示出来。
该动画语言的语法如下:
<command> = <object defn> | <move-cmd>
<object defn> = (define <var> <draw-list>)
<draw-list> = (<draw-cmd> … <draw-cmd>)
<draw-cmd> = <line-cmd> | <circle-cmd>
<line-cmd> = (line <posn> <posn>)
<circle-cmd> = (circle <posn> r)
<posn> = (x y)
<move-cmd> = <place-cmd> | <shift-cmd> | <erase-cmd> | <loop-cmd>
<place-cmd> = (place <posn> <var>)
<shift-cmd> = (shift <var> <direction>)
<direction> = left | right | up | down
<erase-cmd> = (erase <var>)
<loop-cmd> = (loop n (<move-cmd> … <move-cmd>))

用该语言可编写下面的动画程序:
(define cross ( (line (0 0) (50 50)) (line (50 0) (0 50)) (circle (25 25) 25) ) )
(place cross (50 50))
(loop 100 (

看上去有点象游戏引擎。
我最近也在研究这个。

不过,这是编译原理的范畴。

具体实现起来很复杂的,不过,可以给你一些大致的思路:

1、文本编辑器或者源代码读取程序(可以是用户输入或者从文件读入)
2、词法分析。(其实词法分析就是将各个元素比如变量、关键字、运算符等分离出来)
3、语法分析,语义分析。(其作用是生成语法树)
4、解释器,运行时环境。(维护程序运行时的环境,比如局部变量的建立、撤销;函数调用时环境的保存;堆、栈维护等。另外,还要提供固有命令(函数)的实现,就是说,用户调用了固有的命令时,将会发生什么。)

总的来说,很复杂的。这是一个很大的项目。别说200分,就是2000元,也很难找到。

推荐你看看编译原理(不过国内的编译原理的书籍,都只讲皮毛,要看就看英文的)另外,有一本《高级游戏脚本程序设计》不错。

再就是,你可以使用现成的语法分析生成器,比如:Lex+Yacc,不过需要修改生成的代码,才能在VC中使用。

我只帮你找到这些了,希望可以帮到你。祝您好运!

一、 问题描述和分析
问题描述:
目前,进行快速远距离通信的主要手段是电报,即将需传送的文字换换成由二进制的字符组成的字符串。在传送电文时,希望总长尽可能的短。如果每个字符设计长度不等的编码,且让电文中出现次数较多的字符尽可能短的编码,则传送电文的总长便可减少。若要设计长短不等的编码,则必须是任一个字符的编码都不是另一个字符编码的前缀,这种编码称作前缀编码。
问题分析:
可以利用二叉树来设计二进制的前缀编码。假设有一颗如图所示的二叉树,其4个叶子结点分别表示A、B、C、D这四的字符,且约定左分支表示字符’0’,右分支表示字符’1’,则可以从根结点到叶子结点的路径上分支字符组成的字符串作为该叶子结点字符的编码。可以证明得到的必为二进制编码。如图所得A、B、C、D的二进制前缀编码分别为0、10、110和111。

二、 数据结构设计
因为哈夫曼树共有2n-1个节点,所以我们定义一个大小为2n-1的一维数组