我在测试简单的Book DSL的Scala Parser Combinator功能时遇到了问题.
首先是一本书类:
case class Book (name:String,isbn:String) {
def getNiceName():String = name+" : "+isbn
}
Run Code Online (Sandbox Code Playgroud)
接下来,有一个简单的解析器:
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) …Run Code Online (Sandbox Code Playgroud)