Ich schreibe einen monadischen Parser mit Alex und Happy in Haskell.Benutzerdefinierte Fehler beim Parsen anzeigen Happy Haskell
Meine Fehlerfunktion ist wie folgt definiert:
parseError :: Token -> Alex a
parseError _ = alexError "error occurred"
Wie kann ich benutzerdefinierte Fehler (wie falscher Typ bei dem Versuch, eine Zeichenfolge in eine Zahl hinzuzufügen) senden während der Analyse?
UPDATE
Der Parser muss nicht die Typprüfung tun, ich bin in der Produktion zu tun es, weil ich den Überblick über den Operanden-Typen halten. Wie in einem Kommentar gesagt, kann ich nicht die parseError
verwenden, gibt es also eine Möglichkeit, einen Fehler zu drucken und den Parser zu stoppen?
nur eine andere Zeichenfolge übergeben als '„Fehler aufgetreten“' auf ' alexError' ...? –
Ok, aber ich muss den String aus meiner Produktionsregel übergeben, und 'parseError' Funktion nimmt nur einen' Token' Parameter, nicht irgendeine Zeichenfolge ich möchte – zeb
Ich gebe zu, dass ich nicht sehr vertraut mit Alex oder glücklich, also vergeben ich, wenn das eine dumme Frage ist, aber: wenn 'parseError' nicht das tut, was Sie wollen, warum nicht' parseError' ändern, oder vermeiden, es ganz zugunsten der 'alexError'-Funktion zu verwenden, die das tut, was Sie wollen? –