Chciałbym zaimplementować analizator składni dla określonego języka za pomocą łączników Scala Parser. Jednak oprogramowanie, które skompiluje ten język, nie implementuje całej funkcjonalności języka, więc chciałbym zawodzić, jeśli te funkcje są używane. Starałem się wykuć mały przykład poniżej:Błędy i niepowodzenia w łącznikach Scala Parser Kombinatory
object TestFail extends JavaTokenParsers {
def test: Parser[String] =
"hello" ~ "world" ^^ { case _ => ??? } |
"hello" ~ ident ^^ { case "hello" ~ id => s"hi, $id" }
}
tj parser powiedzie na „Hello” + jakiś identyfikator, ale nie powiedzie się, jeśli identyfikator jest „świat”. Widzę, że istnieją parsery fail() i err() w klasie Parsers, ale nie mogę wymyślić, jak z nich korzystać, ponieważ zwracają Parser [Nothing] zamiast String. Dokumentacja nie wydaje się pokrywać takim przypadku należy ...
To jest dokładnie to, czego szukasz. Czy operatorzy >>, ~> (i <~) są udokumentowani gdzieś (poza Scaladoc, który nie był dla mnie wystarczająco szczegółowy)? – scand1sk
@ scand1sk: Zobacz dokumentację w klasie ['Parsers # Parser'] (http://www.scala-lang.org/api/current/index.html#scala.util.parsing.combinator.Parsers$Parser). – senia
Chyba "cześć" ~ "świat" >> "to literówka, powinno być" "witaj" ~> "świat" >> "aby użyć' $ x'. – senia