using System; using System.Collections.Generic; using System.Text; namespace SuperBASIC { class Runtime { public float register; internal Library lib; Bytecode code; internal int pc = 0; public Runtime(Library library) { lib = library; } public void OpenFile(string path) { code = new Parser(this).ParseFile(path); } public void Run() { for(pc = 0; pc < code.bytecode.Count;) { int opcode = code.bytecode[pc].GetOperand(); int arity = lib.arities[opcode]; IFunction op = lib.functions[opcode]; var args = code.bytecode.GetRange(pc + 1, arity); SetRegister(op.Apply(args)); pc += arity + 1; } } internal void SetRegister(float value) { register = value; } internal float GetRegister() { return register; } } }