2012-12-08 11 views
6

मैं स्कैला के लिए नया हूं, और अपने उत्कृष्ट संयोजक पार्सर लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं। मैं संकलित करने के लिए इस कोड को प्राप्त करने की कोशिश कर रहा है:स्केल में पार्सर्स सफलता पर पैटर्न मिलान

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) 
} 
... 

लेकिन मैं इन त्रुटियों को प्राप्त हो रही है:

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

: की तरह अलग अलग चीजों की

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) 

मैं कोशिश की है बहुत सारे और

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

और

import scala.util.parsing.combinator.Parsers.Success 

लेकिन मुझे संकलन करने के लिए यह प्रतीत नहीं होता है। मुझे यकीन है कि शायद कुछ स्पष्ट है जो मुझे याद आ रही है, लेकिन मैं थोड़ी देर के लिए इस पर रहा हूं, और Google के पास इसका कोई अच्छा उदाहरण प्रतीत नहीं होता है।

धन्यवाद!

उत्तर

12

आपको ParseResult के लिए पूर्ण पथ निर्दिष्ट करने की आवश्यकता है, जिसमें आपके Parsers उदाहरण शामिल हैं।

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) 
} 

ध्यान दें कि आप भी इन आयात कर सकता है यदि आप थोड़ा अतिरिक्त वाक्यात्मक सुविधा चाहते हैं:

import parser.{ Error, Failure, Success } 

अब आप अपने मूल संस्करण अपेक्षा के अनुरूप काम करेंगे उदाहरण के लिए।

+1

आह अब मैं देखता हूं। सफलता/विफलता/त्रुटि पार्सर्स के उदाहरण का सदस्य बनने जा रही है। धन्यवाद! –

संबंधित मुद्दे