是否有用于C++的类似 C 的语法脚本语言解释器?
Is there a C-like syntax scripting language interpreter for C++?
我很久以前就开始研究动态图形可视化工具,编辑器和算法测试平台(具有节点和弧的图形,而不是其他类型的图形)。 对于算法测试平台,我需要让用户编写脚本或从文件中调用脚本,这将与当前加载的图形进行交互。可视化工具会在脚本算法访问节点时点亮节点等操作,增加一些人为延迟,以便可视化算法导航和执行操作。 脚本还将用于添加第三方功能,我可以将其作为程序文件夹中预先存在的脚本提供,或者在经过测试并工作后仅将其集成到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/
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 如何通过cpp程序运行shell脚本
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 在程序中编写脚本来编写和编译代码
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 如何在c++中使用system()来运行包含空格的python脚本
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 单独定义模板化嵌套类方法的正确语法
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 是否有用于C++的类似 C 的语法脚本语言解释器?
- C++将字符数组解析为脚本文件(语法)
- 在我的解释器上为脚本代码实现语法检查器的最佳方式是什么
- 当我从c++程序调用脚本时,我得到语法错误