Я разрабатываю в Python в течение нескольких лет теперь. Недавно я должен был перечислить все файлы в каталоге и создать структуру с именем файла, размером, атрибутами и датой модификации. Я сделал это с os.listdir
и os.stat
. Код был довольно быстр, но чем больше записей в каталогах, тем медленнее мой код стал сравненным с другим filemanagers список того же каталога, таким образом, я переписал код с помощью БОЛЬШОГО ГЛОТКА/C++ и был действительно удивлен, насколько быстрее код был.
Мой модуль matheclipse-parser реализует синтаксический анализатор на Java, который может анализировать большое подмножество математических выражений. См. Страницу readme.md для использования. Может парсер портировать на C #?
Я не думаю, что такое уже существует (я очень хотелось бы знать об этом). Но может быть полезно, что в Mathematica вы можете применить функцию FullForm
к любому выражению и получить что-то очень легкое для анализа, вроде s-выражения в Lisp. Например,
FullForm[a+b*c]
дает
Plus[a, Times[b,c]]
Это базовое представление всех выражений в системе Mathematica и должно быть простым для синтаксического анализа.
Грамматика математики плохо документирована, правда. Но AFAIK, это LALR (1) и, вероятно, LL (1); заключенный в скобки / помеченный синтаксис из дает синтаксическому анализатору полные подсказки о том, чего ожидать дальше, точно так же, как LISP и XML.
В DMS Software Reengineering Toolkit действительно есть грамматика Mathematica, которая использовалась для реальных задач. Это включает в себя программы MMa, а также чистые формы выражений.
Это, вероятно, не поможет вам, так как вам нужна одна на C #.
Если у вас есть доступ к ядру, я бы придерживался этого.
Я написал синтаксический анализатор Mathematica на 300 строках кода OCaml по контракту с Wolfram Research и обнаружил, что это довольно легко, поскольку грамматика четко задокументирована в их литературе , и любые двусмысленности легко найти, поиграв с самой Mathematica.