Пример #1
0
        public void PrintTree()
        {
            PrintVisitor visitor = new PrintVisitor();

            Console.WriteLine("Starting to print AST ");
            Console.WriteLine(CurrentSemanticValue.print("", 0));
        }
Пример #2
0
        public void GenCode()
        {
            // Create file
            string ilFileName = filename.Split('.')[0] + ".il";

            if (File.Exists(ilFileName))
            {
                File.Delete(ilFileName);
            }
            using (FileStream fs = File.Create(ilFileName))
            {
                CodeGenVisitor visitor = new CodeGenVisitor();
                Console.WriteLine("Starting code generation");

                // Write file header
                StringBuilder sb = new StringBuilder();
                Byte[]        info;
                sb.AppendLine(String.Format("//-----------------------------------------------------------------", ilFileName, filename));
                sb.AppendLine(String.Format("//IL Header - Lenny Bogdanov\n//File: {0} \n//Source File: {1} \n//Date: {2} {3}",
                                            ilFileName, filename, System.DateTime.Now.ToLongDateString(), System.DateTime.Now.ToLongTimeString()));
                sb.AppendLine(String.Format("//-----------------------------------------------------------------", ilFileName, filename));
                sb.AppendLine(String.Format("\n", ilFileName, filename));
                sb.AppendLine(String.Format(".assembly extern mscorlib {{}}"));
                sb.AppendLine(String.Format(".assembly a{{}} //Not sure why this was necessary for me to do", ilFileName, filename));
                sb.AppendLine(String.Format("\n", ilFileName, filename));


                info = new UTF8Encoding(true).GetBytes(sb.ToString());
                fs.Write(info, 0, info.Length);
                // Visit AST
                // This is how we'll give the code gen reader access to the file we've opened
                currentFileStream = fs;
                CurrentSemanticValue.Accept(visitor);
                fs.Close();
            }
            Console.WriteLine(filename + " -> " + filename.Split('.')[0] + ".il");
        }