public void ConstructorTest() { string outputPath = "../../../TestFiles/PrintNumber/UnitTest.vm"; VmWriter vmWriter = new VmWriter(outputPath); Assert.IsTrue(File.Exists(outputPath), "file not found."); }
public void WriteGotoTest() { string outputPath = "../../../TestFiles/PrintNumber/UnitTest.vm"; using (VmWriter vmWriter = new VmWriter(outputPath)) { vmWriter.WriteGoto("SomeLabel"); } using (StreamReader streamReader = new StreamReader(File.OpenRead("../../../TestFiles/PrintNumber/UnitTest.vm"))) { string line = streamReader.ReadLine().Trim(); Assert.IsTrue(string.Equals(line, "goto SomeLabel", StringComparison.InvariantCulture)); } }
public void WriteArithmeticTest() { string outputPath = "../../../TestFiles/PrintNumber/UnitTest.vm"; using (VmWriter vmWriter = new VmWriter(outputPath)) { vmWriter.WriteArithmetic(ArithmeticCommand.Add); } using (StreamReader streamReader = new StreamReader(File.OpenRead("../../../TestFiles/PrintNumber/UnitTest.vm"))) { string line = streamReader.ReadLine().Trim(); Assert.IsTrue(string.Equals(line, "add", StringComparison.InvariantCulture)); } }
public void WritePopTest() { string outputPath = "../../../TestFiles/PrintNumber/UnitTest.vm"; using (VmWriter vmWriter = new VmWriter(outputPath)) { vmWriter.WritePop(Segment.Argument, 1); } using (StreamReader streamReader = new StreamReader(File.OpenRead("../../../TestFiles/PrintNumber/UnitTest.vm"))) { string line = streamReader.ReadLine().Trim(); Assert.IsTrue(string.Equals(line, "pop Argument 1", StringComparison.InvariantCulture)); } }
public static string CompilingJackCode(this VmCompiler vmCompiler, string jackCode) { using (var tokeniser = new Tokeniser(jackCode)) { var output = new StringWriter(); var writer = new VmWriter(output); var parser = new Parser(new Grammarian()); parser.Parse(tokeniser); var xmlConverter = new XmlConverter(); Console.WriteLine(xmlConverter.ConvertNode(parser.Tree).OuterXml); vmCompiler.Compile(parser.Tree, writer); return writer.ToString(); } }
public void Run(Options parameter, Action <Options> next) { var ast = (AssemblySource)parameter.Tags["AST"]; var writer = new VmWriter(); foreach (var line in ast.Lines) { writer.Write(line.Opcode); foreach (var ops in line.Operands) { writer.Write(ops); } } File.WriteAllBytes(parameter.Output, writer.ToArray()); next(parameter); }
public void Run() { ReadLine.HistoryEnabled = true; ReadLine.AutoCompletionHandler = new AutoCompletionHandler(); bool ishexMode = false; while (true) { string prefix = ishexMode ? "hex" : "asm"; var input = ReadLine.Read(prefix + "> "); if (ReplCommand.IsCommand(input)) { var cmd = ReplCommand.Parse(input); switch (cmd.Name) { case "mode": var arg = cmd.Args.First(); if (arg == "asm") { ishexMode = false; } else if (arg == "hex") { ishexMode = true; } else { Console.WriteLine($"mode '{arg}' not recognized"); } break; case "register": Utils.PrintRegisters(vm.Register); break; case "clear": Console.Clear(); break; case "explain": if (cmd.Args.Length == 1) { var errorcodeStr = cmd.Args.First(); Console.WriteLine(ErrorTable.GetExplanation(int.Parse(errorcodeStr))); } else { Console.WriteLine("Please specifiy an errorcode"); } break; default: Console.WriteLine($"Command '{cmd.Name}' not found"); break; } } else { if (ishexMode) { var prog = ParseHex(input); var reader = new VmReader(prog, vm); vm.RunInstructionLine(reader); } else { var src = AssemblySource.Parse(input); var writer = new VmWriter(); foreach (var line in src.Lines) { writer.Write(line.Opcode); foreach (var operand in line.Operands) { writer.Write(operand); } } vm.Run(writer); vm.Register[Registers.IPR] = 0; } } } }