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



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

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

我真的只想创建一个简单的脚本语言,它可以从引擎中读取,有一些简单的"if/else"逻辑。。。可以从其他脚本调用的简单函数等等…对于早期版本来说可能更简单。。。我真的不知道从哪里开始,但我知道这是我需要开始学习和理解的事情。

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

我更喜欢一种极简主义的基于C的脚本语言,但我想,一旦我真正了解了更多,细节就会进入其中

感谢任何人的帮助。

我试着在网上寻找教程,但很多都需要将东西转换为字节码、虚拟机和类似的

是的。这确实是一种方法,即使对于一种非常简单的语言也是如此。直接执行源代码要复杂得多,方法是首先解析源代码并将其摘要为字节码,然后让虚拟机解释字节码。

您可能需要查看现有的语言来了解它们的设计。

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

您还可以查看Lua的源代码。

我的部分工作是维护专有的游戏脚本语言。我不知道有任何关于这个主题的狭义"如何"的书。布鲁斯·威尔科克斯写了一篇关于写这种语言的有趣文章。它不讨论实现细节,但在一定程度上进入了设计过程。

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,"用迷你口译员滚动你自己的迷你语言",多布博士期刊14(9)(1989年9月)52-72
  • J。Bentley,"编程珍珠:小语言",ACM通讯29(1986)711–721
  • D。Betz,"嵌入式语言",字节13#12(1988年11月)409–416
  • D。Betz,"你自己的微小的面向对象语言",多布博士期刊16(9)(1991年9月)26-33
  • N。Franks,"为您的软件添加扩展语言",多布博士期刊16(9)(1991年9月)34-43
  • R。瓦尔德斯,"小语言,大问题",多布博士期刊16(9)(1991年9月)16-25

另请参阅Betz的Bob:一种微小的面向对象语言。BOB的最新消息来源可在http://www.xlisp.org/.

最新更新