我有检验出的Scala解析器组合功能的一个简单的图书DSL的问题。Scala的解析器问题
首先有一本书类:
case class Book (name:String,isbn:String) {
def getNiceName():String = name+" : "+isbn
}
接下来是简单的解析器:
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")
}
}
我得到了一系列试图编译这个错误的 - 其中一些似乎在尝试解构互联网上的其他例子时,我很陌生。例如,bookSpec函数与其他示例几乎相同?
这是建立一个简单的解析器这样的最佳方式?
感谢
优秀的答案谢谢 - 已经历所有的当前和未来的Scala的书籍,这是比两个更好的答案我有哪些处理方式(Martin Odersky以及来自Wampler&Payne的) – ShaunL 2009-08-28 23:48:47