11
votes

Analyseur pour la syntaxe Mathematica?

Y a-t-il un analyseur construit que je peux utiliser de C # qui peut analyser les expressions Mathematica?

Je sais que je peux utiliser le noyau lui-même pour analyser une expression et utiliser .NET / lien pour récupérer la structure de l'arborescence ... mais je cherche quelque chose qui ne dépend pas du noyau.


2 commentaires

Peut-être que quelqu'un a écrit un analyseur à Antlr?


Il existe un analyseur Mathematica (au moins une description est liée à cs.berkeley.edu/~ Fateman ) mais il est écrit dans la LISP commune, qui, autant que je sache, n'a pas de mise en œuvre CLR / .NET.


3 Réponses :


0
votes

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

rendements xxx

C'est la représentation sous-jacente de toutes les expressions Mathematica et devrait être simple à analyser. < / p>


1 commentaires

Oui .. Mais pour cela, j'ai besoin du noyau. Quoi qu'il en soit ... Je pense que vous avez raison. Cet 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 dire que la langue ne peut pas être analysée d'un analyseur Lalr.



6
votes

mon Module Matheclipse-Parser implémente un analyseur en Java qui peut analyser un grand sous-ensemble de expressions mathématiques. Voir la page README.MD pour l'utilisation. Peut-être que vous pouvez porter l'analyseur à c #?


0 commentaires

1
votes

La grammaire Mathematica n'est pas bien documentée, vraie. Mais afaik, c'est Lalr (1) et probablement ll (1); La syntaxe entre crochets / marquée de donne les indices complets d'analyse sur ce à quoi s'attendre ensuite, tout comme Lisp et XML.

the Toolkit de réengagement logiciel DMS a une grammaire mathématique qui a été utilisée pour vraies tâches. Cela inclut les programmes MMA ainsi que des formulaires d'expression pure.

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

Si vous avez accès au Kernal, je m'en tenir à cela.


0 commentaires