using System; using System.Collections.Generic; using System.Text; using Sunweaver.Commands; using Sunweaver.VM; using Sunweaver.Commands.Abstracts; using Sunweaver.Parsing; using System.Linq; namespace Sunweaver.VirtualMachineConsole { class Program { static void Main(string[] args) { try { DNASystem.Initialize(); } catch (Exception Except) { System.Console.WriteLine("Error initializing: \"" + Except.Message + "\""); } VirtualMachine VM = new VirtualMachine(); #if false // rough back-of-envelope speed test { List bps = new List(); for (int j = 0; j < 10; ++j) { for (int i = 0; i < 1000000; ++i) { var bp = DNASystem.CommandListClass.randomBasePair(1, 1, 1, 1); bps.Add(bp); } Codule codule = new Codule(bps); var watch = System.Diagnostics.Stopwatch.StartNew(); codule.Execute(VM); float elapsedTicks = (float)watch.ElapsedTicks; System.Console.WriteLine(elapsedTicks); System.Console.WriteLine(System.Diagnostics.Stopwatch.Frequency); System.Console.WriteLine((elapsedTicks / System.Diagnostics.Stopwatch.Frequency * 1000).ToString("0.00")); } } #endif VM = new VirtualMachine(); Chromosome dna = new Chromosome(); System.Console.Write( "Welcome to the Sunweaver.VirtualMachineconsole command line.\n" + "Enter a blank line to exit.\n"); string line; while ((line = System.Console.ReadLine()) != string.Empty) { try { int lineNumber; var errors = new List(); var tokens = Parser.TokenizeAndMetatags(line, dna, errors, out lineNumber); var basePairs = Sunweaver.Parsing.Parser.ParseCodule(tokens, dna, errors); Codule codule = new Codule(basePairs); codule.Execute(VM); System.Console.WriteLine(VM.Stack.ToString()); } catch (Exception Except) { System.Console.Write("The previous line failed to execute, \"" + Except.Message + "\"\n"); } } } } }