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!“.

Dr. Peter Braun
Dr. Peter Braun
Professor für Angewandte Informatik

Ich bin Softwareentwickler mit großem Interesse für verteilte Systeme, APIs und modellgetriebener Softwareentwicklung.