Problemas do analisador do Scala

Estou tendo problemas para testar a funcionalidade do Scala Parser Combinator para um DSL de livro simples.

Em primeiro lugar, há uma aula de livros:

case class Book (name:String,isbn:String) {
def getNiceName():String = name+" : "+isbn
}

Em seguida, há o analisador simples:

object BookParser extends StandardTokenParsers {
  lexical.reserved += ("book","has","isbn")

  def bookSpec  = "book" ~> stringLit ~> "has" ~> "isbn" ~> stringLit ^^ {
            case "book" ~ name ~ "has" ~ "isbn" ~ isbn => new Book(name,isbn) }

  def parse (s: String) = {
    val tokens = new lexical.Scanner(s)
    phrase(bookSpec)(tokens)
  }

  def test (exprString : String) = {
     parse (exprString) match {
         case Success(book) => println("Book"+book.getNiceName())
     }
  }

  def main (args: Array[String]) = {
     test ("book ABC has isbn DEF")
  }   
}

Estou recebendo uma série de erros tentando compilar isso - alguns que me parecem estranhos ao tentar desconstruir os outros exemplos na internet. Por exemplo, a função bookSpec aparece quase idêntica aos outros exemplos?

Esta é a melhor maneira de construir um analisador simples como este?

obrigado

questionAnswers(2)

yourAnswerToTheQuestion