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.
Wenn Sie den Inhalt der Zeichen außerhalb von Regex überprüfen möchten, sollten Sie StandardTokenParser
. Insbesondere
Ein Parser, der Eingabeelemente vergleicht, die ein gegebenes Prädikat erfüllen
elem(kind, p)
ist erfolgreich, wenn die Eingabe mit einem Elemente'
beginnt, für dasp(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:
Speichern Sie das obige als ExpressionParser.scala
und laden Sie es wie folgt in REPL:
Sie können den ^?
-Kombinator verwenden, der eine Teilfunktion akzeptiert ( Scaladoc ):
Ich habe ein vollständiges Beispiel gedrückt mit testet nach Github.
>Tags und Links scala