├── index.html
├── brainfuck.html
└── interpreter.js
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
36 |
37 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/brainfuck.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 | }
--------------------------------------------------------------------------------