Parser для синтаксиса Mathematica?

Есть ли встроенный синтаксический анализатор, который я могу использовать из С#, который может анализировать математические выражения?

Я знаю, что я могу использовать сам ядро ​​для анализа выражения и использовать .NET/Link для извлечения древовидной структуры... Но я ищу что-то, что не полагается на ядро.

Ответ 1

Мой модуль matheclipse-parser реализует парсер в Java, который может анализировать большой подмножество математических выражений. См. Страницу readme.md для использования. Может быть, вы можете переносить парсер на С#?

Ответ 2

Я написал парсер Mathematica в 300 строках кода OCaml по контракту для Wolfram Research и нашел, что это довольно легко, потому что грамматика четко задокументирована в их литературе, и любые двусмысленности легко найти, играя с самой Mathematica.

Ответ 3

Математическая грамматика плохо документирована, правда. Но AFAIK, это LALR (1) и, вероятно, LL (1); синтаксис с заключенным в квадратные скобки/тегом, дает полный ключ анализатора о том, чего ожидать дальше, точно так же, как LISP и XML.

DMS Software Reengineering Toolkit имеет грамматику Mathematica, которая использовалась для реальных задач. Это включает в себя программы MMa, а также формы чистого выражения.

Это, вероятно, вам не поможет, так как вы хотите его на С#.

Если у вас есть доступ к Kernal, я буду придерживаться этого.

Ответ 4

Я не думаю, что такая вещь уже существует (мне бы хотелось узнать об этом). Но может быть полезно, что в Mathematica вы можете применить функцию FullForm к любому выражению и получить что-то очень простое, например, как s-выражение в Lisp. Например,

FullForm[a+b*c]

дает

Plus[a, Times[b,c]]

Это базовое представление всех выражений Mathematica и должно быть просто проанализировано.