Home
Manage Your Code
Snippet: Evalutaor (C#)
Title: Evalutaor Language: C#
Description: this is a genric evalutor based in Microsfot Jscript Views: 161
Author: Mohit Thakral Date Added: 7/24/2008
Copy Code  
1using System;
2using System.CodeDom.Compiler;
3using System.Reflection;
4using System.Collections;
5using Microsoft.JScript;
6using System.Text.RegularExpressions;
7
8namespace REISys.BHCMIS.UDS.Utilities
9{
10    public class Evaluator
11    {
12        public static int EvalToInteger(string statement)
13        {
14            string s = EvalToString(statement);
15            return int.Parse(s.ToString());
16        }
17
18        public static double ComputeResult(string expression,Hashtable Values)
19        {
20            string newExpression = expression;
21            
22           
23            
24            string[] strarray = Regex.Split(expression, @"[\+\-\%\*()\[\]\{\}]");
25            foreach (string str  in strarray)
26            {
27                if (str != "")
28                {
29                    newExpression = newExpression.Replace(str, Values[str].ToString());
30                }
31               
32            }
33            return EvalToDouble(newExpression);
34        }
35
36        public static double EvalToDouble(string statement)
37        {
38            string s = EvalToString(statement);
39            return double.Parse(s);
40        }
41
42        public static string EvalToString(string statement)
43        {
44            object o = EvalToObject(statement);
45            return o.ToString();
46        }
47
48        public static object EvalToObject(string statement)
49        {
50            return _evaluatorType.InvokeMember(
51                        "Eval",
52                        BindingFlags.InvokeMethod,
53                        null,
54                        _evaluator,
55                        new object[] { statement }
56                     );
57        }
58
59        static Evaluator()
60        {
61            ICodeCompiler compiler;
62            compiler = new JScriptCodeProvider().CreateCompiler();
63
64            CompilerParameters parameters;
65            parameters = new CompilerParameters();
66            parameters.GenerateInMemory = true;
67
68            CompilerResults results;
69            results = compiler.CompileAssemblyFromSource(parameters, _jscriptSource);
70
71            Assembly assembly = results.CompiledAssembly;
72            _evaluatorType = assembly.GetType("Evaluator.Evaluator");
73
74            _evaluator = Activator.CreateInstance(_evaluatorType);
75        }
76
77        private static object _evaluator = null;
78        private static Type _evaluatorType = null;
79        private static readonly string _jscriptSource =
80
81            @"package Evaluator
82            {
83               class Evaluator
84               {
85                  public function Eval(expr : String) : String 
86                  { 
87                     return eval(expr); 
88                  }
89               }
90            }";
91    }
92}
93
94