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

18

Ho un corso in cui il proffesor 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 su cosa significano le lingue specifiche del dominio.

Questa è la mia attuale comprensione: un linguaggio specifico di un dominio è un linguaggio creato 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.

Non esitare a correggermi se sbaglio.

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

    
posta user1525474 15.10.2012 - 21:16
fonte

5 risposte

11

Il modo più semplice per procedere è un'interfaccia fluente . Questo non richiede affatto strumenti e ti offre un ottimo supporto per IntelliSense, ma devi comunque scrivere le cose in un modo .NET, ad esempio

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

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

    
risposta data 15.10.2012 - 22:46
fonte
10

Puoi provare ANTLR (o un altro strumento per il riconoscimento della lingua) un generatore di parser che è tra l'altro disponibile per dotnet. Nella comunità puoi trovare le definizioni per sql, c # e molte altre lingue.

Secondo google esiste anche il supporto ide:

risposta data 15.10.2012 - 21:37
fonte
3

La tua prima domanda - che cos'è un linguaggio specifico del dominio ... perché questo è troppo grande per rientrare in un commento.

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

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

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 un corso di compilatore al college, due degli strumenti che sono stati utilizzati (e che ho usato da allora) sono lex e yacc. Over at Stack Overflow ... Lex / Yacc per C #?

    
risposta data 15.10.2012 - 22:02
fonte
2

Esiste un SDK di visualizzazione e modellazione per Visual Studio che supporta Text Templating (modelli T4) e lingue specifiche del dominio.

link

    
risposta data 15.10.2012 - 21:39
fonte
1

Questo sito potrebbe essere interessante per te: link . È un linguaggio per la piattaforma .net con funzionalità di metaprogrammazione avanzate. Più recentemente, il progetto è sotto l'ala di JetBrains: link .

    
risposta data 20.10.2012 - 11:41
fonte

Leggi altre domande sui tag