我能把C语言用作我的引擎的脚本语言吗?

我现在有一个游戏引擎,正在寻找一个脚本语言。我尝试了 Lua,觉得还不错,但我希望我的脚本看起来像 C 或更好的 C++,或者像虚幻引擎的脚本更好。

这种可能吗?

原文链接 https://stackoverflow.com/questions/6108805

点赞
stackoverflow用户146003
stackoverflow用户146003

当然可以 :P 如果你愿意的话,你可以做任何事情。

目前我看到有三种方法:

  • 要么你自己编写代码来解析 C/C++ 代码,这不是一项简单的任务。
  • 你可以使用解析和解释 C 代码的解析器。Ch Standard edition 可以作为脚本语言包含在自己的项目中。
  • 另一种方法是创建一个脚本,动态编译用户生成的代码到一个共享库,然后由你的引擎动态加载。虽然这不再是“脚本化”。
2011-05-24 10:12:10
stackoverflow用户222815
stackoverflow用户222815

Metalua是基于Lua代码库的语言实现系统,暴露了各种语言内部,如解析器(gg/mlp),因此允许您扩展语言或完全更改语法。将它想象成yacc和Lispy元循环解释器之间的交叉。

我不太清楚你的需求是什么,"看起来像C或更好的C++",但我认为这听起来很合适,并提供了实现易用性和灵活性之间的良好平衡。

2011-05-24 12:45:43
stackoverflow用户673191
stackoverflow用户673191

像@Charles所说的那样,如果您想要一些容易实现和灵活性的东西,请使用Metalua。如果您想要一种类似C的脚本语言,您可以尝试ECMAScript或其任何超集(JavaScript、JScript、ActionScript)。

2011-05-24 16:10:19
stackoverflow用户88888888
stackoverflow用户88888888

有许多脚本语言具有更或少类似 C 的语法。前面已经提到了 ECMAScript,另一个选择是 s-lang,它被设计为一种脚本语言,易于嵌入,并且语法与 C 相当接近。

2011-05-24 20:58:44
stackoverflow用户743263
stackoverflow用户743263

请检查AngelScript、GameMonkey和其他许多脚本语言。可参考http://codeplea.com/game-scripting-languages

或者,采用更困难的方式,将CINT C/C++解释器(http://root.cern.ch)与ROOT库集成在一起。大概的想法是你可以解释你正在工作中的所有.c/.cpp文件,而其余的则已经被编译(由你选择)。

例如,你是一个音频程序员,你想让非音频代码的部分非常快,而你正在积极工作的部分则不需要那么快,但需要快速迭代——热加载、动态修改等。

此外,CINT解释器还具有额外的动态语言功能——你可以进行自省(反射)——允许你为你的游戏资产创建序列化器或其他你可能需要的工具。

还有UnderC、Ch(如上所述)和许多其他的脚本语言。

2011-05-31 04:47:55
stackoverflow用户255049
stackoverflow用户255049

TCC有一个库,允许动态编译C代码,并且它的编译速度非常快,可以用来(几乎)实时编译,有一个非常基本的例子在这里,然而TCC文档中的头文件更好地解释了一些东西。

它还提供了一个更好的例子,展示了如何在使用libtcc时向编译器暴露符号,这可以允许您在禁用编译器的某些部分(主要是导入非安全列表中的外部库)时对脚本进行隔离,这是可能的,因为它是完全开源的,而且不是太复杂,它有关于其内部结构的一些基本文档。

2011-05-31 05:38:06