是否有可能将字符串变量解析为C ++中的实际代码行?例如,可以将此字符串"x=0"
解析为实际代码,并将x
(程序中的某个随机变量)的值设置为零吗?我打算用这个做的是我想用C ++制作一个简单的绘图仪。用户输入函数(函数将以x
和y
表示并且值为零)绘制为字符串(如2*y+x
),然后将转换到一个代码对象,然后使用循环进行相应的评估。
答案 0 :(得分:1)
由于C ++是一种编译和链接的语言,因此不适合进行实时评估。
但我已经通过embedding a Python interpretter用C ++实现了类似于你的目标的东西,以便将Python代码动态地评估为字符串并将结果传递给C ++代码。
可以嵌入到C ++程序中的其他一些流行的脚本语言是Lua和Squirrel。
在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之上。