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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top