我希望将用户的表达式作为字符串输入并将其编译为可调用的c ++函数。是否有任何工具可以让您轻松完成此操作?
基本上,How do I compile an Expression Tree into a callable method, C#?似乎与我想做的相似,只是我需要在c ++而不是c#中执行此操作。
我当然可以使用lex和yacc创建一种通用的求值程序,但我不想每次都要解析字符串。基本上这个表达式将在一个关键的内循环中运行,所以我正在寻找一种方法来编译"它在运行时。
答案 0 :(得分:1)
你可以写你的迷你翻译。命令与c ++相同(不是全部)。当然你的编译器会优化它但不确定多少。我在qbasic(mov,add,sub ...)中进行了汇编,但由于是翻译的翻译,所以它很慢:D
您是否考虑过进化计算和适应度函数?值得一看。
答案 1 :(得分:1)
您必须将表达式解析为抽象语法树并对其进行处理或对其进行就地评估。 Something like this应满足您对简单数学表达式的需求。
答案 2 :(得分:1)
这并不容易......如果你想要我的两分钱,我会按照以下步骤操作:
但是,正如其他人所说,这不是一项微不足道的任务。
编辑:另一个解决方案是检查像boost :: spirit :: qi这样的解析器,这个解决方案很好用,可以提供极其有用的结果。
答案 3 :(得分:0)
您可以创建一个表示已解析的表达式树的数据结构,与每次解析字符串相比,在运行时评估它的开销会很小。
实际上在C ++中获取可调用方法将非常困难,因为您必须生成目标代码并将其动态加载到程序中。这将复制整个编译器工具链的许多内容。