Sollte ich ein Lexer verwenden, wenn ich eine Parser-Kombinator-Bibliothek wie Parsec verwende?
Wenn Sie einen Parser in eine Parser-Kombinator-Bibliothek wie Haskell's Parsec schreiben, haben Sie normalerweise zwei Möglichkeiten:
Schreiben Sie ein Lexer, um Ihr zu teilenString
In Token eingeben und dann analysieren[Token]
Schreiben Sie direkt Parser-Kombinatoren aufString
Die erste Methode erscheint oft sinnvoll, da viele Parsing-Eingaben als durch Leerzeichen getrennte Token verstanden werden können.
An anderen Orten habe ich Leute gesehen, die gegen das Tokenisieren (oderScannen oderlexen, wie manche es nennen), wobei die Einfachheit als Hauptgrund angeführt wird.
Was sind allgemeine Kompromisse zwischen dem Lexen und dem Nicht-Tun?