2009-10-22 20 views
11

Gibt es einen gebauten Parser, den ich aus C# verwenden kann, der Mathematica-Ausdrücke parsen kann?Parser für die Mathematica-Syntax?

Ich weiß, dass ich den Kernel selbst verwenden kann, um einen Ausdruck zu analysieren, und verwenden Sie .NET/Link, um die Baumstruktur abzurufen ... Aber ich bin auf der Suche nach etwas, das nicht auf den Kernel angewiesen ist.

+0

Vielleicht schrieb jemand einen Parser in ANTLR? – Nestor

+1

Es gibt einen Mathematica-Parser da draußen (zumindest eine Beschreibung ist verlinkt bei http://www.cs.berkeley.edu/~fateman/), aber es ist in Common Lisp geschrieben, das, soweit ich weiß, nicht hat eine CLR/.NET-Implementierung. – Pillsy

Antwort

6

Meine matheclipse-parser module implementiert einen Parser in Java, der eine große Teilmenge von mathematischen Ausdrücken analysieren kann. Weitere Informationen finden Sie auf der Seite readme.md. Vielleicht können Sie den Parser nach C# portieren?

0

Ich glaube nicht, dass so etwas schon existiert (ich würde gerne darüber wissen). Aber es kann nützlich sein, dass Sie innerhalb von Mathematica die Funktion FullForm auf jeden Ausdruck anwenden können und etwas leicht zu parsen bekommen, ähnlich wie ein s-Ausdruck in Lisp. Zum Beispiel

FullForm[a+b*c] 

ergibt

Plus[a, Times[b,c]] 

dass die zugrunde liegende Darstellung aller Mathematica Ausdrücke ist und sollte zu analysieren unkompliziert sein.

+0

Ja .. aber dafür brauche ich den Kernel. Wie auch immer ... Ich denke du hast Recht. Ein solcher Parser scheint nicht zu existieren. Teil des Problems ist, dass es keine veröffentlichte Grammatik für die Sprache gibt. Ich habe auch gehört, dass die Sprache nicht mit einem LALR-Parser analysiert werden kann. – Nestor

1

Die mathematische Grammatik ist nicht gut dokumentiert, stimmt. Aber AFAIK ist es LALR (1) und wahrscheinlich LL (1); die Klammern/getaggte Syntax aus gibt dem Parser vollständige Hinweise darüber, was als nächstes zu erwarten ist, genau wie LISP und XML.

Die DMS Software Reengineering Toolkit hat eine Mathematica-Grammatik, die für echte Aufgaben verwendet wurde. Dies umfasst MMa-Programme sowie reine Ausdrucksformen.

Das hilft dir wahrscheinlich nicht, da du eins in C# willst.

Wenn Sie Zugang zum Kernal haben, würde ich dabei bleiben.

16

Ich schrieb einen Mathematica-Parser in 300 Zeilen OCaml-Code unter Vertrag für Wolfram Research und fand es ziemlich einfach, weil die Grammatik clearly documented in their literature ist und alle Zweideutigkeiten leicht durch Spielen mit Mathematica selbst gefunden werden können.

+0

Wirklich? Interessant. Warum sollten sie einen Parser für ihre Sprache haben wollen? Das haben sie schon, oder? – Nestor

+2

Ihr in C geschriebener Mathematica-Parser war etwa 100x länger als mein in OCaml geschriebener Mathematica-Parser. Zu dieser Zeit bauten sie den Kern von Wolfram Workbench auf, der in Java einen Großteil der ursprünglichen C-Quelle von Mathematica einschließlich seines Parsers überschreibt, und sie waren besonders an allen Techniken interessiert, die zur Vereinfachung verwendet werden könnten. –

+0

Das ist faszinierend Jon. Danke für das Teilen. Du solltest den Parser in ANTLR umschreiben und ihn mit uns teilen :-) (BTW, ich habe dich nicht runtergelinkt) – Nestor