问题 编写简单脚本语言的教程或介绍?


我知道这里有一些关于这个主题的问题,但很难找到对我所追求的东西有用的东西......

我也知道它可能最终完成任务,但我真的想为游戏引擎制作一个简单的脚本语言...我想在C ++和我的Android Java游戏引擎中使用它...但我不喜欢我不知道从哪里开始...我曾尝试在线寻找教程,但很多需要将事物转换为字节码,虚拟机等...

我真的只是想创建一个简单的脚本语言,可以从引擎中读取,有一些简单的“if / else”逻辑......可以从其他脚本中调用的简单函数等等......也许早期更简单版本...我真的不知道从哪里开始,但我知道这是我需要开始学习和理解的东西。

如果有人能指出我正确的方向,并指出一些链接到非常简单的“为游戏制作一个简单的脚本语言”的教程,甚至指出一些我应该研究的关键概念......我真的很感激。

我更喜欢基于C语言的极简主义脚本语言,但我想一旦我真正学到了更多关于它的内容,我就会详细说明。

感谢任何人都能给予的帮助。


7554
2018-01-15 05:58


起源

你真的想创建一个新的脚本吗? 语言?你不能提供脚本 接口 使用现有语言到您的游戏引擎? - Thilo
我知道它不是“基于C的”,但Lua脚本是一种简单易学的语言,可用于学习和编写脚本。 - Zack
@Thilo:从技术上讲,我可能不需要,但我认为这将是以后可能非常有用的东西,以保持我的Android和PC工作之间的交叉兼容性...但是如果我能找到一个脚本语言不是'到目前为止我的C ++编辑器和我的Android引擎都很难实现,我想我会调查一下。 - Kalisme
@Zack:我从未使用过Lua,我必须深入研究它。我只使用python进行sripting ...我真的不喜欢它的格式化......但是我会看看Lua anywho。 - Kalisme
在2012年,您真的不想编写自己的脚本语言。虚拟机和JIT编译几乎是现代脚本引擎的必备条件,如果您尝试使用自己的语言实现它,则可能很复杂(并且您将很快通过自己的实现遇到性能问题)。试试Google v8(JavaScript)引擎。据我所知谷歌正在使用v8 for Android,因此应该可以将它嵌入到PC和Android上。 - Sim


答案:


我曾尝试在线寻找教程,但很多都需要将事物转换为字节码,虚拟机等

是。这真的是一种方法,即使对于一种简单的死语言也是如此。直接执行源代码会更复杂,这样做的方法首先是解析源代码并将其消化为字节代码,然后让虚拟机解释字节代码。

您可能希望查看现有语言以了解其设计。

本教程 来自flipcode构建一个简单的语言并包含所有代码,因此它可能很有用。

你也可以看看 LUA 源代码。


4
2018-01-15 08:32





我的部分工作是维护专有的游戏脚本语言。从狭义上讲,我不知道任何关于这个主题的“如何做”的书。 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可能更适合你的需求,并且附带了许多现有的文档,文献和工具。


4
2018-01-15 09:35





如果您能找到它们,一些旧文章仍然很好读:

  • 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/


3
2018-01-17 14:58