Parser per la sintassi di Mathematica?
-
05-07-2019 - |
Domanda
Esiste un parser integrato che posso usare da C # in grado di analizzare le espressioni matematiche?
So che posso usare il kernel stesso per analizzare un'espressione e usare .NET / Link per recuperare la struttura ad albero ... Ma sto cercando qualcosa che non si basa sul kernel.
Soluzione
Il mio modulo matheclipse-parser implementa un parser in Java che può analizzare un grande sottoinsieme di espressioni matematiche. Vedere la pagina readme.md per l'utilizzo. Forse puoi portare il parser su C #?
Altri suggerimenti
Ho scritto un parser Mathematica in 300 righe di codice OCaml sotto contratto per Wolfram Research e l'ho trovato abbastanza semplice perché la grammatica è chiaramente documentato nella loro letteratura e qualsiasi ambiguità si trova facilmente giocando con la stessa Mathematica.
La grammatica della matematica non è ben documentata, vero. Ma AFAIK, lo è LALR (1) e probabilmente LL (1); la sintassi tra parentesi / taggata da fornisce al parser indizi completi su cosa aspettarsi dopo, proprio come LISP e XML.
Il DMS Software Reengineering Toolkit ha una grammatica Mathematica che è stata utilizzata per compiti reali. Ciò include i programmi MMa e pure le forme di espressione.
Questo probabilmente non ti aiuta, dal momento che ne vuoi uno in C #.
Se hai accesso a Kernal, mi atterrei a questo.
Non credo che esista già una cosa del genere (mi piacerebbe saperlo). Ma può essere utile che all'interno di Mathematica sia possibile applicare la funzione FullForm
a qualsiasi espressione e ottenere qualcosa di molto facile da analizzare, un po 'come una s-espressione in Lisp. Ad esempio,
FullForm[a+b*c]
rendimenti
Plus[a, Times[b,c]]
Questa è la rappresentazione di base di tutte le espressioni di Mathematica e dovrebbe essere semplice da analizzare.