2009-10-22 56 views
11

是否有可以從C#中使用的可以解析mathematica表達式的內置解析器?解析器爲Mathematica語法?

我知道我可以使用內核本身來解析表達式,並使用.NET/Link來檢索樹結構......但是我正在尋找一些不依賴於內核的東西。

+0

也許有人在ANTLR中寫了一個解析器? – Nestor 2009-10-22 17:01:40

+1

這裏有一個Mathematica解析器(至少有一個描述鏈接在http://www.cs.berkeley.edu/~fateman/),但它是用Common Lisp編寫的,據我所知,它沒有一個CLR/.NET實現。 – Pillsy 2009-10-23 02:55:36

回答

6

我的matheclipse-parser module在Java中實現了一個解析器,它可以解析mathematica表達式的一個大子集。請參閱readme.md頁面以瞭解使用情況。也許你可以將解析器移植到C#中?

0

我不認爲這樣的事情已經存在(我很想知道它)。但是,在Mathematica中,可以將函數FullForm應用於任何表達式並獲得非常容易解析的內容,這在Lisp中就像s表達式一樣。例如,

FullForm[a+b*c] 

產生

Plus[a, Times[b,c]] 

這是所有Mathematica表達式的基本表示和應該是簡單的解析。

+0

是的..但爲此我需要內核。反正......我認爲你是對的。這樣的解析器似乎不存在。部分問題是沒有發佈該語言的語法。我也聽說這個語言不能用LALR解析器解析。 – Nestor 2009-10-22 17:54:38

1

數學語法沒有很好的記錄,是真的。但是AFAIK,它是 LALR(1)並且可能是LL(1);括號/標記的語法給出瞭解析器完整的線索 關於接下來會發生什麼,就像LISP和XML一樣。

DMS Software Reengineering Toolkit確實有一個Mathematica語法已用於實際任務。 這包括MMa程序以及純粹的表達形式。

這可能不會幫助你,因爲你想要一個在C#中。

如果你有權訪問Kernal,我會堅持。

16

我寫了300線的合同爲沃爾夫勒姆研究OCaml的代碼數學解析器和發現它是很容易的,因爲語法clearly documented in their literature任何含糊之處很容易被利用Mathematica本身玩發現。

+0

真的嗎?有趣。他們爲什麼要爲他們的語言使用解析器?他們已經擁有了,不是嗎? – Nestor 2010-02-14 19:55:45

+2

用C編寫的Mathematica解析器比用OCaml編寫的Mathematica解析器長100倍。當時,他們正在構建Wolfram Workbench的核心,其中包含了Mathematica原始C源代碼(包括其解析器)在Java中的重寫,他們對可用於簡化它的任何技術特別感興趣。 – 2010-02-18 08:38:28

+0

這是令人着迷的喬恩。感謝分享。你應該重寫ANTLR中的解析器,並與我們分享:-)(順便說一下,我沒有downvote你) – Nestor 2010-02-18 17:48:40