wie scala parser fehlschlägt

8

Ich habe so etwas:

%Vor%

Und mein Problem ist, dass ich wirklich möchte, dass der Parser stored_val fehlschlägt, so dass andere Parser die Chance haben, die Eingabe anzupassen. Aber was jetzt passiert, ist, dass die Karte wirft, wenn sie den Wert nicht finden kann.

Ich habe versucht, stored_val wie folgt zu implementieren:

%Vor%

Aber das Problem mit dem Fehler ist Parser [Nothing], der ein anderer Typ als String ist.

    
Kevin 08.02.2011, 23:45
quelle

2 Antworten

3

Wenn Sie den Inhalt der Zeichen außerhalb von Regex überprüfen möchten, sollten Sie StandardTokenParser . Insbesondere

%Vor%
  

Ein Parser, der Eingabeelemente vergleicht, die ein gegebenes Prädikat erfüllen    elem(kind, p) ist erfolgreich, wenn die Eingabe mit einem Element e' beginnt, für das p(e) wahr ist.

Bearbeiten : Beispiele für den Standard-Token-Parser finden Sie in Jim McBeaths Artikel zu Scala Parser Combinators . Ich habe eine schnelle Änderung am ersten Beispiel vorgenommen, um elem zu demonstrieren. Es ist ein einfacher Parser, der nur aus ungeraden Zahlen besteht:

%Vor%

Speichern Sie das obige als ExpressionParser.scala und laden Sie es wie folgt in REPL:

%Vor%     
Eugene Yokota 09.02.2011, 03:47
quelle
8

Sie können den ^? -Kombinator verwenden, der eine Teilfunktion akzeptiert ( Scaladoc ):

%Vor%

Ich habe ein vollständiges Beispiel gedrückt mit testet nach Github.

>     
lachdrache 20.02.2013 15:19
quelle

Tags und Links