Mathematica语法的解析器?

11

有没有一种可以从C#中使用的内置解析器来解析Mathematica表达式?

我知道我可以使用Kernel本身来解析表达式,并使用.NET/Link检索树形结构...但我正在寻找不依赖于Kernel的东西。


也许有人用ANTLR写了一个解析器? - Nestor
1
有一个Mathematica解析器(至少在http://www.cs.berkeley.edu/~fateman/上有一个描述),但它是用Common Lisp编写的,据我所知,它没有CLR/.NET实现。 - Pillsy
3个回答

6

我的matheclipse-parser模块是用Java实现的解析器,可以解析数学表达式的大子集。请查看readme.md页面获取使用信息。也许您可以将解析器移植到C#?


1

Mathematica语法并没有很好的文档记录,这是事实。但据我所知,它是LALR(1)和可能是LL(1);来自方括号/标记语法为解析器提供了关于下一步要期望什么的完整线索,就像LISP和XML一样。

DMS软件重构工具包确实有一个Mathematica语法,已经用于实际任务。这包括MMa程序以及纯表达式形式。

这可能对您没有帮助,因为您想要一个C#语法。

如果您可以访问内核,我建议坚持使用它。


0

我不认为这样的东西已经存在(如果有的话,我很想知道)。但是在Mathematica中,您可以将函数FullForm应用于任何表达式,并获得非常容易解析的内容,类似于Lisp中的s表达式。例如:

FullForm[a+b*c]

产生

Plus[a, Times[b,c]]

这是所有Mathematica表达式的基础表示形式,应该很容易解析。


是的,但我需要内核才能做到。不管怎样...我认为你是对的。似乎不存在这样的解析器。问题的一部分是该语言没有公开的语法。我也听说过这种语言无法使用LALR解析器进行解析。 - Nestor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接