2

我正在研究 C++ 中的模式匹配,以及诸如Mach7之类的东西,这似乎是解决问题的一种功能性方法,以及更通用的Visitor Pattern,这似乎是最小的公分母:它可以做任何事情,但只擅长具体案例。

我想操作数学表达式(简化,评估,并执行计算,如微分方程求解和积分,象征性地)。是的,我希望最终得到一个计算机代数系统。对于输入,我正在考虑使用 Boost.Spirit (X3) 来解析某种形式的输入(目前正在那里获得基本的 LaTeX 支持,尽管索引与子/上标是一个问题......)。

然后我想到了使用Boost.Spirit不仅解析输入的“文本”,还使用库的非解析器组件对生成的 AST 实际执行数学操作的疯狂想法。 这是否足以满足我的目标所需的模式,还是我应该看看其他解决方案?我试图找到关于其他 CAS 如何在内部工作的文档,但是没有通过像Maxima这样的毫无疑问的出色代码,除了非常简单的数学 AST 实现之外,我似乎找不到任何信息。所以我几乎没有输入信息来确定 Boost.Spirit 是否可以做我最终需要做的事情。

4

1 回答 1

4

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

不过,我确实对 Boost Spirit 有所了解。

我只能说:不要这样做!

您不想让解析器承担如此复杂的职责,这些职责在 EDSL 和 Phoenix actor 的“扭曲”现实中将变得更加难以设计。

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

于 2016-01-10T21:12:50.093 回答