2010-03-13 5 views
22

Ich habe gelesen, dass Haskell Parser-Kombinatoren (in Parsec) kontextsensitive Grammatiken analysieren können. Gilt das auch für Scala-Parser-Kombinatoren? Wenn ja, ist das was die "in" (aka ">>") Funktion ist?Wie vergleichen Scala-Parser-Kombinierer mit Haskells Parsec?

Was sind einige Stärken/Schwächen von Scalas Implementierung von Parser-Kombinatoren, vs Haskell's? Akzeptieren sie die gleiche Klasse von Grammatiken? Ist es einfacher, Fehlermeldungen zu generieren oder andere nützliche Dinge mit dem einen oder anderen zu tun?

Wie passt das Packrat-Parsing (eingeführt in Scala 2.8) in dieses Bild?

Gibt es eine Webseite oder eine andere Ressource, die zeigt, wie verschiedene Betreiber/Funktionen/DSL-Zucker von der Implementierung einer Sprache auf die anderen übersetzt?

Antwort

14

Sie haben viele Fragen!

Parsec Im Vergleich zu der Scala Umsetzung von Parsec

Keiner Vergleiche hier gemacht hat (die nur eine von vielen Haskell Parser combinator Bibliotheken ist), wie die Scala-Code ist ziemlich neu, aber überprüfen Sie die Dokumentation:

Beachten Sie, dass Haskell viele andere Parser-Kombinator-Bibliotheken hat, wenn Sie an diesem Ansatz interessiert sind, z.

Was einige Stärken/Schwächen der Scala-Implementierung von Parser Kombinatoren sind, gegen Haskell?

Der Haskell-Code ist mehr als ein Jahrzehnt alt, gut verstanden, und es gibt viele Beispiele, viele Dokumentationen und Benutzerfälle. Scalas Sachen sind relativ neu.

packrat Parsen

packrat Parsing ist ganz anders. Das Original packrat paper wurde in Haskell entwickelt, ist aber inzwischen weit verbreitet.

Gibt es eine Webseite oder eine andere Ressource, die zeigt, wie verschiedene Betreiber/Funktionen/DSL-Zucker von der Implementierung einer Sprache auf die anderen übersetzt?

Nein, aber das wäre cool. Fast alle (?) Parser-Kombinator-Bibliotheken basieren jedoch auf der bahnbrechenden Parsec-Implementierung, so dass sie viel mit dem ursprünglichen Parsec teilen.

7

Es gibt auch die folgenden technischen Bericht:

Parser combinators in Scala

Parser Kombinatoren sind bekannt in funktionalen Programmiersprachen wie Haskell. In diesem Artikel beschreiben wir, wie sie als Bibliothek in Scala, einer funktionalen objektorientierten Sprache, implementiert werden. Dank der flexiblen Syntax von Scala sind wir in der Lage, die von dedizierten Parser-Generatoren unterstützte EBNF-Notation zu approximieren. Für den Laien erklären wir zuerst das Konzept der Parser-Kombinatoren, indem wir eine minimale Bibliothek von Grund auf entwickeln. Wir wenden uns dann einer detaillierten Beschreibung der vorhandenen Scala-Bibliothek zu, einschließlich ihrer Unterstützung für die Bezeichnung der Variablenbindung als Teil der Syntax. Wir zeigen einige realistische Beispiele, um den Nutzen unserer Bibliothek zu veranschaulichen.

report.pdf (324K)

+0

@Adriaan Moors: Gibt es eine Publikation, die die Scala 2.8 combinator Parser Bibliothek Ergänzungen adressiert? –

+0

Ich glaube nicht, aber ich werde Tiark fragen - ich habe seit 2.7 an den Parsern nicht gearbeitet. –