Here is my attempt in ES6 javascript function at a whopping 561 characters if white space and comments are removed and with no bonuses:
compile=a=>// Defines a function called `compile`
compile = a => {h=a=>
h = a => {
for (;a;; a;) {
// Create a copy of the input string
var c=a;a=a[R]c = a;
// Replace print statements with "."
a = a[R](l, (a, d) => {
e(d);b+=";
b += ".";return""";
return ""
})[R](m, (a, d) => { // Replace input statements with ","
e(d);b+=";
b += ",";return""";
return ""
})[R](n, (a, d, c, g) => { // Replace equal to, increment, and decrements
e(d);b+=;
b += (c||"[c || "[-]+")+g;return"" + g;
return ""
})[R](p, (a, c, f, g) => { // Replace if and while loops
e(f);b+="[";h;
b += "[";
h(g);"if"==c;
"if" == c ?b+="[>]^" b += "[>]^" : e(f);b+="]";return"";
b += "]";
return ""
});if;
// If the copy is the same as the input string
// i.e. no changes were made in replacing, we've reached the end, break
if (c==ac == a) break
}
};e=a=>;
// A function which moves to the variable location
e = a => {b+="[>]^";b+=">"+f[a]
// Go to zeroth position
b += "[>]^";
// f[a] is where the variable is located, move there
b += ">" + f[a]
};var;
b="" var b = "",R="replace";a=a[R]
R = "replace";
// Remove comments and whitespace
a = a[R](/\/\/.*?\n/g, "")[R](/[\s\n\t]+|/g, "");var;
l= // Regexes
var l = /^print\((.*?)\);/,m= // Print statements
m = /^input\((.*?)\);/,n= // Input statements
n = /^([a-zA-Z0-9]+)([\+\-]?)=(\d+);/,p= // Assignments
p = // If and while statements
/(if|while)\((.*?)\)\{(.*?)\};/,k=a
k = a.split(";")[0].split(",");a=a; // Get the variables
a = a.slice(a.indexOf(";")+1 + 1);for; // Strip variables from program
// Assign each variable a unique index
for (var f=f = {},c=0;c<k c = 0; c < k.length;++clength; ++c)f[k[c]]=c;h f[k[c]] = c;
// Compile
h(a);return;
return b // Return
};