كيف يمكنني تقييم تعبير الرياضيات الممثلة بسلسلة؟
-
20-09-2019 - |
سؤال
من السهل تنفيذ "آلة حاسبة" تحليل سلسلة (على سبيل المثال، 2 ^ 3 / 2
) وحسب نتيجة العمليات. ولكن، هل هناك مكتبة قادرة بالفعل على القيام بذلك؟
المحلول
ال dotmath. مكتبة يفعل هذا.
نصائح أخرى
سوف تحتاج إلى نوع من محلل الرياضيات من أجل القيام بذلك. لقد استخدمت C # التعبير المحلل المحلل باستخدام RPN بواسطة deepeddie من قبل، أو يمكنك أن تجعل بنفسك إذا كانت تعقيد التعبيرات التي تستخدمها هي من النطاق المحدود.
لا تدعها تخيفك، فهي فعلا من السهل جدا صنعها.
تضمين Ironpython في التطبيق الخاص بك، يمكنك بعد ذلك طلب ذلك تقييم سلاسل معقدة تعسفا
أعتقد أن لديهم حتى عينة من نفس الشيء
الدفع تدوين البولندية العكسية. وبعد يستخدم على نطاق واسع في الآلات الحاسبة الحديثة
يمكنك أيضا استخدام مكتبة JScript على الرغم من إهمالها. لا تقول أنك يجب أن، فقط يمكنك ذلك.
لقد استخدمت هذا:
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.JScript;
public class JScriptEvaluator
{
public int EvalToInteger(string statement)
{
string s = EvalToString(statement);
return int.Parse(s.ToString());
}
public double EvalToDouble(string statement)
{
string s = EvalToString(statement);
return double.Parse(s);
}
public string EvalToString(string statement)
{
object o = "-1";
try
{
o= EvalToObject(statement);
}
catch { o = "-1"; }
return o.ToString();
}
public object EvalToObject(string statement)
{
return _evaluatorType.InvokeMember(
"Eval",
BindingFlags.InvokeMethod,
null,
_evaluator,
new object[] { statement }
);
}
public JScriptEvaluator()
{
CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider();
CompilerParameters parameters;
parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results;
results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
Assembly assembly = results.CompiledAssembly;
_evaluatorType = assembly.GetType("Evaluator.Evaluator");
_evaluator = Activator.CreateInstance(_evaluatorType);
}
private object _evaluator = null;
private Type _evaluatorType = null;
private readonly string _jscriptSource =
@"package Evaluator
{
class Evaluator
{
public function Eval(expr : String) : String
{
return eval(expr);
}
}
}";
}