Existe-t-il quelque chose dans .NET qui me permette de définir une grammaire et de générer un langage de programmation?

18

J'ai un cours dans lequel le proffesor nous a demandé de créer une DSL pour notre projet final. Il nous a présenté dans les premiers cours xText avec Eclipse. Ceci étant un nouveau cours, je suis encore un peu flou sur la signification des langages spécifiques au domaine.

Voici ma compréhension actuelle: un langage spécifique à un domaine est un langage créé pour des problèmes spécifiques de développement logiciel. Des exemples de DSL sont PHP, SQL, JavaScript et au contraire des langages comme Java, C #, C ++, Ruby etc.

N'hésitez pas à me corriger si je me trompe.

Ce que je voudrais savoir: existe-t-il un outil pour .NET / Visual Studio similaire à Xtext, qui me permette de définir une grammaire et d'être autorisé à générer un langage de programmation basé sur cela avec un diagramme d'activité?

user1525474
la source
6
PHP et Javascript ne sont pas vraiment des DSL. Une DSL est un langage qui aborde un domaine de problème particulier, comme les services médicaux. SQL est un DSL car il est spécifique au domaine problématique de l'utilisation des ensembles de données relationnelles. Voir en.wikipedia.org/wiki/Domain-specific_language pour plus d'informations.
Robert Harvey
Nemerle peut-être?
Cnd

Réponses:

11

La meilleure façon de procéder est une interface fluide . Cela ne nécessite aucun outil et vous offre une excellente prise en charge IntelliSense, mais vous devez toujours écrire des choses à la manière d'un .NET, telles que

 Mix.Paint(Color.Green).With.Paint(Color.Red);

Alternativement, vous pouvez écrire de belles DSL dans Boo . Il y a un livre entier sur ce sujet.

pdr
la source
10

Vous pouvez essayer ANTLR (ou ANother Tool for Language Recognition) un générateur d'analyseur qui est entre autres disponible pour dotnet. Dans la communauté, vous pouvez trouver des définitions pour sql, c # et de nombreuses autres langues.

Selon Google, il existe également un support IDE:

k3b
la source
Mise à jour: ANTLR4 n'émet que Java, tandis que ANTLR3 prend toujours en charge C #, mais il ne verra aucune mise à jour majeure.
Stefano Sanfilippo
3

Votre première question - qu'est-ce qu'une langue spécifique au domaine ... car elle est trop grande pour tenir dans un commentaire.

Une langue spécifique à un domaine est une langue conçue pour fonctionner dans un domaine à problème particulier. Par exemple, dans le moteur Unreal (utilisé pour les tireurs à la première personne), il existe un langage spécifique au domaine appelé UnrealScript qui permet de modifier le comportement du moteur Unreal. Ce langage est conçu pour résoudre des problèmes généraux mais est plutôt limité à son domaine spécifique. Redcode (pour corewars) serait une autre langue spécifique au domaine. Le langage de Context Free Art est spécifique à son domaine.

L'idée est qu'avec un langage spécifique au domaine, on pourrait créer un DSL qui cartographie de près le problème en question. À ce stade, il est plus facile de programmer dans le DLS que de programmer dans un langage général, même avec les bibliothèques ajoutées pour gérer le domaine problématique.


Quant à votre deuxième question - les outils en C # ... Je ne connais pas C # et donc je ne connais pas bien les outils. Cela dit, à l'époque où je suivais un cours de compilation à l'université, deux des outils qui étaient utilisés (et que j'ai utilisés depuis) ​​sont lex et yacc. Over at Stack Overflow ... Lex / Yacc pour C #?

Communauté
la source