12

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

我也知道这可能最终会成为一项艰巨的任务,但我真的很想为游戏引擎制作一种简单的脚本语言......我想在 C++ 和我的 Android Java 游戏引擎中使用它......但我没有'不知道从哪里开始......我试过在网上寻找教程,但很多需要将东西转换为字节码,虚拟机等......

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

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

我更喜欢基于 C 的极简脚本语言,但我想一旦我真正了解了更多关于它的细节,就会进入它。

感谢任何人都可以提供的任何帮助。

4

3 回答 3

5

我试过在网上寻找教程,但很多需要将东西转换为字节码、虚拟机等

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

您可能想查看现有语言以了解它们的设计。

Flipcode 的本教程构建了一种简单的语言并包含所有代码,因此它可能很有用。

您还可以查看Lua源代码。

于 2012-01-15T08:32:51.710 回答
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 可能非常适合您的需求,并且带有大量现有的文档、文献和工具。

于 2012-01-15T09:35:34.083 回答
3

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

  • M. Abrash, D. Illowsky,“用迷你口译员滚动你自己的迷你语言”,Dobb 博士的期刊 14 (9)(1989 年 9 月)52-72。
  • J. Bentley,“编程珍珠:小语言”,ACM 通讯 29 (1986) 711–721。
  • D. Betz,“嵌入式语言”,字节 13 #12(1988 年 11 月)409–416。
  • D. Betz,“您自己的微型面向对象语言”,Dobb 博士的期刊 16 (9)(1991 年 9 月)26-33。
  • N. Franks,“为您的软件添加扩展语言”,Dr. Dobb's Journal 16 (9)(1991 年 9 月)34–43。
  • R. Valdés,“小语言,大问题”,Dr. Dobb's Journal 16 (9) (Sep 1991) 16–25。

另请参阅Bob:Betz 的微型面向对象语言。BOB 的最新资源可在http://www.xlisp.org/获得。

于 2012-01-17T14:58:45.047 回答