Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

FullForm[a+b*c]

урожайность

Plus[a, Times[b,c]]

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top