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

时间:2012-01-15 05:58:51

标签: android c++ scripting-language

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

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

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

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

我更喜欢基于C语言的极简主义脚本语言,但我想一旦我真正了解了它的具体内容,就会有一些细节。

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

3 个答案:

答案 0 :(得分:4)

  

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

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

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

flipcode的

This tutorial构建了一个简单的语言并包含了所有代码,所以它可能很有用。

您还可以查看Lua源代码。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

  • 微米。 Abrash,D。Illowsky,“用迷你翻译卷起你自己的小语言”,Dobb博士的期刊14(9)(1989年9月)52-72。
  • 学家Bentley,“编程珍珠:小语言”,ACM 29(1986)711-721的通讯。
  • d。 Betz,“嵌入式语言”,Byte 13#12(1988年11月)409-416。
  • d。 Betz,“你自己的小型面向对象语言”,Dobb博士的期刊16(9)(1991年9月)26-33。
  • ñ。 Franks,“为您的软件添加扩展语言”,Dobb博士的期刊16(9)(1991年9月)34-43。
  • R上。巴尔德斯,“小语言,大问题”,Dobb博士的期刊16(9)(1991年9月)16-25。

请参阅Betz的Bob: A Tiny Object-Oriented Language。最新的BOB来源可在http://www.xlisp.org/获得。