コード例 #1
0
        private void ConstructEvaluator(EvaluatorItem[] items) {
            CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
            CompilerParameters comp = new CompilerParameters();
            //comp.ReferencedAssemblies.Add("system.dll");
            //comp.GenerateExecutable = false;
            //comp.GenerateInMemory = true;

            StringBuilder code = new StringBuilder();
            code.Append("using System; \n");
            code.Append("namespace libJanet { \n");
            code.Append("public class _Evaluator { \n");

            foreach (EvaluatorItem item in items) {
                code.AppendFormat(" public {0} {1}() ", item.ReturnType.Name, item.Name);
                code.Append(" { ");
                code.AppendFormat(" return ({0}); ", item.Expression);
                code.Append(" }\n");
            }
            code.Append("} }");

            CompilerResults cr = provider.CompileAssemblyFromSource(comp, code.ToString());
            if (cr.Errors.HasErrors) {
                StringBuilder error = new StringBuilder();
                error.Append("Error Compiling Expression: ");
                foreach (CompilerError err in cr.Errors) {
                    error.AppendFormat("{0}\n", err.ErrorText);
                }
                throw new Exception("Error Compiling Expression: " + error.ToString());
            }
            Assembly a = cr.CompiledAssembly;
            _Compiled = a.CreateInstance("libJanet._Evaluator");
        }
コード例 #2
0
 private Evaluator(EvaluatorItem item)
 {
     EvaluatorItem[] items = { item };
     ConstructEvaluator(items);
 }
コード例 #3
0
 private Evaluator(EvaluatorItem item)
 {
     EvaluatorItem[] items = { item };
     ConstructEvaluator(items);
 }
コード例 #4
0
 private Evaluator(EvaluatorItem[] items)
 {
     ConstructEvaluator(items);
 }