2009-10-22 17 views
11

¿Hay un analizador integrado que pueda usar de C# que pueda analizar expresiones de mathematica?Analizador para la sintaxis de Mathematica?

Sé que puedo usar el Kernel mismo para analizar una expresión y usar .NET/Link para recuperar la estructura de árbol ... Pero estoy buscando algo que no dependa del Kernel.

+0

¿Quizás alguien escribió un analizador en ANTLR? – Nestor

+1

Hay un analizador de Mathematica (al menos una descripción está vinculada a http://www.cs.berkeley.edu/~fateman/) pero está escrito en Common Lisp, que, hasta donde sé, no tiene una implementación de CLR/.NET. – Pillsy

Respuesta

6

Mi matheclipse-parser module implementa un analizador en Java que puede analizar un gran subconjunto de expresiones mathematica. Consulte la página readme.md para conocer su uso. ¿Tal vez puedas transferir el analizador sintáctico a C#?

0

No creo que tal cosa ya exista (me gustaría saberlo). Pero puede ser útil que dentro de Mathematica pueda aplicar la función FullForm a cualquier expresión y obtener algo muy fácil de analizar, como una expresión s en Lisp. Por ejemplo,

FullForm[a+b*c] 

produce

Plus[a, Times[b,c]] 

Esa es la representación subyacente de todas las expresiones de Mathematica y debe ser fácil de analizar.

+0

Sí ... pero para eso necesito el Kernel. De todos modos ... creo que tienes razón. Tal analizador no parece existir. Parte del problema es que no hay gramática publicada para el idioma. También escuché que el lenguaje no se puede analizar con un analizador LALR. – Nestor

1

La gramática de las matemáticas no está bien documentada, es verdad. Pero AFAIK, es LALR (1) y probablemente LL (1); la sintaxis entre corchetes/etiquetados proporciona al analizador pistas completas sobre qué esperar a continuación, al igual que LISP y XML.

tiene una gramática de Mathematica que se ha utilizado para tareas reales. Esto incluye programas MMa, así como formas de expresión pura.

Eso probablemente no lo ayude, ya que quiere uno en C#.

Si tiene acceso al Kernal, me apegaré a eso.

16

Escribí un analizador de Mathematica en 300 líneas de código OCaml bajo contrato para Wolfram Research y encontré que es bastante fácil porque la gramática es clearly documented in their literature y cualquier ambigüedad se encuentra fácilmente al jugar con Mathematica.

+0

¿De verdad? Interesante. ¿Por qué querrían un analizador de su lenguaje? Ellos ya tienen eso, ¿no? – Nestor

+2

Su analizador de Mathematica escrito en C era aproximadamente 100 veces más largo que mi analizador de Mathematica escrito en OCaml. En ese momento, estaban construyendo el núcleo de Wolfram Workbench, que contiene reescrituras en Java de gran parte de la fuente C original de Mathematica, incluido su analizador sintáctico, y estaban particularmente interesados ​​en cualquier técnica que pudiera usarse para simplificarla. –

+0

Eso es fascinante Jon. Gracias por compartir. Deberías reescribir el analizador en ANTLR y compartirlo con nosotros :-) (Por cierto, no te devolví) – Nestor