Je voudrais implémenter un analyseur pour un langage défini à l'aide de Scala Parser Combinators. Cependant, le logiciel qui va compiler la langue n'implémente pas toutes les fonctionnalités de la langue, donc je voudrais échouer si ces fonctionnalités sont utilisées. J'ai essayé de forger un petit exemple ci-dessous:Erreurs et échecs dans les combinateurs Scala Parser
object TestFail extends JavaTokenParsers {
def test: Parser[String] =
"hello" ~ "world" ^^ { case _ => ??? } |
"hello" ~ ident ^^ { case "hello" ~ id => s"hi, $id" }
}
à savoir, l'analyseur gain de cause sur « bonjour » + un certain identifiant, mais échoue si l'identifiant est « monde ». Je vois qu'il existe des parseurs fail() et err() dans la classe Parsers, mais je n'arrive pas à comprendre comment les utiliser, car ils retournent Parser [Nothing] au lieu d'un String. La documentation ne semble pas couvrir ce cas d'utilisation ...
C'est exactement ce que je cherchais. Les opérateurs >>, ~> (et <~) sont-ils documentés quelque part (en dehors du Scaladoc qui n'était pas assez détaillé pour moi)? – scand1sk
@ scand1sk: Voir la classe [Parsers # Parser] (http://www.scala-lang.org/api/current/index.html#scala.util.parsing.combinator.Parsers$Parser) pour la documentation. – senia
Je suppose que '" bonjour "~" monde ">>' est une faute de frappe, il devrait y avoir '" bonjour "~>" monde ">>' pour utiliser '$ x'. – senia