在C ++中将字符串解析为一行代码

时间:2014-12-22 17:11:38

标签: c++ string plot cimg

是否有可能将字符串变量解析为C ++中的实际代码行?例如,可以将此字符串"x=0"解析为实际代码,并将x(程序中的某个随机变量)的值设置为零吗?我打算用这个做的是我想用C ++制作一个简单的绘图仪。用户输入函数(函数将以xy表示并且值为零)绘制为字符串(如2*y+x),然后将转换到一个代码对象,然后使用循环进行相应的评估。

3 个答案:

答案 0 :(得分:1)

由于C ++是一种编译和链接的语言,因此不适合进行实时评估。

但我已经通过embedding a Python interpretter用C ++实现了类似于你的目标的东西,以便将Python代码动态地评估为字符串并将结果传递给C ++代码。

可以嵌入到C ++程序中的其他一些流行的脚本语言是LuaSquirrel

在Java中,我通过嵌入Groovy interpretter来完成同样的工作。

您需要通过"嵌入"将脚本语言解释器集成到您的代码中。它然后通过" marshaling"

的过程将脚本语言代码中的值传递给您的C ++代码

如果您真的想要可以解释的 C ++语法,理论上 可以为子集开发动态解析器​​和解释器语言,但C ++是一种复杂的语言,这样的任务将是一个充满困难的巨大的承诺,实质上就是使用错误的工具来完成工作。

答案 1 :(得分:0)

简短的回答是“不”。你不能像那样“动态”编译C / C ++,因为它是一种编译语言,而不是一种解释型语言。

但是这里有一个想法:你可以使用the SpiderMonkey API嵌入一个JavaScript解释器,它可以解释你所有的示例代码片段,因为JavaScript语法在这方面非常类似于C / C ++。

答案 2 :(得分:0)

简短的回答是"是"。使用C ++ JIT可以快速编译C ++。来自llvm.org

  

即时(JIT)代码生成系统,目前支持X86,X86-64,ARM,AArch64,Mips,SystemZ,PowerPC和PowerPC-64。

假设您愿意将大部分编译器链接到您的程序中以实现此目的。通过共同努力,您应该能够写出" eval"在现有的API之上。