2012-12-08 16 views
6

Scala'da yeniyim ve mükemmel birleştirici ayrıştırıcı kitaplığını kullanmaya çalışıyorum. Ben derlemek için bu kodu almak çalışıyorum:Parsers üzerinde desen uyumu Scala'da başarı

import scala.util.parsing.combinator._ 
... 
val r:Parsers#ParseResult[Node] = parser.parseAll(parser.suite,reader) 
r match { 
    case Success(r, n) => println(r) 
    case Failure(msg, n) => println(msg) 
    case Error(msg, n) => println(msg) 
} 
... 

Ama bu hataları almaya devam:

case Parsers#Success(r, n) => println(r) 

: gibi farklı şeyler

TowelParser.scala:97: error: not found: value Success 
    case Success(r, n) => println(r) 
    ^
TowelParser.scala:98: error: not found: value Failure 
    case Failure(msg, n) => println(msg) 

TowelParser.scala:99: error: object Error is not a case class constructor, nor does it have an unapply/unapplySeq method 
    case Error(msg, n) => println(msg) 

Denedim çok ve

ve

( ) Ancak bunu derlemek mümkün görünmüyor. Eminim ki muhtemelen kayıp bir şey var, ama ben bir süredir var ve google bunun iyi örnekleri yok gibi görünüyor.

Teşekkürler!

cevap

12

Parsers örneğinizi içeren ParseResult için tam yolu belirtmeniz gerekir. beklendiği gibi

import parser.{ Error, Failure, Success } 

Şimdi orijinal versiyonu çalışır: Eğer fazladan sözdizimsel kolaylık istiyorsanız ayrıca alabiliriz

import scala.util.parsing.combinator._ 

object parser extends RegexParsers { def digits = "\\d+".r ^^ (_.toInt) } 

val res = parser.parseAll(parser.digits, "42") 

res match { 
    case parser.Success(r, n) => println(r) 
    case parser.Failure(msg, n) => println(msg) 
    case parser.Error(msg, n) => println(msg) 
} 

Not: Örneğin.

+1

Şimdi görüyorum. Başarı/Hata/Hata Parsers örneğinin bir üyesi olacak. Teşekkürler! –