Haskell parsec: 'viele' Kombinatoren in einem 'optionalen' Kombinator

9

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:

%Vor%

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 ?

zu definieren?     
Rob Stewart 19.01.2016, 01:47
quelle

1 Antwort

4

Wir können dies auch etwas anders angeben: c in Ihrem Parser kann nur erfolgreich sein, wenn ein Token folgt, was mit einem einzelnen lookAhead erledigt werden kann:

%Vor%     
Zeta 19.01.2016, 04:45
quelle

Tags und Links