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

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

本文关键字:脚本 语法 语言 解释器 用于 C++ 是否      更新时间:2023-10-16

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

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

但是现在我正在接近添加类、类方法、继承(一些默认类是将脚本接口到程序所必需的),我意识到这将花费大量的时间和精力。对于一个有考试要学习的未毕业学生的个人项目来说有点太多了......但我仍然渴望完成这个项目。

脚本与C++ 100% 兼容的自我强加要求几乎是必要的,这只是一件好事,我可以不用。

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

(我不能假设用户安装了完整的C ++编译器,所以我不能在运行时将他们的"脚本"编译为DLL来加载和调用它,尽管我可以)

C++的即时编译

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

利布朗

libclang 提供了许多解析 C++ 的工具。这是一个好的,干净的库,它将解析clang编译器本身将解析的任何内容。这篇文章是一个很好的开端

libclang 提供了一个 JIT 编译工具,允许您在运行时编写和编译C++。请参阅此处的这篇博客文章,了解它的功能和如何使用它的概述。它非常通用,非常强大,用户编写的代码应该很快。

GCC 还提供了一个名为 libgccjit 的库,用于在程序运行时进行即时编译。 libgccjit 是一个 C 库,但库维护者也提供了一个C++包装器。它可以编译抽象语法树并在运行时链接它们,尽管它仍处于 Alpha 模式。

CP过去

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

其他工具

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

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

http://chaiscript.com/

有很多文档:

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