2010-03-13 14 views
22

Ho letto che i combinatori di parser di Haskell (in Parsec) possono analizzare grammatiche sensibili al contesto. Questo vale anche per i combinatori di parser Scala? Se è così, è questo ciò che la funzione "in" (aka ">>") è per?Come confrontare i combinatori di parser Scala con il Parsec di Haskell?

Quali sono alcuni punti di forza/debolezza dell'implementazione dei combinatori di parser di Scala, rispetto a Haskell? Accettano la stessa classe di grammatiche? È più facile generare messaggi di errore o fare altre cose utili varie con l'una o l'altra?

In che modo l'analisi packrat (introdotta in Scala 2.8) si adatta a questa immagine?

Esiste una pagina Web o un'altra risorsa che mostra come diversi operatori/funzioni/zucchero DSL dall'implementazione di una lingua vengono mappati sull'altro?

risposta

14

Hai molte domande!

Confrontando parsec (che è solo una delle tante librerie parser Combinator Haskell) per l'attuazione Scala di parsec

Nessuno ha fatto paragoni qui, come il codice Scala è abbastanza nuovo, ma controllare la documentazione:

Nota che Haskell ha molte altre librerie di combinatori di parser, se sei interessato a questo approccio, ad es.

Quali sono alcuni punti di forza/debolezza di attuazione della Scala di combinatori parser, vs Haskell di?

Il codice Haskell ha più di un decennio, è ben compreso e ci sono molti esempi, molti documenti e casi di utenti. Le cose di Scala sono relativamente nuove.

packrat parsing

packrat analisi è del tutto diversa. L'originale packrat paper è stato sviluppato in Haskell, ma da allora è diventato più diffuso.

Esiste una pagina Web o un'altra risorsa che mostra come diversi operatori/funzioni/zucchero DSL dall'implementazione di una lingua vengono mappati sull'altro?

No, ma sarebbe bello. Tuttavia, quasi tutte le librerie di combinatori di parser (?) Si basano sull'implementazione pionieristica di parsec, quindi condividono molto con il parsec originale.

7

C'è anche la seguente relazione tecnica:

Parser combinators in Scala

Parser combinatori sono ben noti nei linguaggi di programmazione funzionali come Haskell. In questo articolo, descriviamo come sono implementati come una libreria in Scala, un linguaggio orientato agli oggetti funzionale. Grazie alla sintassi flessibile di Scala, siamo in grado di approssimare da vicino la notazione EBNF supportata da generatori di parser dedicati. Per chi non lo sapesse, per prima cosa spieghiamo il concetto di combinatori di parser sviluppando una libreria minima da zero. Quindi passiamo a una descrizione dettagliata della libreria Scala esistente, incluso il suo supporto per denotare l'associazione variabile come parte della sintassi. Forniamo diversi esempi realistici per illustrare l'utilità della nostra libreria.

report.pdf (324K)

+0

Mori @Adriaan: C'è una pubblicazione che si rivolge ai Scala 2.8 Combinator aggiunte biblioteca parser? –

+0

Non credo, ma chiederò a Tiark: non ho lavorato ai parser dal 2.7. –

Problemi correlati