【问题标题】:Is there a C-like syntax scripting language interpreter for C++?是否有用于 C++ 的类似 C 的语法脚本语言解释器?
【发布时间】:2019-04-25 18:27:54
【问题描述】:

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

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

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

脚本 100% 与 C++ 兼容的自我要求几乎是必要的,这只是一个不错的额外的东西,我可以不用它。

现在的问题是,是否有替代 lua 的替代方法,它具有类似 c 的语法,支持我已经完成的所有操作以及类和继承? (必须能够将接口脚本的自定义“类”添加到程序中)

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

【问题讨论】:

标签: c++ interpreter scripting-language


【解决方案1】:

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++ 包装器。它可以编译抽象语法树并在运行时链接它们,尽管它仍处于 Alpha 模式。

cppast

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

其他工具

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

【讨论】:

  • Parsing C++ is hard - 这是一个严重的轻描淡写。
  • 还有运行时编译的 C++ 和替代方案:github.com/RuntimeCompiledCPlusPlus/RuntimeCompiledCPlusPlus/…
  • 我也会尝试这条路线,但与使用 chaiscript(我接受的答案)相比,让用户脚本与程序中存在的类交互会是一团糟……我想。其实我不知道我怎么能做到这一点。
【解决方案2】:

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

http://chaiscript.com/

有很多文档:

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

【讨论】:

  • 它没有“让我使用 C++ 作为脚本语言”,它提供了一个可以嵌入到 C++ 程序中的类似 c 的语法脚本解析器。也就是说,它已经足够接近我的需求了,看起来将接口集成到我的类中真的很容易,这是我最重要的要求。
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多