网站大量收购独家精品文档,联系QQ:2885784924

转 实现一个脚本引擎.doc

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
转 实现一个脚本引擎

转 实现一个脚本引擎 译者序 由于我最近有一个计划,就是写一个适应性很强的脚本语言,这个语言将主要用来处理剧情,希望能够用于绝大多数需要剧情的游戏.于是最近开始找一些关于script的东西来看看,当我在flipcode看到这篇的overview时,见它提到了unreal的脚本系统和字节码和虚拟机,就开始在没有完全读完的情况下翻译这一系列文章(共9篇).在翻译中加一些注释.希望不要误导您,还有为了丰富原文我也加入了几个自己的程序.因为这是我首次翻译这种系列文章,在脚本引擎方面也缺乏经验,所以难免会有一些不当之处,还请大家批评指正. 目录 Part I:概述 Part II:词法分析器 Part III:语法分析器 Part IV:符号表语法树 Part V:语义检查中间代码生成 Part VI:优化 Part VII:虚拟机(The Virtual Machine) Part VIII:可执行代码 Part IX:高级主题 版本列表 2000年2月至2000年3月第一稿 声明 原文发布时间是1999年5月至8月,原文作者是Jan Niestadt 如果有中文版权的话版权属译者(即燕良)所有 如果您觉得有用当然可以转载,不过请保持文章的全部内容,如果您有什么修改意见请与译者联系 暂时不可用作商业用途 Part I:概述 序言 OK,在你的引擎中你想有一个脚本语言. 首先,确定你需要那种脚本语言;Henry Robinson已经写过了一个各种脚本语言区别的介绍(如果你还没读过就去读一下吧),在这个系列教程中我将讨论一个象虚幻脚本(Unreal script)那样的编译器/虚拟机系统. 下一步,你需要知道两件事:怎样实现那样一个脚本引擎,还有脚本引擎不仅仅是酷而且在实际中十分有用的一些理由. 这里是我想到的一些: 有用的新语言特性象状态,隐藏代码(latent code),等等. 一个沙盘环境(sandbox environment)不会导致游戏引擎的崩溃. 不需要游戏内部引擎的只是或者重新编译游戏引擎就可以编写游戏的内容. 完全的独立于平台的脚本代码 但是也有一些不利因素: 相对较慢--脚本的运行至少比可执行代码的执行慢15倍. 限制--脚本不能用来建立实际的视觉效果(部分原因是它速度的缺点). 编写游戏内容的人必须学习一种新的语言. 当然我们不会因为这些就停下来,我们已经准备好实现我们的想法了.现在,从哪里开始呢? 必须阅读的东西 在虚幻(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骑士脚本语言的故事.那里的所有的东西我也将涉及,但是那仍然是值得一读的. 我们需要什么 一个编译器基本上包括一下这些组成部分: 一个符号表,其中存储所有的符号及其信息,例如类型,范围,等等. 一个词法分析器,他的功能是将字符流(例如源文件)转换为记号(例如关键词,操作符等等). 一个语法分析器(parser),他的功能是读取记号

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档