간단한 Book DSL에 대한 스칼라 파서 결합 자 기능을 테스트하는 데 문제가 있습니다. - 일부가 보이지스칼라 파서 문제
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")
}
}
나는 이것을 컴파일하려고 오류의 범위를 받고 있어요 :
case class Book (name:String,isbn:String) {
def getNiceName():String = name+" : "+isbn
}
다음, 간단한 파서가 :
첫째 책 클래스가 인터넷에있는 다른 예제를 해체하려고 할 때 이상합니다. 예를 들어 bookSpec 함수는 다른 예제와 거의 동일하게 나타납니다.
이렇게하면 간단한 파서를 만드는 가장 좋은 방법일까요?
감사합니다.
우수 대답은 당신을 감사합니다 - 현재 및 향후의 스칼라 모든 책을 통해 진행되고있다, 그리고이 두 가지보다 더 나은 답변입니다 :
는이처럼 쓸 수 나는 그것을 처리해야한다. (마틴 오더 스키 (Martin Odersky 's), Wampler & Payne (Wampler & Payne)) – ShaunL