是否有用于 C++ 的类 C 语法脚本语言解释器?

Is there a C-like syntax scripting language interpreter for C++?

我很久以前就开始研究动态 图形可视化器、编辑器和算法测试平台(带有节点和圆弧的图形,而不是其他类型)。 对于算法测试平台,我需要让用户编写脚本或从文件中调用脚本,这将与当前加载的图形进行交互。可视化工具会做一些事情,比如在脚本算法访问节点时点亮节点,添加一些人为延迟,以便可视化算法导航和做的事情。 其次,脚本还将用于添加第三方功能,我可以将这些功能作为程序文件夹中预先存在的脚本提供,或者在它们经过测试和工作后直接集成到 C++ 程序中。

我搜索要嵌入到我的程序中的解释器时,我都转到了 lua; 然后我开始为我自己的类 C 语法脚本语言手写我自己的递归下降解析器(我计划使用 C++ 语法的一个子集,这样用我的脚本语言编写的任何代码都可以复制粘贴到任何 C++ 代码中。 这是一个有趣的疯狂想法,我一点也不后悔,我有作用域、函数、循环、goto、类型安全变量、表达式。

但现在我正在接近添加 classes、class 方法、继承(一些默认的 classes 是将脚本连接到程序所必需的),我意识到这将花费大量时间和精力。一个未毕业学生的个人项目有点太多了要学习……但我还是想完成这个项目。

脚本与 C++ 100% 兼容的自我强加要求几乎是必要的,它本来只是一个很好的额外东西,我可以没有。

现在的问题是,是否有 lua 的替代方案,它具有类似 c 的语法,支持我已经完成的所有工作以及 classes 和继承? (能够添加自定义 "classes" 接口脚本到程序是强制性的)

(我不能假定用户安装了完整的 c++ 编译器,所以我不能在运行时将他们的 "script" 编译为一个 dll 来加载和调用它,尽管我希望我可以)

C++ 的即时编译

解析 C++ 很难。哎呀,解析 C 很难。很难做到正确,并且有很多边缘情况。值得庆幸的是,有一些库可以获取代码,甚至可以为您编译。

libclang

libclang 提供了很多解析 c++ 的工具。这是一个很好的、干净的库,它会解析 clang 编译器本身会解析的任何内容。 This article here 是一个很好的开端

libclang提供了一个JIT编译工具,可以让你在运行时编写和编译C++。请在此处查看 this blog post 以了解其功能和使用方法的概述。很通用,很强大,用户写代码应该很快。

GCC also provides a library 在程序运行期间调用 libgccjit 进行即时编译。 libgccjit 是一个 C 库,但库维护者也提供了一个 C++ 包装器。它可以在运行时编译抽象语法树和 link 它们,尽管它仍处于 Alpha 模式。

cppast

如果您不想使用 libclang,还有一个正在开发中的名为 cppast 的库,它是一个 C++ 解析器,可为您提供 C++ 代码的抽象语法树表示。不幸的是,它不会解析函数体。

其他工具

如果有人知道任何其他用于在运行时编译或解释 C++ 的库,我鼓励他们更新这个 post,或评论它们以便我可以更新它!

这里有一些东西可以让你在你的应用程序中嵌入类似 C 的脚本语言(以及一些其他很酷的东西):

http://chaiscript.com/

有很多文档:

https://codedocs.xyz/ChaiScript/ChaiScript/