public static Instruction Parse(string input) { var inst = new Cinstruction(); inst._comp = ParseComp(GetInstruction(input)); inst._dest = ParseDest(GetDestination(input)); inst._jump = ParseJump(GetJump(input)); return(inst); }
public static Instruction Parse(string input) { var inst = new Cinstruction(); inst._comp = ParseComp(GetInstruction(input)); inst._dest = ParseDest(GetDestination(input)); inst._jump = ParseJump(GetJump(input)); return inst; }
static List <Instruction> GetInstructions(List <string> lines) { var instructions = new List <Instruction>(); //var _predefSymbols = new Dictionary<string, int>(); int lineNo = 0; // second pass foreach (var line in lines) { if (line.StartsWith("(") && line.EndsWith(")")) { // a symbol symbols.Add(line.Substring(1, line.Length - 2), lineNo); // continue; don't increment the line number (this is a label, not an instruction)! continue; } ++lineNo; } // second pass int variableNo = 16; foreach (var line in lines) { if (line == string.Empty) { continue; } if (line.StartsWith("(") && line.EndsWith(")")) { continue; } if (line.StartsWith("@")) { string valueString = line.Substring(1); try { System.Convert.ToInt32(valueString); } catch (System.FormatException) { // string! if (!symbols.ContainsKey(valueString)) { // a symbol symbols.Add(valueString, variableNo); ++variableNo; // continue; don't increment the line number (this is a label, not an instruction)! } } instructions.Add(Ainstruction.Parse(line, symbols)); } else { instructions.Add(Cinstruction.Parse(line)); } } return(instructions); }