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

Parsing string as a line of code in C++

本文关键字:代码 一行 字符串 C++      更新时间:2023-10-16

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

因为C++是一种编译和链接的语言,所以不适合即时评估。

但是我过去通过嵌入一个 Python 解释器来动态评估 Python 代码作为字符串并将结果传递给C++代码,从而实现了与您过去通过C++目标类似的目标。

可以嵌入C++程序中的其他一些流行的脚本语言是Lua和Squirrel。

在Java中,我通过嵌入Groovy解释器做了同样的事情。

您需要通过"嵌入"脚本语言

解释器将其集成到代码中,然后通过"封送处理"过程将值从脚本语言代码传递到C++代码

如果你真的想要C++可以解释的语法理论上可以为语言的子集开发一个动态解析器和解释器,但C++是一种复杂的语言,这样的任务将是一项艰巨的任务,充满了困难,本质上是使用错误工具的情况。

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

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

简短的回答是"是"。使用C++ JIT 动态编译C++就可以了。从 llvm.org

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

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