Haskell Text.Parsec.Combinator Wahl führt nicht zurück

8

Ich versuche, etwas Text mit Parsec zu analysieren:

%Vor%

Ich erwarte choice , um zu versuchen, "leave" zu treffen, und wenn es fehlschlägt, dann versuche "login" usw. Aber es versucht nur "leave" zu treffen, und wenn es fehlschlägt, gibt es einen Fehler.

%Vor%

Was mache ich falsch?

    
sinan 02.04.2012, 12:25
quelle

1 Antwort

14

Parsec kehrt nicht automatisch so zurück (für Effizienz). Die Regel ist, dass, sobald eine Verzweigung ein Token akzeptiert, alternative Verzweigungen abgeschnitten werden. Die Lösung besteht darin, ein explizites Backtracking mit try (string "leave") und try (string "login") etc hinzuzufügen.

In Ihrem Beispiel ist das Zeichen 'l' das Token, das Parsec an den ersten Zweig "leave" weiterleitet und die nächsten Zweige von "login" und "join" abbricht.

Mehr Details in Real World Haskell (Buch, online) auf Parsec .

    
Chris Kuklewicz 02.04.2012, 12:34
quelle

Tags und Links