我想从用户那里以字符串形式输入一个表达式并将其编译为可调用的C++函数。是否有任何工具可以轻松地完成这个任务?基本上,How do I compile an Expression Tree into a callable method, C#? 看起来与我想要做的类似,只是我需要在C++而不是C#中完成这个任务。我肯定可以使用lex和yacc创建一种通用评估器,但我不想每次都解析字符串。基本上,这个表达式将在关键内部循环中运行,因此我正在寻找一种在运行时“编译”它的方法。
你可以编写自己的迷你解释器。使用与C++相同的命令(不是全部)。当然,你的编译器会进行优化,但不确定优化效果如何。我曾经在QBasic中为汇编语言编写过解释器(mov、add、sub等),但由于是解释器的解释器,速度相对较慢:D
你有没有考虑过进化计算和适应性函数?值得研究。
这并不容易... 如果你想听我的建议,我会按照以下步骤进行:
但是,正如其他人所说,这不是一项简单的任务。
编辑:另一个解决方案是检查像boost::spirit::qi这样的解析器,经过良好使用可以提供极其有用的结果。