Brainfuck Interpreter in 40 Lines of Scala
Ever heard of the esoteric programming language Brainfuck? It only has eight commands, very minimalistic, very unreadable but Turing complete. I spent some time to develop an interpreter for this language in Scala. Here it is:
import Array._
object Brainfuck
{
def run( bf : Array[Char] ) = {
var memory : Array[Integer] = Array.fill[Integer](30000)(0)
var memptr : Integer = 0
var prgptr : Integer = 0
def jump( dir : Int ) = {
var loop = 1
while( loop > 0 ) {
prgptr += dir
loop += (bf( prgptr ) match {
case '[' => dir
case ']' => -dir
case _ => 0
})
}
}
while( prgptr < bf.size ) {
bf(prgptr) match {
case '>' => memptr += 1
case '<' => memptr -= 1
case '+' => memory(memptr) += 1
case '-' => memory(memptr) -= 1
case '.' => print( memory(memptr).toChar )
case ',' => memory(memptr) = readInt()
case '[' => if( memory( memptr ) == 0 ) jump( 1 )
case ']' => if( memory( memptr) != 0 ) jump( -1 )
}
prgptr += 1
}
}
def main( args: Array[String] ) = {
run( "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.".toCharArray() )
}
}
As you might guess, the example program will print „Hello World!“.