【发布时间】:2011-07-15 22:51:07
【问题描述】:
我必须评估大量包含变量的表达式,并且我正在考虑编写一个小型自定义解释器以保持编译的快速和小型化。但是我对这个主题没有经验,并且有几个问题。
假设我们有一个包含数学表达式和一组有限对象的文件。该文件可能如下所示:
expr[x,y,z] = 2*x*y + x^2 + 28/14*z*(x*y^2 + 15*z) + ...
我想以某种方式解析它,以便我可以在我的应用程序中对表达式进行数值计算
只需调用函数expr(float x, float y, float z)。参数的数量不应该是固定的(EDIT -: 每个表达式都有自己的定义和适当数量的参数,或者接受一个数组)并且应该允许括号嵌套以保留输入文件相当小。
由于表达式都是多项式类型,我可以想到数据结构应该是什么样子,但是解析看起来很困难。我已经在 SO 上找到了一些类似问题的答案,例如使用Lua。
然而,最大的问题是,与直接从自动生成的 C 代码编译这些表达式相比,创建和调用这些对象时的性能损失是多少。
提前致谢!
EDIT -: 请仅考虑上述expr() 的示例。我想最好的方法是让模板类的对象保存稀疏数组中变量的系数和幂。
【问题讨论】:
-
"调用函数 expr(float x, float y, float z)。参数的数量不应该是固定的" - 那么你有一点问题,因为数字C 或 C++ 函数调用中的参数数量是固定的。即使使用可变参数,被调用者可以处理不同的数字,调用者也必须在编译时修复数字。您可能需要传递一个数组。
-
@Steve Jessop:已解决,我知道这一点。
-
你为什么不把你的函数表达式写成一个C函数,然后编译/运行呢?
标签: c++ c parsing interpreter