Example #1
0
        public static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("Muftec 1.0");
                Console.WriteLine("Put some help documentation here, eventually.");
                Console.WriteLine("----------------------------------------");
                Console.WriteLine("muftec -x <source file>   -- Execute a source file");
                Console.WriteLine("muftec -c <source file>   -- Compiles a source file to a executable");
                Console.WriteLine("          [<out file>]    -- (Optional) Define the output filename");
            }
            else if (args[0] == "-x")
            {
                // Run a program
                var text = File.ReadAllText(args[1]);
                var output = Compiler.ParseString(text);
                if (output == null)
                {
                    Console.WriteLine("Could not continue.");
                    return;
                }

                var system = new MuftecLibSystem();
                var bcl = new MuftecBaseClassLibrary();
                system.AddLibrary(bcl);

                var queue = new Queue<MuftecStackItem>();
                queue.Enqueue(new MuftecStackItem(output.MainFunctionName, MuftecAdvType.Function));
                var runtime = new Stack<MuftecStackItem>();
                system.Run(queue, runtime, output.Variables, output.Functions);
            }
            else if (args[0] == "-c")
            {
                // Compile a program
                var text = File.ReadAllText(args[1]);
                var output = Compiler.ParseString(text);
                if (output == null)
                {
                    Console.WriteLine("Could not continue.");
                    return;
                }

                string filename;
                if (args.Length > 2)
                {
                    filename = args[2];
                }
                else
                {
                    filename = Path.GetFileNameWithoutExtension(args[1]);
                }

                Fabricator.SaveAssembly(output, filename + ".exe", true);
            }
            else
            {
                Console.WriteLine("Invalid switch specified.");
            }
        }
Example #2
0
        public Fabricator(Compiler.CompilerOutput output)
        {
            _output = output;
            _funcCache = new Dictionary<string, Emit<MuftecFunction>>();

            // Create a BCL-based system for compile-time opcode referencing
            _system = new MuftecLibSystem();
            var bcl = new MuftecBaseClassLibrary();
            _system.AddLibrary(bcl);
        }
Example #3
0
        public static void Main(string[] args)
        {
            var evalCount = 100000;

            var appRun = new StringBuilder();
            appRun.AppendLine(": main");
            for (var i = 0; i < evalCount; i++)
            {
                appRun.Append("100 100 + pop ");
            }
            appRun.AppendLine();
            appRun.AppendLine(";");
            var runStr = appRun.ToString();

            var buildTimer = new Stopwatch();
            buildTimer.Start();

            //// Create Muftec base system ////
            var system = new MuftecLibSystem();
            var bcl = new MuftecBaseClassLibrary();
            system.AddLibrary(bcl);

            var execStack = new Queue<MuftecStackItem>();
            var runStack = new Stack<MuftecStackItem>();
            var variables = new List<string>();
            var functions = new Dictionary<string, Queue<MuftecStackItem>>();

            var output = Compiler.ParseString(runStr);
            variables = output.Variables;
            functions = output.Functions;
            execStack.Enqueue(output.MainFunction);

            buildTimer.Stop();
            Console.WriteLine("Build stage took: {0} ticks", buildTimer.Elapsed);

            var runTimer = new Stopwatch();
            runTimer.Start();

            system.Run(execStack, runStack, variables, functions);

            runTimer.Stop();
            Console.WriteLine("Execution stage took: {0} ticks", runTimer.Elapsed);

            var stickTimer = new Stopwatch();
            stickTimer.Start();
            var outval = 0;

            for (var i = 0; i < evalCount; i++)
            {
                outval += 100 + 100;
            }

            stickTimer.Stop();
            Console.WriteLine("Comparison stage took: {0} ticks", stickTimer.Elapsed);

            /*
            //// Sample code ////
            Console.WriteLine("Running sample code.");

            execQueue.Enqueue(new MuftecStackItem(6));
            execQueue.Enqueue(new MuftecStackItem(4));
            execQueue.Enqueue(new MuftecStackItem("-", MuftecAdvType.OpCode));
            execQueue.Enqueue(new MuftecStackItem("print", MuftecAdvType.OpCode));

            var runStack = new Stack<MuftecStackItem>();

            try
            {
                system.Run(execQueue, runStack);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message);
            }

            Console.WriteLine();

            //// Compiler ////
            Console.WriteLine("Running compiler.");

            var text = System.IO.File.ReadAllText("Sample.muf");

            try
            {
                var output = Compiler.ParseString(text);
                variables = output.Variables;
                functions = output.Functions;
                execQueue = new Queue<MuftecStackItem>();
                execQueue.Enqueue(new MuftecStackItem(output.MainFunction, MuftecAdvType.Function));
            }
            catch (MuftecCompilerException ex)
            {
                Console.WriteLine("Compiler exception: " + ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message);
            }
            finally
            {
                Console.WriteLine("Executing compiled code.");
                runStack = new Stack<MuftecStackItem>();

                try
                {
                    system.Run(execQueue, runStack, variables, functions);
                }
                catch (MuftecGeneralException ex)
                {
                    Console.WriteLine("Muftec exception: " + ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception: " + ex.Message);
                }

                Console.WriteLine();
                Console.WriteLine("Complete.");
            }*/

            Console.WriteLine();
            Console.WriteLine("Press any key.");
            Console.ReadKey(true);
        }