Парсер для синтаксиса Mathematica? - PullRequest
11 голосов
/ 22 октября 2009

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

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

Ответы [ 4 ]

17 голосов
/ 14 февраля 2010

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

6 голосов
/ 24 октября 2009

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

1 голос
/ 26 октября 2009

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

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

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

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

0 голосов
/ 22 октября 2009

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

FullForm[a+b*c]

выходы

Plus[a, Times[b,c]]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...