Skip to content

Instantly share code, notes, and snippets.

@tuchida
Created March 11, 2013 14:49
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save tuchida/5134754 to your computer and use it in GitHub Desktop.
Save tuchida/5134754 to your computer and use it in GitHub Desktop.
Brainfuck in sweet.js
macro bf {
case ($body ...) => {
eval('var p = 0, b = [], buf = new Buffer(1);');
_bf($body ...);
}
}
macro _bf {
case (>) => {
eval('p++;');
}
case (<) => {
eval('p--;');
}
case (+) => {
eval('b[p] = -~b[p];');
}
case (-) => {
eval('b[p] = ~-b[p];');
}
case (.) => {
eval('process.stdout.write(String.fromCharCode(b[p]));');
}
case (,) => {
eval('if (require(\'fs\').readSync(process.stdin.fd, buf, 0, 1) > 0) { b[p] = buf[0]; }');
}
case ([]) => {
while (eval('b[p]')) {}
}
case ([$body ...]) => {
while (eval('b[p]')) {
_bf($body ...);
}
}
case (>>) => {
_bf(>) _bf(>)
}
case (>>>) => {
_bf(>) _bf(>) _bf(>)
}
case (> $rest ...) => {
_bf(>) _bf($rest ...)
}
case (>> $rest ...) => {
_bf(>) _bf(>) _bf($rest ...)
}
case (>>> $rest ...) => {
_bf(>) _bf(>) _bf(>) _bf($rest ...)
}
case (<<) => {
_bf(<) _bf(<)
}
case (< $rest ...) => {
_bf(<) _bf($rest ...)
}
case (<< $rest ...) => {
_bf(<) _bf(<) _bf($rest ...)
}
case (++) => {
_bf(+) _bf(+)
}
case (+ $rest ...) => {
_bf(+) _bf($rest ...)
}
case (++ $rest ...) => {
_bf(+) _bf(+) _bf($rest ...)
}
case (--) => {
_bf(-) _bf(-)
}
case (- $rest ...) => {
_bf(-) _bf($rest ...)
}
case (-- $rest ...) => {
_bf(-) _bf(-) _bf($rest ...)
}
case (. $rest ...) => {
_bf(.) _bf($rest ...)
}
case (. $rest ...) => {
_bf(.) _bf($rest ...)
}
// case (... $rest ...) => {
// _bf(.) _bf(.) _bf(.) _bf($rest ...)
// }
case (, $rest ...) => {
_bf(,) _bf($rest ...)
}
case ([] $rest ...) => {
_bf([]) _bf($rest ...)
}
case ([$body ...] $rest ...) => {
_bf([$body ...]) _bf($rest ...)
}
}
bf(+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
------------.<++++++++.--------.+++.------.--------.>+.)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment