/// <summary> /// Gets syntax tree and generates executable file. /// </summary> /// <param name="tree">Input syntax tree.</param> public void generateExe(SyntaxTree tree) { // Create executable assembly. this.tree = tree; AppDomain domain = AppDomain.CurrentDomain; AssemblyName aName = new AssemblyName(); aName.Name = ASSEMBLY_NAME; AssemblyBuilder aBuilder = domain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Save); ab = aBuilder; ModuleBuilder mBuilder = aBuilder.DefineDynamicModule(MODULE_NAME, FILE_NAME); // Generate type for each class in source code. foreach (DTreeNode<string> childNode in tree.getRootNode().Nodes) { new GeneratorTypes(aBuilder, childNode, mBuilder).generate(); } // Save assembly. aBuilder.Save(FILE_NAME); Console.WriteLine("Code generation complete."); }
/// <summary> /// Class constructor. /// </summary> /// <param name="tree">Syntax tree to analyze.</param> public SemanticAnalyzer(SyntaxTree tree) { this.tree = tree; identifiers = new Dictionary<string, string>(); }