23 votes

Comment les combinateurs d'analyseurs Scala se comparent-ils à Parsec de Haskell ?

J'ai lu que les combinateurs d'analyseurs Haskell (dans Parsec) peuvent analyser des grammaires sensibles au contexte. Est-ce également vrai pour les combinateurs d'analyseurs Scala ? Si oui, est-ce à cela que sert la fonction "into" (alias ">>") ?

Quelles sont les forces et les faiblesses de l'implémentation des combinateurs d'analyseurs de Scala par rapport à celle de Haskell ? Acceptent-ils la même classe de grammaires ? Est-il plus facile de générer des messages d'erreur ou de faire d'autres choses utiles avec l'un ou l'autre ?

Comment l'analyse syntaxique de packrat (introduite dans Scala 2.8) s'inscrit-elle dans ce contexte ?

Existe-t-il une page web ou une autre ressource qui montre comment les différents opérateurs/fonctions/sucre DSL de l'implémentation d'une langue se transposent dans celle de l'autre ?

15voto

Don Stewart Points 94361

Vous avez beaucoup de questions !

Comparaison de parsec (qui n'est qu'une des nombreuses bibliothèques de combinateurs d'analyseurs Haskell) avec l'implémentation Scala de parsec

Personne n'a fait de comparaisons ici, car le code Scala est assez récent, mais consultez la documentation :

Notez que Haskell dispose de nombreuses autres bibliothèques de combinateurs d'analyseurs, si cette approche vous intéresse, par ex.

Quelles sont les forces et les faiblesses de l'implémentation des combinateurs d'analyseurs de Scala par rapport à celle de Haskell ?

Le code Haskell a plus de dix ans, il est bien compris et il existe de nombreux exemples, une documentation abondante et des cas d'utilisation. Le code de Scala est relativement nouveau.

analyse syntaxique du packrat

L'analyse du packrat est totalement différente. L'original papier "packrat a été développé en Haskell, mais est devenu depuis plus répandu.

Existe-t-il une page web ou une autre ressource qui montre comment les différents opérateurs/fonctions/sucre DSL de l'implémentation d'une langue s'appliquent à celle de l'autre ?

Non, mais ça serait cool. Cependant, presque toutes les bibliothèques de combinateurs d'analyseurs sont basées sur l'implémentation pionnière de parsec, donc elles partagent beaucoup avec le parsec original.

7voto

Adriaan Moors Points 1765

Il y a aussi le rapport technique suivant :

Combinateurs d'analyseurs en Scala

Les combinateurs d'analyseurs sont bien connus dans les langages de programmation fonctionnelle tels que Haskell. Dans cet article, nous décrivons comment ils sont implémentés sous forme de bibliothèque en Scala, un langage fonctionnel orienté objet. Grâce à la syntaxe flexible de Scala, nous sommes en mesure de nous rapprocher de la notation EBNF supportée par les générateurs d'analyseurs dédiés. Pour les non-initiés, nous expliquons d'abord le concept des combinateurs d'analyseurs en développant une bibliothèque minimale à partir de zéro. Nous nous tournons ensuite vers une description détaillée de la bibliothèque Scala existante, y compris son support pour dénoter la liaison des variables comme faisant partie de la syntaxe. Nous fournissons plusieurs exemples réalistes pour illustrer l'utilité de notre bibliothèque.

rapport.pdf (324K)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X