Runtime C# Expression Evaluator
http://www.codeproject.com/csharp/runtime_eval.asp

解决方案 »

  1.   

    我只能做出+,-,*,/的公式,类似于EXCEL中的公式定义
      

  2.   

    http://expert.csdn.net/Expert/topic/1553/1553098.xml?temp=.1884882请参考这个帖子里面有我写的一个表达式解析类
      

  3.   

    using System;
    using System.CodeDom;
    using System.CodeDom.Compiler;
    using Microsoft.CSharp;
    using System.Reflection;
    using System.Text;namespace TestApp
    {
        public class Test
        {
            public static void Main() 
            {
                string expression = "125.8 + 208.2 + 120.90";
                string ret = Eval.Calc(expression).ToString();  
                Console.Write("{0} = {1} ",expression,  ret);
            }
        }    public class Eval 
        {
            public static object Calc(string expression)
            {
                string className = "Calc";
                string methodName = "Run";
                
                // 创建编译器实例。
                ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler());
                // 设置编译参数。
                CompilerParameters paras = new CompilerParameters();
                paras.GenerateExecutable = false;
                paras.GenerateInMemory = true;            // 创建动态代码。
                StringBuilder classSource = new StringBuilder(); 
                classSource.Append("public class "+ className +"\n");
                classSource.Append("{\n");
                classSource.Append("    public object " + methodName + "()\n");
                classSource.Append("    {\n");
                classSource.Append("        return "+ expression + ";\n");
                classSource.Append("    }\n");
                classSource.Append("}");            System.Diagnostics.Debug.WriteLine(classSource.ToString());            // 编译代码。
                CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());
                
                // 获取编译后的程序集。
                Assembly assembly = result.CompiledAssembly;
     
                // 动态调用方法。
                object eval = assembly.CreateInstance(className);
                MethodInfo method = eval.GetType().GetMethod(methodName);
                return method.Invoke(eval, null);
            }
        }
    }
      

  4.   

    我同学前几天还在研究这个,他用的yacc
    我也不明白是咋回事
      

  5.   

    大家有没有成形的例子啊。[email protected] 收到马上给分。
      

  6.   

    http://expert.csdn.net/Expert/topic/1553/1553098.xml?temp=.1884882这不就是吗你贴出来编译就可以用了
      

  7.   

    有意思。.netb本身就提供了一个用于运行时候编译的类,CodeCompiler 类 ,好多于这个相关的东西都在System.CodeDom.Compiler 命名空间底下。看看一楼的答案有什么不妥当地吗?要不你就说说你的全部要求,大家直接给你写代码吧。
      

  8.   

    to 楼上大哥咱们两这类似的问题好像答了不少是不是考虑弄个FAQ出来啊
      

  9.   

    哥哥们
       可不可以把你们的例题发到[email protected]里面。谢谢了。