J'ai le message d'erreur étrange ci-dessus que je ne comprends pas "valeur Parsers n'est pas un membre du paquet scala.util.parsing.combinator". J'essaie d'apprendre les combinateurs Parser en écrivant un analyseur C étape par étape. J'ai commencé au jeton, donc j'ai les classes:ce qui ne va pas: "value Parsers n'est pas un membre du paquet scala.util.parsing.combinator"?
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
Ceci est aussi simple que je pourrais le faire.
Le code ci-dessous fonctionne très bien, mais si je décommentez la ligne commentée je reçois le message d'erreur ci-dessus:
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)
}
}
Dans le cas où il y a un problème avec ma configuration, j'utilise scala 2.7.6 via le scala-plugin pour intellij. Quelqu'un peut-il nous éclairer à ce sujet? Le message est faux, Parsers
est un membre de scala.util.parsing.combinator
.
--- Suivi
Cette personne http://www.scala-lang.org/node/5475 semble avoir le même problème, mais je ne comprends pas la réponse qu'il a reçu. Quelqu'un peut-il l'expliquer?
Il est également possible de se référer à la classe imbriquée en utilisant la syntaxe 'scala.util.parsing.combinator.Parsers # Parser [CeeExpr]'. Les types imbriqués dans scala sont * dépendants du chemin * (ce qui signifie que le type imbriqué est différent pour chaque * instance * du type externe). La syntaxe '# 'contourne cela. –
Cela n'a rien à voir avec la caractéristique de celui-ci. Cela donnerait le même problème si c'était une classe. –
@Daniel est-ce vrai? Je devrais essayer. Je pensais que si Parser était une classe, alors CeeParser.Parser serait certainement une instance de Parsers.Parser, donc l'importation fonctionnerait. –