كيف يمكنني تقييم تعبير الرياضيات الممثلة بسلسلة؟

StackOverflow https://stackoverflow.com/questions/2246498

  •  20-09-2019
  •  | 
  •  

سؤال

من السهل تنفيذ "آلة حاسبة" تحليل سلسلة (على سبيل المثال، 2 ^ 3 / 2) وحسب نتيجة العمليات. ولكن، هل هناك مكتبة قادرة بالفعل على القيام بذلك؟

هل كانت مفيدة؟

المحلول

ال dotmath. مكتبة يفعل هذا.

نصائح أخرى

سوف تحتاج إلى نوع من محلل الرياضيات من أجل القيام بذلك. لقد استخدمت C # التعبير المحلل المحلل باستخدام RPN بواسطة deepeddie من قبل، أو يمكنك أن تجعل بنفسك إذا كانت تعقيد التعبيرات التي تستخدمها هي من النطاق المحدود.

لا تدعها تخيفك، فهي فعلا من السهل جدا صنعها.

تضمين Ironpython في التطبيق الخاص بك، يمكنك بعد ذلك طلب ذلك تقييم سلاسل معقدة تعسفا

أعتقد أن لديهم حتى عينة من نفس الشيء

الدفع تدوين البولندية العكسية. وبعد يستخدم على نطاق واسع في الآلات الحاسبة الحديثة

يمكنك أيضا استخدام مكتبة JScript على الرغم من إهمالها. لا تقول أنك يجب أن، فقط يمكنك ذلك.

microsoft.jscript.eval.jscriptevalu.

لقد استخدمت هذا:

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); 
                       }
                 }
              }";
  }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top