Exemple #1
0
        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);
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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);
        }