继续挑战:将数学序列化以投影到C#和Javascript

继续挑战:将数学序列化以投影到C#和Javascript,c#,javascript,serialization,C#,Javascript,Serialization,我问了一些与此相关的问题,但从不同的角度。我正在尝试另一种方法 所讨论的设计涉及一个系统,在该系统中,客户能够在系统中创建各种实体,并根据需要构建数学公式,以某种有意义的方式将这些实体连接在一起。这是一个重要的区别,因为这些实体在设计时不存在 然后,客户机可能会创建一些实体。a、 b,c,n,r和x。 因此,客户可能会说“我需要a等于[b+c](n*r)+[x]” a、 b、c、n、r和x对客户来说都是有意义的。它们在客户端正在查看的内容的上下文中具有名称和值。但对于底层系统来说,它们在设计时并

我问了一些与此相关的问题,但从不同的角度。我正在尝试另一种方法

所讨论的设计涉及一个系统,在该系统中,客户能够在系统中创建各种实体,并根据需要构建数学公式,以某种有意义的方式将这些实体连接在一起。这是一个重要的区别,因为这些实体在设计时不存在

然后,客户机可能会创建一些实体。a、 b,c,n,r和x。 因此,客户可能会说“我需要a等于[b+c](n*r)+[x]”

a、 b、c、n、r和x对客户来说都是有意义的。它们在客户端正在查看的内容的上下文中具有名称和值。但对于底层系统来说,它们在设计时并不存在,所以这个公式不存在

那么,有没有办法把这个等式序列化,这样它就可以反序列化,并针对给定的变量列表执行呢?我正在使用C#、ASP.NETMVC、RavenDB和JavaScript


方程式将由软件管理员定义,并与每个用户相关。它们需要存储在数据库中,这样才能在服务器端和客户端执行。

我认为还不清楚您的确切意思,但根据客户端的情况,您必须在那里或在服务器上对其进行解析。如果客户机对公式做了一些奇怪的事情,请在客户机上对其进行解析,并将其作为解析后的表达式树发送回服务器。如果没有,则将其作为字符串发送到服务器并在那里进行解析。

您需要定义语法(一种表示您需要表示的内容的小型语言),将表达式保存为raven中的文本,为每种有问题的语言编写解析器和代码生成器

解析器获取表达式并将其转换为“抽象语法树”

代码生成器获取“抽象语法树”,并将其转换为本机可执行代码。您需要为C#和JavaScript单独使用一个生成器,具体取决于执行表达式的位置

在高层,您可以通过将脚本语言嵌入.Net(如IronPython)来实现这一点。您可能会更好地这样做,因为上面的工作是不平凡的

如果你想以艰难的方式完成这项任务,请购买这些并阅读:


这些年来,我写了许多“迷你语言”,它们的设计并不简单。

听起来你在寻找数学表达式的公式解析器

服务器端,您可以使用,虽然您可以在客户端使用JavaScript函数,但为了对输入字符串有相同的解释,您应该考虑使用JavaScript(或jQuery)调用的WebService,只需解析服务器上的客户端公式。


顺便说一句,NCalc甚至可以解析定制的表达式。

我感觉这正是创建的目的


在将表达式发送到服务器之前,尝试使用将其序列化为MathML文档,然后使用C#MathML库在服务器上反序列化(我无法命名任何库)。

是的,但我想问是否有人知道进行上述解析的方法。它需要保存到数据库中。但由于公式对其运行的上下文非常敏感,因此无法使用硬编码值存储。如果我理解正确,最困难的部分不是序列化,而是找到一种方法来计算stringYes表示的数学语句。这将是一个准确的评估。我能麻烦你详细说明嵌入脚本语言的想法吗?当然,我不熟悉这样做。下面的链接中有一个关于如何嵌入和使用脚本语言的示例。它在数学方面也有描述:谢谢你,这将非常有帮助。我将首先尝试NCalc,但如果它不起作用,我的下一个地方就是完整的脚本嵌入。祝你好运:)如果你需要任何帮助,请随时再次发布这个问题。这样我就可以在我的数据库中有“x+y+(n*r)”,然后列出可以找到x、y、n和r的位置,让它打开x、y、n和r,插入它们,然后在执行时执行计算?但要注意数学精度和JavaScript——这是出了名的问题。是的,我认为不可能想出一个同时适用于C#和JavaScript的解决方案。我将接受有关使用类似于控制器的服务来处理服务器端的计算的建议,然后通过ajax将它们返回给JS。我实际上查看了MathML,但我得到的印象是,它更多的是显示公式,而不是实际计算公式。