Messy but working Interpreter