Я хочу читать файлы, написанные с использованием функции «Сохранить» в системе Mathematica. Внутри это выражения, которые я хотел бы перевести на lua.
Например: mathematica -> lua
foo[bar_]:= a*bar + b -> function foo(bar) return a*bar + b end
foo[bar_]= a*bar + b -> foo[bar] = a*bar + b
foo = N[bar] -> foo = bar
Pi or \[Pi] or -> math.pi
-7.809692029744407*^-8 -> -7.809692029744407e-8
2.7067*^-8 + 2.268*^-8*I -> 2.7067e-8 + 2.268e-8*math.i
Это не обязательно сложная проблема, мне просто нужно выучить регулярные выражения lua. Но их много (не упомянутых выше) случаев, которые нужно учитывать, и я не хочу «изобретать велосипед». Может мне стоит < / a>, вы бы сказали ...
Но в любом случае, есть ли библиотека lua или проект, посвященный этому?
2 ответа
Я не знаю, что уже сделано в этом направлении, но я бы порекомендовал вам подумать о создании переводчика Mathematica to Lua в Mathematica, что-то вроде «LuaForm», сохраняющего свой вывод в текстовый файл. Он будет использовать существующие блоки, такие как FortranForm / CForm, для преобразования основных выражений (таких как числа и алгебраические комбинации переменных), и вы можете добавлять новые правила по мере использования дополнительных функций Mathematica.
CForm /@ {Pi, \[Pi], a b+3x, -7.809692029744407*^-8, 2.7067*^-8 + 2.268*^-8*I}
{Pi,Pi,a*b + 3*x,-7.809692029744407e-8,Complex(2.7067e-8,2.268e-8)}
Раньше я делал аналогичный код (для других целевых языков) с удовлетворительными результатами.
I написал переводчик, который может преобразовывать подмножество Mathematica в Lua и несколько других языков.
Работа над ним еще не завершена, но он уже может переводить простые функции Mathematica, подобные этой:
doSomething[a_,b_] :=
If[a<3,
(a = a + 1;a),a-1]
Это результат работы этой функции в Lua:
function doSomething(a,b)
if a<3 then
a=a+1
return a
else
return a-1
end
end
Я также планирую написать переводчик, который преобразует подмножество Mathematica в нотацию symmath-lua .
Похожие вопросы
Новые вопросы
parsing
Синтаксический анализ относится к разбиению артефакта на составляющие его элементы и получению взаимосвязи между этими элементами. Этот тег не предназначен для вопросов о собственной размещенной платформе Parse (используйте тег [parse-platform]) или разбора ошибок на определенном языке программирования (используйте вместо этого соответствующий языковой тег).