现在有一段代码,就一行: float k ;
然后还有一段文本 program.txt,文本里是这样写的
k = k*(k-24);
int x = 2;
k = k-x;我希望把这段文本解析为程序,如果有语法错误就抛出异常,请问应该如何实现?
非常感谢。
ps... 别让我直接把文本贴到代码里 - -;
然后还有一段文本 program.txt,文本里是这样写的
k = k*(k-24);
int x = 2;
k = k-x;我希望把这段文本解析为程序,如果有语法错误就抛出异常,请问应该如何实现?
非常感谢。
ps... 别让我直接把文本贴到代码里 - -;
反之,你必须对文本进行语法分析。解析出运算符、常量、变量
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");
}
}
你将两部分合成一个cs文件,然后调用.net的编译器编译,什么文法不文法的由.net编译器代你做了。