├── index.html ├── brainfuck.html └── interpreter.js /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 12 | 13 | 14 | 17 | 20 | 21 | 22 | 25 | 28 | 29 | 30 | 33 | 34 | 35 |
7 | Input: 8 | 10 | 11 |
15 | Code: 16 | 18 | 19 |
23 | Output: 24 | 26 | 27 |
31 | 32 |
36 | 37 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /brainfuck.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 12 | 13 | 14 | 17 | 20 | 21 | 22 | 25 | 28 | 29 | 30 | 33 | 34 | 35 |
7 | Input: 8 | 10 | 11 |
15 | Code: 16 | 18 | 19 |
23 | Output: 24 | 26 | 27 |
31 | 32 |
36 | 37 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /interpreter.js: -------------------------------------------------------------------------------- 1 | function interpret() { 2 | var inp = getInput(); 3 | var code = getCode(); 4 | 5 | var out = bf(code, inp); 6 | 7 | document.getElementsByName("output")[0].value = out.join(" "); 8 | } 9 | function getInput() { 10 | return document.getElementsByName("input")[0].value.split(" "); 11 | } 12 | function getCode() { 13 | return document.getElementsByName("code")[0].value; 14 | } 15 | function bf(code, inp){ 16 | var dp = i = 0, cmd, data = [0], len = code.length, out = []; 17 | 18 | // -- get loops -- 19 | var loopStarts = {}, loopEnds = {}; 20 | for( var i=0, tmp=[], c$, t; i< len; i++ ){ 21 | c$ = code[i]; 22 | if( c$=="[" ){ tmp.push(i) } 23 | if( c$=="]" ){ t=tmp.pop(); loopStarts[i] = t; loopEnds[t] = i } 24 | } 25 | 26 | i=0; 27 | while(i" : dp++; data[dp]=data[dp]||0; break; 31 | case "<" : dp--; break; 32 | case "+" : data[dp]=(data[dp]+1)%256; break; 33 | case "-" : data[dp]=(data[dp]+255)%256; break; 34 | case "." : out.push(String.fromCharCode(data[dp])); break; 35 | case ":" : out.push(data[dp]); break; 36 | case "," : data[dp]=inp.shift().charCodeAt(0); break; 37 | case ";" : data[dp]=+inp.shift(); break; 38 | case "[" : i = data[dp] ? i : loopEnds[i]; break; 39 | case "]" : i = data[dp] ? loopStarts[i]-1 : i; break; 40 | } 41 | i++ 42 | } 43 | 44 | return out; 45 | } --------------------------------------------------------------------------------