【问题标题】:Parsing string as a line of code in C++将字符串解析为 C++ 中的一行代码
【发布时间】:2014-12-22 17:11:37
【问题描述】:

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

【问题讨论】:

  • 不是本机没有。您将不得不制作自己的系统,这并非易事。
  • 据我所知,C++ 中没有可以使用的内置解析器。但是你可以试试 boost::spirit。为此类函数创建解析器应该不会太难。
  • 这个问题似乎是题外话,因为它是关于语言本身不支持的功能。对这个问题的快速回答是一个简单的“不”。
  • @RSahu 所以如果一个问题的答案是否定的,那么它是不是主题?感谢您的洞察力。
  • @crapoverflow,经过一番考虑,我撤回了将这个问题作为离题结束的投票。

标签: c++ string plot cimg


【解决方案1】:

因为 C++ 是一种编译和链接语言,它不适合动态评估。

但我在过去通过embedding a Python interpretter 使用 C++ 实现了与您的目标类似的目标,以动态评估 Python 代码作为字符串并将结果传递给 C++ 代码。

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

在 Java 中,我通过嵌入 Groovy interpretter 来做到这一点。

您需要通过“嵌入”将脚本语言解释器集成到您的代码中,然后通过“marshaling”过程将值从脚本语言代码传递到您的 C++ 代码

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

【讨论】:

  • 看我的回答;我认为 JavaScript 的语法比 Java、Python 或任何其他提到的语言更接近 C/C++。
  • 我为一个项目工作,该项目启动了一个 C 编译器来“评估”C 代码。哎呀。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    简短的回答是“是”。使用 C++ JIT 即时编译 C++ 效果很好。来自llvm.org

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 2013-06-22
      相关资源
      最近更新 更多