我知道这里有一些关于这个主题的问题,但很难找到对我所追求的东西有用的东西......
我也知道它可能最终完成任务,但我真的想为游戏引擎制作一个简单的脚本语言...我想在C ++和我的Android Java游戏引擎中使用它...但我不喜欢我不知道从哪里开始...我曾尝试在线寻找教程,但很多需要将事物转换为字节码,虚拟机等...
我真的只是想创建一个简单的脚本语言,可以从引擎中读取,有一些简单的“if / else”逻辑......可以从其他脚本中调用的简单函数等等......也许早期更简单版本...我真的不知道从哪里开始,但我知道这是我需要开始学习和理解的东西。
如果有人能指出我正确的方向,并指出一些链接到非常简单的“为游戏制作一个简单的脚本语言”的教程,甚至指出一些我应该研究的关键概念......我真的很感激。
我更喜欢基于C语言的极简主义脚本语言,但我想一旦我真正学到了更多关于它的内容,我就会详细说明。
感谢任何人都能给予的帮助。
我曾尝试在线寻找教程,但很多都需要将事物转换为字节码,虚拟机等
是。这真的是一种方法,即使对于一种简单的死语言也是如此。直接执行源代码会更复杂,这样做的方法首先是解析源代码并将其消化为字节代码,然后让虚拟机解释字节代码。
您可能希望查看现有语言以了解其设计。
本教程 来自flipcode构建一个简单的语言并包含所有代码,因此它可能很有用。
你也可以看看 LUA 源代码。
我的部分工作是维护专有的游戏脚本语言。从狭义上讲,我不知道任何关于这个主题的“如何做”的书。 Bruce Wilcox撰写了一篇关于编写此类语言的有趣文章。它没有讨论实现细节,而是在某种程度上进入设计过程。
http://www.gamasutra.com/view/feature/1570/reflections_on_building_three_.php
编写脚本语言就像编写任何语言一样,涉及所有相同的原则和设计问题。你需要考虑你的语言应该围绕什么概念,你需要定义一个语法,然后你需要编写一个编译器或翻译器和/或一个解释器。您选择哪个以及它们的实现细节完全取决于您,并且没有一个或最好的方法来完成这些事情。
在解析语法和定义语言语法时,有一些标准的思考方式。正则表达式是你的朋友。值得庆幸的是,C ++ 11包含了 <regex>
库(最初来自boost)。如果你真的想要深入研究这个主题,那么阅读一本关于编译器的书可能会有助于你开始学习重要的概念。当我在大学读一个编译器课程时,这是我的教科书,直到今天我一直陪着我,所以我推荐它。
http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886/ref=sr_1_2?ie=UTF8&qid=1326618572&sr=8-2
写一门语言是计算机科学的一个很好的练习。但是,如果这是一个真实的项目或产品,那么就像其他已经评论过的人一样,我的专业建议是:如果你真的不这样做,就不要这样做。这是你正在考虑的一个巨大的潜在时间投资,你要问自己:在现有的免费使用语言(如Lua和Python)中找不到我自己的语言会带来哪些好处,以及这些好处值得花费几个月的额外时间来实施吗?
不要忘记工具。如果您正在编写您希望其他人使用的语言,则需要大量文档和工具,工具和工具。您几乎肯定至少需要一个源代码级调试器,编写一个好的调试器只需编写语言本身就可以了!
如果你想要的只是一种快速原型化游戏逻辑的语言,那么Lua可能更适合你的需求,并且附带了许多现有的文档,文献和工具。
如果您能找到它们,一些旧文章仍然很好读:
- M. Abrash,D。Illowsky,“用迷你翻译卷起你自己的小语言”,Dobb博士的期刊14(9)(1989年9月)52-72。
- J. Bentley,“编程珍珠:小语言”,ACM 29(1986)711-721的通讯。
- D. Betz,“嵌入式语言”,Byte 13#12(1988年11月)409-416。
- D. Betz,“你自己的小型面向对象语言”,Dobb博士的期刊16(9)(1991年9月)26-33。
- N. Franks,“为您的软件添加扩展语言”,Dobb博士的期刊16(9)(1991年9月)34-43。
- R.Valdés,“小语言,大问题”,Dobb博士的期刊16(9)(1991年9月)16-25。
也可以看看 Bob:一种微小的面向对象语言 由Betz。 BOB的最新消息来源于 http://www.xlisp.org/。