Generalisierte Bottom-up Parser Combinators in Haskell

7

Ich frage mich, warum es keine verallgemeinerten Parser-Kombinatoren für das Bottom-up-Parsing in Haskell gibt wie ein Parsec-Kombinator für das Top-Down-Parsing.
(Ich konnte einige Forschungsarbeiten im Jahr 2004 finden, aber nichts nach dem Ссылка Ссылка )

Gibt es einen bestimmten Grund dafür, es nicht zu erreichen?

    
Panini 05.06.2014, 02:57
quelle

3 Antworten

11

Dies liegt an referenzieller Transparenz. So wie keine Funktion den Unterschied zwischen

ausmachen kann %Vor%

Keine Funktion kann den Unterschied zwischen einer Grammatik, die ein endlicher Graph ist, und einer Grammatik, die ein unendlicher Baum ist, unterscheiden. Bottom-Up-Parsing-Algorithmen müssen in der Lage sein, die Grammatik als Graph zu erkennen, um alle möglichen Parsing-Zustände aufzählen zu können.

Die Tatsache, dass Top-down-Parser ihre Eingaben als unendliche Bäume sehen, erlaubt ihnen, leistungsfähiger zu sein, da der Baum rechnerisch komplexer sein könnte, als jeder Graph sein könnte; zum Beispiel

%Vor%

akzeptiert jede endliche aufsteigende Folge von Zahlen beginnend bei n . Dies hat unendlich viele verschiedene Parsing-Zustände. (Es könnte möglich sein, dies in einer kontextfreien Weise darzustellen, aber es wäre schwierig und erfordert mehr Verständnis des Codes, als eine Parsing-Bibliothek in der Lage ist, denke ich)

Eine Bottom-Up-Kombinator-Bibliothek könnte geschrieben werden, obwohl sie etwas hässlich ist, indem sie verlangt, dass alle Parser so "etikettiert" werden, dass

  • Das gleiche Label bezieht sich immer auf den gleichen Parser und
  • Es gibt nur eine endliche Menge von Labels

An diesem Punkt sieht es mehr nach einer traditionellen Spezifikation einer Grammatik aus als nach einer kombinatorischen Spezifikation. Es könnte jedoch immer noch nett sein; Sie müssten nur rekursive Produktionen kennzeichnen, die beliebig große Regeln wie numSequence ausschließen würden.

    
luqui 05.06.2014 03:17
quelle
4

Wie luquis Antwort zeigt, ist eine Bottom-Up-Parser Kombinator -Bibliothek nicht realistisch. Wenn jemand auf diese Seite kommt und nach Haskells Bottom-Up-Parser Generator sucht, heißt das, wonach du suchst der Happy-Parser-Generator . Es ist wie yacc für haskell.

    
John F. Miller 05.06.2014 05:01
quelle
4

Wie oben schon erwähnt: Haskells Behandlung von rekursiven Parser-Definitionen erlaubt keine Definition von Bottom-Up-Parsing-Bibliotheken. Bottom-up-Parsing-Bibliotheken sind jedoch möglich, wenn Sie rekursive Grammatiken anders darstellen. Mit Entschuldigungen für die Eigenwerbung ist eine (Forschungs-) Parser-Bibliothek, die einen solchen Ansatz verwendet, Grammatik-Kombinatoren . Es implementiert eine Grammatikumwandlung namens uniforme Paull-Transformation, die mit dem Top-down-Parseralgorithmus kombiniert werden kann, um einen Bottom-up-Parser für die ursprüngliche Grammatik zu erhalten.

    
Dominique Devriese 05.06.2014 20:09
quelle