现在有一段代码,就一行: float k ; 
然后还有一段文本 program.txt,文本里是这样写的
k = k*(k-24);
int x = 2;
k = k-x;我希望把这段文本解析为程序,如果有语法错误就抛出异常,请问应该如何实现?
非常感谢。
ps... 别让我直接把文本贴到代码里 - -;

解决方案 »

  1.   

    这种问题,如果是解释性语言非常简单,直接把字符K替换成变量名就OK。
    反之,你必须对文本进行语法分析。解析出运算符、常量、变量
      

  2.   

    参考动态执行C#语句:
    using Microsoft.CSharp;
    using System.CodeDom.Compiler;
    using System.Reflection;private void button1_Click(object sender, EventArgs e)
    {
        ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
        CompilerParameters vCompilerParameters = new CompilerParameters();
        vCompilerParameters.GenerateExecutable = false;
        vCompilerParameters.GenerateInMemory = true;
        string vSource = 
            "public class Temp\n" +
            "{\n" +
            "   public double Test(double A, double B)\n" +
            "   {\n" +
            "       return A / B;\n" +
            "   }\n" +
            "}\n";
        CompilerResults vCompilerResults =
            vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource); 
        Assembly vAssembly = vCompilerResults.CompiledAssembly;
        object vTemp = vAssembly.CreateInstance("Temp");
        MethodInfo vTest = vTemp.GetType().GetMethod("Test");
        for (int i = 1; i < 100; i++)
        {
            object[] vParams = { 1, i };
            object vDouble = vTest.Invoke(vTemp, vParams);
            textBox1.AppendText(vDouble.ToString() + "\r\n");
        }
    }
      

  3.   

    可以这样嘛:
    你将两部分合成一个cs文件,然后调用.net的编译器编译,什么文法不文法的由.net编译器代你做了。
      

  4.   

    自己写文法分析的话是有点难的。很多Java的IDE如JBuilder、JCreator都是调用Java的javac.exe编译的。一个.net开源IDE也是利用.net的编译器来做的。
      

  5.   

    多谢各位,特别是zswang我这就试下