Es ist möglich, ein Dokument mit einem einzigen Durchgang von einem Zustandsautomaten aus zu analysieren. Was ist der Vorteil von zwei Durchgängen, dh. Haben Sie einen Lexer zum Konvertieren von Text in Token und einen Parser zum Testen der Produktionsregeln für diese Token? Warum nicht einen einzigen Durchgang haben, der die Produktionsregeln direkt auf den Text anwendet?
15
Antworten:
Sie müssen sie nicht trennen. Die Leute kombinieren sie zu scannerlosen Parsern .
Der Hauptnachteil von scannerlosen Parsern scheint zu sein, dass die resultierenden Grammatiken ziemlich kompliziert sind - komplizierter als die entsprechende Kombination eines regulären Ausdrucks, der Lexing ausführt, und einer kontextfreien Grammatik, die Parsing für den Token-Stream ausführt. Insbesondere Grammatiken für das scannerlose Parsen neigen zur Mehrdeutigkeit. Es ist einfacher, Mehrdeutigkeiten für Grammatiken zu beseitigen, die an einem Token-Stream arbeiten.
Ein pragmatischer Vorteil der Verwendung einer dedizierten Vorab-Lexing-Phase besteht darin, dass Sie den nachfolgenden Parser nicht mit lexikalischen Details koppeln. Dies ist nützlich während der frühen Entwicklung von Programmiersprachen, wenn sich die lexikalischen und syntaktischen Details immer noch häufig ändern.
quelle