实现一个脚本引擎

Part I:概述

序言
bl_line.jpg (1610 bytes)

OK,在你的引擎中你想有一个脚本语言.

首先,确定你需要那种脚本语言;Henry Robinson 已经写过了一个各种脚本语言区别的介绍(如果你还没读过就去读一下吧),在这个系列教程中我将讨论一个象虚幻脚本(Unreal script)那样的编译器/虚拟机系统.

下一步,你需要知道两件事:怎样实现那样一个脚本引擎,还有脚本引擎不仅仅是酷而且在实际中十分有用的一些理由.

这里是我想到的一些:

但是也有一些不利因素:

当然我们不会因为这些就停下来,我们已经准备好实现我们的想法了.现在,从哪里开始呢?

必须阅读的东西
gl_line.jpg (1418 bytes)

在虚幻(Unreal)发布前很久我就开始了.我浏览他们的技术站点,并且发现了虚幻脚本参考文档(UnrealScript reference document).我当然听说过虚幻脚本,但是并不真正知道他是什么.我阅读了这些文档,觉得一个脚本语言的想法实在是很酷.我要自己写一个,然后连接到一个游戏引擎,以便我的游戏的整个世界都可以轻松的建立新的内容.

幸运的是我有一个学期的编译器构造课程(燕良注:我也刚学了一个学期的编译原理,还考了92分,嘻嘻,不过Julien当时竟然只用两个月就考了98分,佩服,佩服),并且作为一个实际的任务我曾经实现过一个非常非常简单的Pascal编译器.我开始并行工作,更好,编译器.我已经有一个接受C的子集的可工作的版本,但是我用了2周来编码,其内部结构相当的可怕,...我不得不完整的重新设计那东西.我相信你在某些地方有与我相似的经验...现在我依然在做这东西,并且学到了很多关于编译器的知识.

现在,接触一点有用的信息吧.

首先,我建议所有想要编写一个编译器的人弄一本龙之书.你们中的大多数(尤其是象我这样的计算机系学生)可能已经知道了这个(燕良注://shake).告诉那些不知道的人,我是在说Aho, Sethi 和 Ullman 所著的<<Compilers - Principles, Techniques and Tools >>(ISBN 0-201-10194-7). 因为他的封面有一条龙,所以得到了龙之书的名字.相信我,所有对编译器有所了解的人都读过这本书(燕良注:国内有卖吗?).

这本书从1986年就不曾修改过,这是因为从60年代编译器的设计基本技术就没有变过.当然,这本书不涉及面向机器的优化,但是有其他书.此外,我们想要编译出字节码(bytecode)而非机器码.

其次,如果你想要得到一个快速实现字节码脚本语言的预览GamaSutra的一篇文章.那是一个值得一读的关于实现Jedi骑士脚本语言的故事.那里的所有的东西我也将涉及,但是那仍然是值得一读的.

我们需要什么
bl_line.jpg (1610 bytes)

一个编译器基本上包括一下这些组成部分:

layout.jpg (34875 bytes)

如果你编写完了所有这些组件,组合到一起,它们将成为一个完整的脚本语言系统.

这是全部吗?
gl_line.jpg (1418 bytes)

受到了一点点打击吗?毕竟决定使用脚本不是那么酷,DLL真的是唯一的路吗?没关系,我将很快讨论每一组件的细节,它们的绝大多数并不是那么困难.建立一个完整的脚本引擎是一个巨大的工作,但是,本质上是构造你自己的代码.

在这个教程的剩余部分我们将开发一个简单的编译器/虚拟机系统.尽管他没有地方象是一个完整的脚本语言,但是他实现了上面提到的所有组件.我在回想一个操作字符串的简单语言.

现在检查上面的连接,了解他们.顺便提一下,感谢所有的评论.

Quote!
gl_line.jpg (1418 bytes)

"But the plans were on display ..."
"On display? I eventually had to go down to the cellar to find them."
"That's the display department."
"With a torch."
"Ah, well the lights had probably gone."
"So had the stairs."
"But look, you found the notice didn't you?"
"Yes," said Arthur, "yes I did. It was on display in the bottom of a locked filing cabinet stuck in a disused lavatory with a sign on the door saying Beware of the Leopard."

HHG 1:1



返回目录
diamond Garden制作 2000年1月