2010-09-03 7 views
9

Sto pensando di scrivere un DSL da eseguire nell'ambiente .Net. Sono molto propenso ad implementarlo in C#, anche se sono flessibile su questo.scrittura di un DSL per la piattaforma .Net

Esiste una risorsa online consigliata che mostra i passaggi principali coinvolti nella scrittura di una DSL per la piattaforma .Net?

Idealmente, vorrei una risorsa che avrebbe fornito almeno una panoramica sui seguenti elementi:

  • 'spec'ing un DSL
  • Come mappare le specifiche per il framework .Net
  • preferibilmente un esempio HelloWorld di un modem DSL banale implementato in un linguaggio .NET

[Edit]

In realtà, ho appena visto this article - ma è leggermente datato. Qualcuno ha un'opinione sul fatto che l'articolo sia un buon punto di partenza o meno (il framework .Net e C# sembrano evolversi ad un ritmo molto rapido)

+0

Puoi guardare ANTLR (http://www.antlr.org/). Non sono sicuro di cosa intendi quando dici di mappare le specifiche a .NET Fx. Stai cercando di costruire un linguaggio e un compilatore che generi codice IL e possa usare facilmente i tipi di FCL? Se sì, allora questo potrebbe non funzionare. Avevo usato ANTLR per analizzare un'espressione di formula (che usava riferirsi alle entità aziendali e alle funzioni personalizzate) ma l'albero analizzato veniva quindi interpretato dal mio programma. – VinayC

+0

Voglio evitare generatori di parser di basso livello/compilatori di compilatori come lexx/yacc/antlr ecc. Fondamentalmente, sto cercando di creare un linguaggio "giocattolo" .Net (come modello iniziale). Per essere più specifico, questo linguaggio "giocattolo" genererà il codice CIL e può utilizzare il CLR. – morpheous

+1

Data la "D" in "DSL", la prima domanda che chiederei è "qual è il dominio?" Un DSL non è sinonimo di "linguaggio giocattolo". Sembra che tu stia mirando a un linguaggio di uso generale piccolo/semplice, non esattamente specifico del dominio. – nerraga

risposta

7

Se si è disposti ad acquistare un libro sull'argomento, consiglio vivamente lo "DSLs in Boo: Domain Specific Languages in .NET" di Ayende Rahien. Molto istruttivo e ti guida gentilmente attraverso il processo di scrittura di una DSL. L'autore utilizza un linguaggio .NET leggero chiamato Boo per fungere da base per la sintassi della DSL.

Inoltre si può guardare in angolo VS2012:

+0

Questa è la strada che ho scelto alla fine. Conosco già Python, quindi Boo rappresenta la curva di apprendimento più superficiale per me. A proposito, da allora ho ordinato il libro da Amazon (questo era ancora prima del tuo post - come ho fatto un po 'più di ricerca da solo, poco dopo aver postato la domanda) – morpheous

+0

I collegamenti Microsoft sono morti –

1

Si può provare il MPS dei JetBrain. È un ecosistema molto ricco e robusto per la generazione di DSL. Non l'ho mai usato da solo, quindi caveat emptor, ma è gratis quindi immagino che non possa fare molto (molto) per provarlo.

+0

Questo genera codice per la piattaforma .Net? Ho cercato il forum + sito stesso e la risposta sembra essere no - mi manca qualcosa? – morpheous

+0

Hmm. Ho pensato che fosse così, ma sembra che ci sia solo uno sforzo molto preliminare in quella direzione: http://mps-csharp.googlecode.com/svn/trunk/. –

5

C'è un gruppo di diverse soluzioni si potrebbe usare, tra cui l'articolo si è collegato, ma alcuni altri esempi dalla MS ...

  • FsLex/FsYacc - porti delle popolari Lex e Yacc lexer/parser per F #, ma non essere disattivato immediatamente. Se non lo hai mai usato prima, F # ha una funzione chiamata "pattern matching", che ti permette di abbinare costrutti molto complessi (come camminare su un albero), senza una grande quantità di se/else/o blocchi dappertutto. Questo è perfettamente adatto alla compilazione del linguaggio - perché quasi tutte le soluzioni DSL che troverete funzioneranno analizzando la lingua in un AST (Abstract syntax tree). In questa soluzione F #, ottieni un albero fortemente tipizzato con cui lavorare. Puoi prendere il F# Parsed Language Started per iniziare. (C'è un sacco di grammatiche esistenti per Lex/Yacc che possono aiutarti anche tu).

  • SQL Server Modeling Tools (ex "Oslo") - Contiene un linguaggio chiamato M, già rotto in più parti, uno dei quali MGrammar. È un parser abbastanza avanzato e può farti risparmiare tempo su altre grammatiche: i pattern di codice (o regole grammaticali generiche) e la precedenza sono incorporati e facili da usare. Lo consiglierei forse se inizi con l'analisi, perché include uno strumento visivo: Intellipad, che ha una modalità DSL a 3 pannelli, in cui digiti la tua lingua e qualche codice di esempio - e ti mostrerà l'output AST durante la digitazione - è abbastanza produttivo da usare. L'AST generato è un costruttore di linguaggio M valido (MGraph), che può essere utilizzato con servizi come SQL e XML. Un aspetto negativo di MGrammar IMO, è che camminare su AST da C# o altrove è un processo faticoso. Non c'è nulla di fortemente digitato, e stai lavorando con oggetti e ricerche con stringhe - goffo e facile da fare errori. Ci sono alcuni esempi su MSDN, e alcuni vids su Channel9 che possono aiutarti a iniziare in questo modo lengthy overview

  • Il Visualization and Modeling SDK - Un intero soluzione integrata in VS, che si concentra in gran parte sulla costruzione del vostro con strumenti di progettazione di Visual Studio oltre il codice. Viene fornito con un modello di avvio linguistico minimo per aiutarti. Non ho alcuna esperienza con questo per raccomandarlo.

C'è un sacco di altre soluzioni non-MS, come quella che hai citato, C# obiettivi per ANTLR ecc Questi sono particolarmente utili se si sta riutilizzando grammatiche esistenti - perché c'è decine già là fuori .

+0

+1: phew, molte letture pesanti. Grazie per i collegamenti però ... – morpheous

1

Guarda il mio progetto open meta# fonte. Sembra quello che stai cercando.

Problemi correlati