Esempio n. 1
0
        public static string Compile(string input)
        {
            Console.Write("# Parsing {0}: ", input);
            FunctionDecl main;

            using (var file = new FileStream(input, FileMode.Open)) {
                var scanner = new Scanner(file);
                var parser  = new Parser(scanner);
                if (!parser.Parse())
                {
                    Console.WriteLine("Not OK :(");
                    throw new ArgumentException("Input is not valid...");
                }
                Console.WriteLine("OK");
                main = parser.Prog;
            }

            Console.Write("# Type checking {0}: ", input);
            var tcv = new TypecheckVisitor();

            main.Accept(tcv);
            Console.WriteLine("OK");

            Console.Write("# Return checking {0}: ", input);
            var rcv = new ReturnCheckVisitor();

            main.Accept(rcv);
            Console.WriteLine("OK");

            Console.WriteLine("# Contents of {0}:", input);
            var toStringVisitor = new ToStringVisitor();

            main.Accept(toStringVisitor);
            Console.Write(toStringVisitor.Result);

            var prefix = input.Substring(0, input.LastIndexOf('.'));

            Console.Write("# Compiling {0} into {1}: ", input, prefix + ".exe");
            var cecilVisitor = new CecilVisitor(tcv.Assembly, tcv.Module);

            main.Accept(cecilVisitor);
            cecilVisitor.Write(prefix);
            Console.WriteLine("OK");

            Console.Out.Flush();
            return(prefix + ".exe");
        }
Esempio n. 2
0
        public static string Compile(string input)
        {
            Console.Write("# Parsing {0}: ", input);
            FunctionDecl main;
            using (var file = new FileStream(input, FileMode.Open)) {
                var scanner = new Scanner(file);
                var parser = new Parser(scanner);
                if (!parser.Parse()) {
                    Console.WriteLine("Not OK :(");
                    throw new ArgumentException("Input is not valid...");
                }
                Console.WriteLine("OK");
                main = parser.Prog;
            }

            Console.Write("# Type checking {0}: ", input);
            var tcv = new TypecheckVisitor();
            main.Accept(tcv);
            Console.WriteLine("OK");

            Console.Write("# Return checking {0}: ", input);
            var rcv = new ReturnCheckVisitor();
            main.Accept(rcv);
            Console.WriteLine("OK");

            Console.WriteLine("# Contents of {0}:", input);
            var toStringVisitor = new ToStringVisitor();
            main.Accept(toStringVisitor);
            Console.Write(toStringVisitor.Result);

            var prefix = input.Substring(0, input.LastIndexOf('.'));
            Console.Write("# Compiling {0} into {1}: ", input, prefix + ".exe");
            var cecilVisitor = new CecilVisitor(tcv.Assembly, tcv.Module);
            main.Accept(cecilVisitor);
            cecilVisitor.Write(prefix);
            Console.WriteLine("OK");

            Console.Out.Flush();
            return prefix + ".exe";
        }