JavaScript - Partial Solution (247)
Does not read from file - does not manage PRIMES.BF, but works for Hello World!
// not included in 247 chars
var p="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."
// 247 chars of javascript interprets hello world, but trips up on primes
var a=[0,0,0,0,0],b=0
x="}0while(a[b]){0a[b]=prompt()0a[b]++0console.log(String.fromCharCode(a[b]))0a[b]--0b++0b--0]0[0,0+0.0-0>0<".split(0)
p=p.replace(/[^\][.,+><-]/g,'')
for(i=0;i<8;i++)
p=p.replace(new RegExp("\\"+x[i+8],'g'),x[i]+';')
eval(p)
Just copy and paste it into javascript console to see it in action. Works in node.js, or broswer.
I was hoping to get PRIMES.BF to work in node.js, but not been able to emulate STDIN in a synchronous way yet.
With comments
// this is the hello world program from wikipedia
// this should be read from a file, at least in node.js
var p="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."
// 247 chars of javascript interprets hello world, but trips up on primes
// initialising a as array of 5 0's - not sure why it needs 5 and not more/less
// also not sure if it will trip up on other scripts - maybe with more recursion?
var a = [0,0,0,0,0], b = 0
// string of commands and values to be replaced seperated by 0, because it saves a
// couple of chars in the split - so .split(0) rather than .split(";")
// the brainfuck commands are at offset +8 in the resulting array
x = "}0while(a[b]){0a[b]=prompt()0a[b]++0console.log(String.fromCharCode(a[b]))0a[b]--0b++0b--0]0[0,0+0.0-0>0<".split(0)
// replace all non brainfuck commands with empty string. Commands have been arranged so that
// "-" is at the end, so does not need escaping
p = p.replace(/[^\][.,+><-]/g,'')
// loop through the 8 commands and replace the escaped brainfuck command globally with the replacement
// javascript, and a semicolon line terminator. This adds extra semi-colons to the javascript code,
// but does not interfere with execution
for(i=0;i<8;i++)
p=p.replace(new RegExp("\\"+x[i+8],'g'),x[i]+';')
// evaluate the generated code
eval(p)