我有上面奇怪的錯誤信息,我不明白「值解析器不是包scala.util.parsing.combinator成員」。什麼是錯的:「值解析器不是包scala.util.parsing.combinator成員」?
我試圖通過逐步編寫一個C語法分析器來學習分析器組合器。我開始在令牌,所以我有類:
import util.parsing.combinator.JavaTokenParsers
object CeeParser extends JavaTokenParsers {
def token: Parser[CeeExpr] = ident ^^ (x => Token(x))
}
abstract class CeeExpr
case class Token(name: String) extends CeeExpr
這是儘可能簡單,因爲我可以做到這一點。
下面的代碼工作正常,但如果我去掉了註釋行,我得到上面給出的錯誤信息:
object Play {
def main(args: Array[String]) {
//val parser: _root_.scala.util.parsing.combinator.Parsers.Parser[CeeExpr] CeeParser.token
val x = CeeParser.token
print(x)
}
}
在情況下,它是我的設置有問題,我使用的是2.7.6階通過intellij的scala-plugin。任何人都可以對此有所瞭解嗎?該消息是錯誤的,Parsers
是scala.util.parsing.combinator
的成員。
---後續
此人http://www.scala-lang.org/node/5475似乎有同樣的問題,但我不明白,他給出了答案。任何人都可以解釋嗎?
也可以使用語法'scala.util.parsing.combinator.Parsers#Parser [CeeExpr]'來引用嵌套類。 scala中的嵌套類型是* path dependent *(表示外部類型的每個* instance *的嵌套類型不同)。 '#'語法解決了這個問題。 – 2010-03-27 16:16:22
這與它的特質無關。如果它是一個班級,它會出現同樣的問題。 – 2010-03-27 16:44:09
@丹尼爾是真的嗎?我應該嘗試一下。我想如果Parser是一個類,那麼CeeParser.Parser肯定會是Parsers.Parser的一個實例,所以導入就可以工作。 – 2010-03-29 09:22:19