我可以使用Boost.Spirit进行多功能数学(AST)模式匹配和操作吗?

时间:2016-01-10 20:51:34

标签: c++ boost c++14 boost-spirit boost-spirit-karma

我正在研究C ++中的模式匹配,以及Mach7之类的问题,这似乎是问题的一种功能性方法,而更普遍的Visitor Pattern似乎是最常见的分母:它可以做任何事情,但只在特定情况下表现优异。

我想操纵数学表达式(简化,评估,并执行微分方程求解和符号化积分等计算)。是的,我希望最终得到一个计算机代数系统。 对于输入,我正在考虑使用Boost.Spirit(X3)来解析某种形式的输入(当前正在玩那里获得基本的LaTeX支持,尽管index vs sub / superscript是这个问题......)。 / p>

然后我开始疯狂地使用 Boost.Spirit 来解析输入“text”,但也使用库的非解析器组件来实际执行数学操作得到的AST。 这种多功能性足以满足我的目标所需的模式匹配吗?或者我应该查看其他解决方案吗?我试图找到其他CAS如何在内部工作的文档,但是没有经历过毫无疑问的精彩代码像Maxima一样,除了非常简单的数学AST实现之外,我似乎无法找到任何信息。所以我几乎没有输入信息来确定Boost.Spirit是否可以做我最终需要做的事情。

1 个答案:

答案 0 :(得分:4)

我没有资格就符号代数和那里的要求提出建议。

然而知道关于Boost Spirit的一两件事。

我只能说:不要这样做!

你不想让解析器承担如此复杂的责任,这些责任在EDSL和Phoenix演员的“扭曲”现实中更难以设计。

事实上,我已经重复了这个建议(参见例如Boost Spirit: "Semantic actions are evil"?,这是最相关的,但我已经在几个聊天室加深了它,有时在答案中似乎问题似乎将解析与处理混为一谈。