13.07.2015 Aufrufe

Monaden

Monaden

Monaden

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Monaden</strong>3.3 Ein alternierender ParserAbschliessend soll noch ein alternierender Parser untersucht werden.Ein solcher Parser liefert nicht – wie der sequenzierende Parser – nur einenParse (im obigen Fall zwei Elemente) zurück, sondern versucht, mehrere –alternative – Parses durchzuführen. Dazu definieren wir uns zwei neueFunktionen:zero:: M azero x = [](⊕):: M a → M a → M a(m ⊕ n) x = m x ++ n xDer Parser zero nimmt die Eingabe x entgegen, versagt jedoch immer. DerParser m ⊕ n nimmt die Eingabe x entgegen und liefert alle möglichenParses von m angewendet auf die Eingabe x sowie alle möglichen Parsesvon n angewendet auf die selbe Eingabe x zurück.Dies nun ist der Parser, der entweder ein oder zwei Elemente derEingabe parst:oneOrTwoItemsoneOrTwoItems:: M String= (item λa. unit [a]) ⊕(item λa. item λb. unit [a, b])Erneut einige Beispiele zu diesem Parser:oneOrTwoItems "" = []oneOrTwoItems "M" = [("M","")]oneOrTwoItems "Monade"= [("M","onade"), ("Mo","nade")]Das letzte Beispiel liefert zwei alternative Parses. Dies zeigt, dass mandurch Alternierung mehrdeutige Parser erhalten kann.16 Julian Mehnle

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!