2012-12-08 20 views
6

Tôi mới sử dụng Scala và đã cố gắng sử dụng thư viện trình phân tích cú pháp tuyệt vời của nó. Tôi đã cố gắng để có được mã này để biên dịch:Kết hợp mẫu trên phân tích cú pháp thành công tại Scala

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

Nhưng tôi tiếp tục nhận được các lỗi này: rất nhiều

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) 

Tôi đã thử nhiều thứ khác nhau như:

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

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

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

Nhưng tôi dường như không thể thực hiện việc này để biên dịch. Tôi chắc chắn rằng có lẽ một cái gì đó rõ ràng tôi đang mất tích, nhưng tôi đã ở đó một lúc, và google dường như không có bất kỳ ví dụ tốt về điều này.

Cảm ơn!

Trả lời

12

Bạn cần chỉ định đường dẫn đầy đủ cho ParseResult, bao gồm phiên bản Parsers của bạn. Ví dụ:

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

Lưu ý rằng bạn cũng có thể nhập những nếu bạn muốn thêm một chút thuận tiện cú pháp:

import parser.{ Error, Failure, Success } 

Bây giờ phiên bản ban đầu của bạn sẽ làm việc như mong đợi.

+1

Ah tôi thấy bây giờ. Thành công/Thất bại/Lỗi sẽ là thành viên của thể hiện của Phân tích cú pháp. Cảm ơn! –

Các vấn đề liên quan