/// <summary> /// once the grammar compiles correctly, the code can be built. /// </summary> private void BuildCode() { string language = Grammar.Directives["TinyPG"]["Language"]; CodeDom.CompilerResults Result; CodeDom.CodeDomProvider provider = CodeGeneratorFactory.CreateCodeDomProvider(language); if (provider == null) { Errors.Add("Can't compile " + language + " project."); return; } System.CodeDom.Compiler.CompilerParameters compilerparams = new System.CodeDom.Compiler.CompilerParameters(); compilerparams.GenerateInMemory = true; compilerparams.GenerateExecutable = false; compilerparams.ReferencedAssemblies.Add("System.dll"); compilerparams.ReferencedAssemblies.Add("System.Windows.Forms.dll"); compilerparams.ReferencedAssemblies.Add("System.Drawing.dll"); compilerparams.ReferencedAssemblies.Add("System.Xml.dll"); // reference this assembly to share interfaces (for debugging only) string tinypgfile = Assembly.GetExecutingAssembly().Location; compilerparams.ReferencedAssemblies.Add(tinypgfile); // generate the code with debug interface enabled List <string> sources = new List <string>(); ICodeGenerator generator; foreach (Directive d in Grammar.Directives) { generator = CodeGeneratorFactory.CreateGenerator(d.Name, language); if (generator != null && d.ContainsKey("FileName")) { generator.FileName = d["FileName"]; } if (generator != null && d["Generate"].ToLower() == "true") { sources.Add(generator.Generate(Grammar, true)); } } if (sources.Count > 0) { Result = provider.CompileAssemblyFromSource(compilerparams, sources.ToArray()); if (Result.Errors.Count > 0) { foreach (CodeDom.CompilerError o in Result.Errors) { Errors.Add(o.ErrorText + " on line " + o.Line.ToString()); } } else { assembly = Result.CompiledAssembly; } } }
/// <summary> /// once the grammar compiles correctly, the code can be built. /// </summary> private void BuildCode() { string language = Grammar.Directives["TinyPG"]["Language"]; CodeDom.CompilerResults Result; CodeDom.CodeDomProvider provider = CodeGeneratorFactory.CreateCodeDomProvider(language); System.CodeDom.Compiler.CompilerParameters compilerparams = new System.CodeDom.Compiler.CompilerParameters(); compilerparams.GenerateInMemory = true; compilerparams.GenerateExecutable = false; compilerparams.ReferencedAssemblies.Add("System.dll"); compilerparams.ReferencedAssemblies.Add("System.Windows.Forms.dll"); compilerparams.ReferencedAssemblies.Add("System.Drawing.dll"); compilerparams.ReferencedAssemblies.Add("System.Xml.dll"); // reference this assembly to share interfaces (for debugging only) string tinypgfile = Assembly.GetExecutingAssembly().Location; compilerparams.ReferencedAssemblies.Add(tinypgfile); // generate the code with debug interface enabled List<string> sources = new List<string>(); ICodeGenerator generator; foreach (Directive d in Grammar.Directives) { generator = CodeGeneratorFactory.CreateGenerator(d.Name, language); if (generator != null && d.ContainsKey("FileName")) generator.FileName = d["FileName"]; if (generator != null && d["Generate"].ToLower() == "true") sources.Add(generator.Generate(Grammar, true)); } if (sources.Count > 0) { Result = provider.CompileAssemblyFromSource(compilerparams, sources.ToArray()); if (Result.Errors.Count > 0) { foreach (CodeDom.CompilerError o in Result.Errors) Errors.Add(o.ErrorText + " on line " + o.Line.ToString()); } else assembly = Result.CompiledAssembly; } }