2009-10-22 8 views
11

Y a-t-il un analyseur intégré que je peux utiliser à partir de C# qui peut analyser des expressions mathematica?Analyseur pour la syntaxe Mathematica?

Je sais que je peux utiliser le noyau lui-même pour analyser une expression, et utiliser .NET/Link pour récupérer l'arborescence ... Mais je cherche quelque chose qui ne repose pas sur le noyau.

+0

Peut-être que quelqu'un a écrit un analyseur dans ANTLR? – Nestor

+1

Il existe un analyseur Mathematica (au moins une description est liée à http://www.cs.berkeley.edu/~fateman/) mais il est écrit en Common Lisp, qui, pour autant que je sache, n'a pas une implémentation CLR/.NET. – Pillsy

Répondre

6

Mon matheclipse-parser module implémente un analyseur en Java qui peut analyser un grand sous-ensemble d'expressions Mathematica. Voir la page readme.md pour l'utilisation. Peut-être que vous pouvez porter l'analyseur à C#?

0

Je ne pense pas qu'une telle chose existe déjà (j'aimerais savoir à ce sujet). Mais il peut être utile que dans Mathematica vous puissiez appliquer la fonction FullForm à n'importe quelle expression et obtenir quelque chose d'très facile à analyser, un peu comme une expression s dans Lisp. Par exemple,

FullForm[a+b*c] 

cède

Plus[a, Times[b,c]] 

C'est la représentation sous-jacente de toutes les expressions Mathematica et devrait être facile à analyser.

+0

Oui .. mais pour cela j'ai besoin du noyau. De toute façon ... je pense que tu as raison. Un tel analyseur ne semble pas exister. Une partie du problème est qu'il n'y a pas de grammaire publiée pour la langue. J'ai également entendu que la langue ne peut pas être analysée avec un analyseur LALR. – Nestor

1

La grammaire Mathematica est pas bien documenté, vrai. Mais AFAIK, c'est LALR (1) et vraisemblablement LL (1); La syntaxe bracketed/tagged de donne à l'analyseur des indices complets sur ce à quoi il faut s'attendre par la suite, tout comme LISP et XML.

Le DMS Software Reengineering Toolkit a une grammaire Mathematica qui a été utilisé pour des tâches réelles. Ceci inclut les programmes MMa ainsi que les formes d'expression pures.

Cela ne probablement pas vous aider, puisque vous voulez un en C#.

Si vous avez accès au Kernel, je tenir à cela.

16

J'ai écrit un analyseur Mathematica dans 300 lignes de code OCaml sous contrat pour Wolfram Research et je l'ai trouvé très facile parce que la grammaire est clearly documented in their literature et toutes les ambiguïtés sont facilement trouvées en jouant avec Mathematica lui-même.

+0

Vraiment? Intéressant. Pourquoi voudraient-ils un parseur pour leur langue? Ils ont déjà ça, n'est-ce pas? – Nestor

+2

Leur analyseur Mathematica écrit en C était environ 100x plus long que mon analyseur Mathematica écrit en OCaml. À l'époque, ils construisaient le noyau de Wolfram Workbench qui contient des réécritures en Java d'une grande partie de la source C originale de Mathematica, y compris son analyseur, et ils étaient particulièrement intéressés par toutes les techniques qui pourraient être utilisées pour le simplifier. –

+0

C'est fascinant Jon. Merci d'avoir partagé. Vous devriez réécrire l'analyseur dans ANTLR et le partager avec nous :-) (BTW, je ne vous ai pas downvote) – Nestor