Vorrei implementare un parser per alcune lingue definite utilizzando Scala Parser Combinators. Tuttavia, il software che compilerà la lingua non implementa tutte le funzionalità della lingua, quindi mi piacerebbe fallire se si utilizzano queste funzionalità. Ho cercato di creare un piccolo esempio di seguito:Errori e malfunzionamenti in Parser Combinators di Scala
object TestFail extends JavaTokenParsers {
def test: Parser[String] =
"hello" ~ "world" ^^ { case _ => ??? } |
"hello" ~ ident ^^ { case "hello" ~ id => s"hi, $id" }
}
cioè il parser riesce a "ciao" + un identificativo, ma non riesce se l'identificatore è "mondo". Vedo che esistono parser fail() ed err() nella classe Parsers, ma non riesco a capire come usarli, poiché restituiscono Parser [Nothing] al posto di una stringa. La documentazione non sembra coprire questo caso d'uso ...
E 'esattamente quello che stavo cercando. Gli operatori >>, ~> (e <~) sono documentati da qualche parte (al di fuori dello Scaladoc che non era abbastanza dettagliato per me)? – scand1sk
@ scand1sk: vedere la classe ['Parsers # Parser'] (http://www.scala-lang.org/api/current/index.html#scala.util.parsing.combinator.Parsers$Parser) per la documentazione. – senia
Immagino '" ciao "~" mondo ">>' è un refuso, ci dovrebbe essere '" ciao "~>" mondo ">>' per usare '$ x'. – senia