我可以使用 Boost.Spirit 进行通用数学 (AST) 模式匹配和操作吗?
Can I do versatile mathematical (AST) pattern matching and manipulation with Boost.Spirit?
我正在研究 C++ 中的模式匹配,其中包括 Mach7, which seems to be a functional approach to the problem, and the more general Visitor Pattern,这似乎是最小的公分母:它无所不能,但只在特定情况下表现出色。
我想操纵数学表达式(化简、求值,并以符号方式执行微分方程求解和积分等计算)。是的,我希望最终得到一个计算机代数系统。
对于输入,我正在考虑使用 Boost.Spirit (X3) 来解析某种形式的输入(目前正在那里获得基本的 LaTeX 支持,尽管索引与 sub/superscript 是一个问题.. .).
然后我想到了一个疯狂的想法,即使用 Boost.Spirit 不仅解析输入 "text",还使用非解析器组件实际对生成的 AST 执行数学操作的库。
这个功能是否足以满足我的目标要求的模式匹配,或者我应该看看其他解决方案吗?我试图找到关于其他 CAS 如何在内部工作的文档,但没有经历过毫无疑问的精彩Maxima 之类的代码,除了数学 AST 的非常简单的实现之外,我似乎找不到任何关于任何东西的信息。所以我几乎没有输入信息来确定 Boost.Spirit 是否可以做我最终需要做的事情。
我没有资格就符号代数的主题和那里的要求提出建议。
我确实但是对Boost Spirit略知一二。
我只能说:千万别做!
您不想让解析器承担如此复杂的责任,这些责任只会在 "warped" EDSL 和 Phoenix actors 的现实中更加难以设计。
事实上,我经常重复这个建议(参见例如 Boost Spirit: "Semantic actions are evil"?,这是最相关的,但我在几个聊天室中加深了它,有时在问题的答案中似乎是将解析与处理混为一谈。
我正在研究 C++ 中的模式匹配,其中包括 Mach7, which seems to be a functional approach to the problem, and the more general Visitor Pattern,这似乎是最小的公分母:它无所不能,但只在特定情况下表现出色。
我想操纵数学表达式(化简、求值,并以符号方式执行微分方程求解和积分等计算)。是的,我希望最终得到一个计算机代数系统。 对于输入,我正在考虑使用 Boost.Spirit (X3) 来解析某种形式的输入(目前正在那里获得基本的 LaTeX 支持,尽管索引与 sub/superscript 是一个问题.. .).
然后我想到了一个疯狂的想法,即使用 Boost.Spirit 不仅解析输入 "text",还使用非解析器组件实际对生成的 AST 执行数学操作的库。 这个功能是否足以满足我的目标要求的模式匹配,或者我应该看看其他解决方案吗?我试图找到关于其他 CAS 如何在内部工作的文档,但没有经历过毫无疑问的精彩Maxima 之类的代码,除了数学 AST 的非常简单的实现之外,我似乎找不到任何关于任何东西的信息。所以我几乎没有输入信息来确定 Boost.Spirit 是否可以做我最终需要做的事情。
我没有资格就符号代数的主题和那里的要求提出建议。
我确实但是对Boost Spirit略知一二。
我只能说:千万别做!
您不想让解析器承担如此复杂的责任,这些责任只会在 "warped" EDSL 和 Phoenix actors 的现实中更加难以设计。
事实上,我经常重复这个建议(参见例如 Boost Spirit: "Semantic actions are evil"?,这是最相关的,但我在几个聊天室中加深了它,有时在问题的答案中似乎是将解析与处理混为一谈。