Example #1
0
        /// <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>();
 }