【问题标题】:tutorials or introductions to writing a simple scripting language?编写简单脚本语言的教程或介绍?
【发布时间】:2012-01-15 05:58:50
【问题描述】:

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

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

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

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

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

感谢任何人提供的任何帮助。

【问题讨论】:

  • 您真的要创建一种新的脚本语言吗?您不能使用现有语言为您的游戏引擎提供脚本接口吗?
  • 我知道它不是“基于 C 的”,但 Lua 脚本是一种足够简单的语言来学习和编写脚本。
  • @Thilo:从技术上讲,我可能不必这样做,但我认为以后保持 Android 和 PC 工作之间的交叉兼容性可能会非常有用......但如果我可以找到一种脚本语言,现在在我的 C++ 编辑器和我的 Android 引擎中实现都不会太痛苦,我想我会研究一下。
  • @Zack:我从来没有用过 Lua,我得研究一下。我只使用 python 进行 sripting...我真的不喜欢它的格式...但我会看看 Lua anywho。
  • 在 2012 年,您并不想编写自己的脚本语言。虚拟机和 JIT 编译几乎是现代脚本引擎的必需品,如果您尝试用自己的语言实现它可能会很复杂(并且您很快就会在自己的实现中遇到性能问题)。试试 Google v8 (JavaScript) 引擎。据我所知,Google 正在为 Android 使用 v8,因此应该可以将其嵌入 PC 和 Android。

标签: android c++ scripting-language


【解决方案1】:

我试过在网上找教程,但是很多东西都需要转换成字节码、虚拟机之类的东西

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

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

来自 Flipcode 的This tutorial 构建了一种简单的语言并包含所有代码,因此它可能很有用。

你也可以看看Lua源代码。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      几篇老文章还是不错的,如果你能找到的话:

      • M. Abrash, D. Illowsky,“用迷你口译员打造你自己的迷你语言”,Dr. Dobb's Journal 14 (9)(Sep 1989)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)(Sep 1991)34–43。
      • R. Valdés,“小语言,大问题”,Dr. Dobb's Journal 16 (9)(Sep 1991)16–25。

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

      【讨论】:

        猜你喜欢
        • 2012-04-05
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多