Ich möchte diese Grammatikregel mithilfe der Haskell-Parsec-Bibliothek implementieren:
%Vor% Welche Parser-Regel akzeptiert eine optionale (d. h. möglicherweise leere) Zeichenfolge? Wenn der String, den er akzeptiert, nicht leer ist, kann er konsumiert werden, indem er null oder mehr Vorkommen der Parser a
b
oder c
durchläuft, aber die akzeptierte Zeichenfolge durch den äußersten% ?
optionalen Parser muss entweder vom Parser a
oder b
konsumiert werden, aber nicht von c
. Hier ist ein Beispiel:
Ein erster Versuch könnte so aussehen:
%Vor% Aber die many
verbraucht nur alle Zeichen "a", "b" und "c" in jedem Testfall, so dass a <|> b
keine Zeichen übrig bleiben.
Die Frage :
Was ist die korrekte Implementierung von ((a | b | c)* (a | b))?
unter Verwendung von Parsec-Kombinatoren, um myParser
?