C'è qualcosa in .NET che mi permette di definire una grammatica e generare un linguaggio di programmazione?


18

Ho un corso in cui il professore ci ha chiesto di creare una DSL per il nostro progetto finale. Ci ha presentato nei primi corsi xText con Eclipse. Trattandosi di un nuovo corso, sono ancora un po 'confuso sul significato delle lingue specifiche del dominio.

Questa è la mia attuale comprensione: una lingua specifica del dominio è una lingua creata per problemi specifici nello sviluppo del software. Esempi di DSL sono PHP, SQL, JavaScript e al contrario sono linguaggi come Java, C #, C ++, Ruby ecc.

Sentiti libero di correggermi se sbaglio.

Quello che vorrei sapere: esiste uno strumento per .NET / Visual Studio simile a Xtext, che mi consente di definire una grammatica e di essere autorizzato a generare un linguaggio di programmazione basato su quello con un diagramma di attività?


6
PHP e Javascript non sono proprio DSL. Una DSL è una lingua che affronta un particolare dominio problematico, come i servizi medici. SQL è un DSL perché è specifico per il dominio problematico di lavorare con set di dati relazionali. Vedi en.wikipedia.org/wiki/Domain-specific_language per maggiori informazioni.
Robert Harvey,

Nemerle forse?
cda

Risposte:


11

Il modo più semplice per procedere è un'interfaccia fluida . Ciò non richiede alcuno strumento e ti offre un ottimo supporto IntelliSense, ma devi comunque scrivere le cose in un modo .NET-kinda, come

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

In alternativa, puoi scrivere bellissimi DSL in Boo . C'è un intero libro su questo argomento.


10

Puoi provare ANTLR (o ANother Tool for Language Recognition) un generatore di parser che è tra l'altro disponibile per dotnet. Nella community puoi trovare definizioni per sql, c # e molte altre lingue.

Secondo google esiste anche il supporto ide:


Aggiornamento: ANTLR4 emette solo Java, mentre ANTLR3 supporta ancora C #, ma non vedrà alcun aggiornamento importante.
Stefano Sanfilippo,

3

La tua prima domanda: che cos'è un linguaggio specifico del dominio ... perché è troppo grande per essere inserito in un commento.

Una lingua specifica del dominio è una lingua progettata per funzionare all'interno di un determinato dominio problematico. Ad esempio, all'interno del motore Unreal (utilizzato per gli sparatutto in prima persona), esiste un linguaggio specifico del dominio chiamato UnrealScript che consente di modificare il comportamento del motore Unreal. Questo linguaggio è progettato per risolvere problemi generali ma è piuttosto limitato al suo dominio specifico. Redcode (per corewars) sarebbe un'altra lingua specifica del dominio. La lingua all'interno di Context Free Art è specifica per il suo dominio.

L'idea è che con un linguaggio specifico di dominio, si potrebbe creare un DSL che mappa da vicino il problema a portata di mano. A questo punto, è più facile programmare nel DLS che programmare in un linguaggio generale anche con le librerie aggiunte per gestire il dominio problematico.


Per quanto riguarda la tua seconda domanda: gli strumenti in C # ... Non conosco C # e quindi non conosco bene gli strumenti. Detto questo, quando stavo frequentando una classe di compilatore al college, due degli strumenti che sono stati usati (e che ho usato da allora) sono lex e yacc. Over a Stack Overflow ... Lex / Yacc per C #?



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.