2010-06-04 5 views
6

Учитывая некоторое содержание MathML:Как оценивать выражения MathML?

<apply> 
    <eq/> 
    <ci>c</ci> 
    <apply> 
    <plus/> 
    <ci>a</ci> 
    <ci>b</ci> 
    </apply> 
</apply> 

и

std::map<std::string,std::double> cal; 
cal["a"] = 1.; 
cal["b"] = 2.; 
cal["c"] = 0; // does not matter what c is 

Я хочу, чтобы оценить MathML и получить результаты. Есть какой-либо способ сделать это?

+0

Я спрашиваю об этом, потому что я не хочу изобретать велосипед. Я вполне уверен в том, что сам это кодирую. Предложения по возможным реализациям не требуются. – sep

+0

Презентация не требуется. Мне нужно только оценить. – sep

+0

Может ли кто-нибудь предложить библиотеку оценки математики C/C++, на которую я могу зайти, даже если она не обрабатывает MathML? – sep

ответ

3

MathML имеет как смысловую, так и презентационную надбавку. Таким образом, общий анализатор MathML для оценки невозможен.

Я не знаю о фактической реализации, некоторые быстрые поисковые запросы не нашли никаких разумных результатов, но в основном это сводится к написанию вашего польского интерпретатора выражений (как пример, который вы дали, в польской нотации). Шаги:

  1. получить XML-парсер и прочитать в документе
  2. прогулки по дереву
  3. , если вы столкнулись с известной операцией или элементом, вытолкнуть его на стеке
  4. когда Подвыражение завершено , проанализируйте его (или лучше: дождитесь окончания всего выражения, ищите последнюю операцию, выполните ее с количеством аргументов, которые ее аргументы предписывают, и выполняйте это до тех пор, пока не останутся никакие операции)

В конце вы получите результат в стеке.

0

Один из способов - найти компьютерную алгебраическую систему (CAS), которая может импортировать математику. К сожалению, несмотря на то, что множество программ экспортирует математику, почти никто ее не читает. Вот некоторые ссылки на несколько Cas систем:

CasADi (не строго CAS, но может вычислять выражения): https://sourceforge.net/apps/trac/casadi/ticket/149

SymPy: http://code.google.com/p/sympy/issues/detail?id=2971

Matlab/MuPAD: http://www.mathworks.nl/help/toolbox/mupad/generate/MathML.html

Смежные вопросы