private string Complie(string path, string textString, string codes) { string rtResult = String.Empty; CodeBlockFile source = null; if (path != null) { source = CodeBlock.GenerateSourceFile(path); } else if (textString != null) { source = CodeBlock.GenerateSourceFileFromString(textString); } else { source = new CodeBlockFile(); source.SourceCode = codes; } string finalCode = GetDefaultTemplate(source, "CCCScript", "RuntimeProgram"); CompilerResults result = CscCompile(finalCode, source.Reference.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); if (result.Errors.Count == 0) { dynamic t = result.CompiledAssembly.CreateInstance("CCCScript.RuntimeProgram"); if (t != null) { rtResult = t.Start(this); } else { rtResult = "RuntimeProgram is null"; throw new Exception(rtResult); } } else { foreach (CompilerError err in result.Errors) { rtResult += err.ErrorText + " " + err.Line.ToString() + Environment.NewLine; } throw new Exception(rtResult); } return rtResult; }
private static CodeBlockFile GenerateSourceFile(string rootFile, string textString) { IEnumerable<CodeBlock> list = rootFile != null ? SplitCodeAndText(rootFile) : SplitCodeAndTextFromString(textString); string code = SplitCodeAndContent(list, "obj"); code = OpenDefintionLinkInCode(code); string usingBlock = ExtractDefintionBlock(code); string dllBlock = ExtractAssemblyBlock(code); string methodBlock = ExtractMethodBlock(code); string classBlock = ExtractClassBlock(code); string fieldBlock = ExtractFieldBlock(code); string strings = ExtractStringBlock(code); code = RemoveAllPatternBlocks(code); code = ProcessAllInlinePatterns(code, "obj"); var codeFile = new CodeBlockFile(); codeFile.Definition = usingBlock; codeFile.SourceCode = strings + code; codeFile.Reference = dllBlock; codeFile.Class = classBlock; codeFile.Method =methodBlock ; codeFile.Field = fieldBlock; return codeFile; }
public string GetDefaultTemplate(CodeBlockFile source, string nameSpaceId, string classId) { return DefaultTemplate.Replace("/*NAMESPACEID*/", nameSpaceId) .Replace("/*CLASSID*/", classId) .Replace("/*USING*/", DefalultUsingBlock + source.Definition) .Replace("/*FIELD*/", source.Field) .Replace("/*CLASS*/", DefaultClass + source.Class) .Replace("/*METHOD*/", DefaultMethod + source.Method) .Replace("/*MainMethod*/", DefaultMainMethod) .Replace("/*ENTRY*/", source.SourceCode); }