Question

J'ai fait quelques recherches sur le développement d'un DSL dans Visual Studio. Au début, j'ai découvert qu'il existe un SDK de visualisation et de modélisation pour VS2010. Il a un outil appelé outil DSL. Mais il semble que ce soit uniquement pour le développement de DSL graphique.

Ensuite, j'ai vu des articles disant que "Oslo" est un outil pour développer un DSL textuel, qui "était" un produit Microsoft - Microsoft ne prend plus en charge l'outil. http://blogs.msdn.com/b/modelcizen/archive/2010/09/22/update-on-sql-server-modeling-ctp-repository-modeling-services-quot-quadrant-quot-and-quot- m-quot.aspx

Par conséquent, je voudrais savoir si je veux développer un DSL textuel, quel outil est le meilleur? Que pensez-vous si j'implémente un analyseur DSL utilisant F # PowerPack avec FSLEX et FSYACC?

Était-ce utile?

La solution

Je développe actuellement plusieurs DSL basés sur du texte externe à l'aide de FSLEX / FSYACC. J'utilisais un analyseur à main, mais je trouve le FSLEX / FSYACC beaucoup plus facile à maintenir au stade de conception.

FSLEX / FSYACC n'est pas aussi sophistiqué que Antlr, mais puisque la plupart des DSL sommes Assez simple, FSLEX / FSYACC est un choix parfaitement solide pour une utilisation dans Visual Studio. Et garder le DSLS simple est une bonne chose, car ils sont destinés à être restreints et simples à apprendre.

Je trouve que le livre de Martin Fowler est une bonne ressource, moins pour les exemples et les détails que comme encyclopédie des idées DSL. Sa discussion sur l'utilisation et d'autres aspects de conception des DSL méritent également d'être lues. Comme les Toumas l'ont indiqué, il ne couvre ni les langages F # ou fonctionnels. M. Fowler écrit qu'il n'avait pas l'expérience de ces sujets pour mettre le livre sur le marché en temps opportun.

Ayant loué FSLEX / FSYACC, je souhaite toujours que quelqu'un écrive un bon back-end Antlr pour F #. :)

-Neil

Autres conseils

Je suis fan de DSL intégrés, à la

http://lorgonblog.wordpress.com/2010/04/15/using-vs2010-to-edit-f-source-code-and-a-little-logo-edsl/

http://lorgonblog.wordpress.com/2010/04/16/fun-with-turtle-graphics-in-f/

Où vous utilisez simplement la syntaxe F # avec quelques bons noms de fonction et éventuellement d'autres symétères de syntaxe (listes, workflows, ...) pour obtenir du code qui "semble peut-être que c'est une autre langue" mais qui est en fait juste F #.

Mais oui, pour les DSL externes, vous avez juste besoin d'une chaîne d'outils grammaire / analyseur / etc., et soit FSLEX / FSYACC, ou peut-être Antlr ou FParsec sont différents choix. (Je n'ai pas assez d'expérience avec aucun de ces éléments pour connaître les compromis parmi eux.)

Depuis que j'ai réalisé mon article précédent, j'ai également acheté et lu des parties du livre de Terence Parr «Language Implémentation Patterns». Il est excellent, bien qu'un peu plus technique que le livre de Martin Fowler (avec du matériel supplémentaire, cela pourrait être un «livre de dragon» pour le nouveau millénaire). Les exemples sont fortement basés sur Java et Antlr, mais le texte est la principale chose, donc le livre est utile quel que soit l'environnement de développement du langage.

Fait intéressant, il y a peu de chevauchement entre les deux livres. Le livre de Martin Fowler fait un bon travail pour couvrir la conception et la mise en œuvre des DSL de base, tels que ceux utilisés pour les spécifications et la configuration, tandis que le livre de Terence Parr est plus technique et couvre le royaume s'étendant jusqu'à des langues plus sophistiquées et un code d'octets Machines. Je recommande les deux si vous pouvez budgétiser pour eux, sinon, soit un excellent choix dans son domaine donné.

Martin Fowler a un nouveau livre À propos de DSL: S. Malheureusement, il ne discutera pas beaucoup de choses sur l'outillage ni les langages fonctionnels de Microsoft.

Microsoft ne prend plus en charge l'outil graphique "Quadrant", mais Mgrammar est toujours pris en charge et intégré à SQL Server, non? Mgrammar est le "DSL Making Language".

Pourtant, je dirais que les langages fonctionnels (lire: F #) sont la voie à suivre.

Ce livre a un exemple simple de la façon de faire un DSL avec F #: http://www.manning.com/petricek/Et Google trouve également de nombreuses autres bonnes références sur ce sujet.

Essayer Mbase, mais cela vaut la peine d'être utilisé si votre DSL est suffisamment compliqué pour nécessiter un compilateur efficace et une grammaire PEG. Sinon, FSYACC est plus que suffisant.

Notre boîte à outils de réingénierie du logiciel DMS est conçue pour gérer les DSL arbitraires (je suis l'architecte).

La plupart des gens pensent que si vous avez un analyseur, vous en avez assez, et c'est techniquement vrai, dans le même sens que si vous avez des transistors, vous pouvez construire un ordinateur.

D'après mon expérience, vous voulez bien plus qu'un simple analyseur: vous avez besoin de moyens de construire des tables de symboles afin que votre générateur sache quelle est la signification d'un identifiant particulier, signifie analyser les spécifications, des moyens de coder facilement votre traduction et d'appliquer des optimisations aux résultats générés.

Dms Fournit toutes ces capacités Pour soutenir la construction DSLS. Et en ce sens, cela va bien au-delà de F #.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top