2010-10-04 18 views
33

Ho creato diversi linguaggi di programmazione completi utilizzando alcuni dei vari strumenti di analisi disponibili. Tuttavia, come qualcuno potrebbe creare un linguaggio di programmazione che esegua il framework .Net? Dovrei produrre l'IL .Net e compilarlo o c'è un livello più alto di astrazione?Come creare un linguaggio di programmazione .Net?

Inoltre, c'è un modo semplice per far funzionare la lingua in Visual Studio?

+2

Si sarebbe uscita .NET IL. Il runtime .NET gestiva la compilazione e l'esecuzione di quel codice. Non sono sicuro degli altri pezzi. –

+1

simili [risorse da imparare-come-creare-un-compiler-interprete-for-the-net] (http://stackoverflow.com/questions/1448643/resources-to-learn-how-to- create-a-compiler-interpreter-for-the-net-framework) – nawfal

risposta

13

Ti consigliamo di dare un'occhiata al progetto Microsoft Research Common Compiler Infrastructure (CCI). Fornisce tutto il necessario per generare i metadati e l'MSIL per un assembly. E il debug di file .pdb, piuttosto importante per far funzionare la tua lingua.

C'è un progetto gemello, CCI Code Model e AST, che potrebbe essere anche utile, dipende da quanto tempo si è arrivati.

+1

ha questo stato deprecato da Roslyn o è ancora attuale? –

+0

CCI è utile per creare qualsiasi lingua * *, obiettivi Roslyn solo C# e VB.NET –

6

Il compilatore è responsabile della conversione del codice che ottiene in ILCode. ILCode è la lingua comune a cui tutti i linguaggi .net sono compilati. Questo codice viene interpretato dal compilatore JIT in fase di runtime. Ovviamente, può fare affidamento sulle classi CodeDom nel framework per farlo, se si scrive il compilatore in C# per esempio.

+1

Dai un'occhiata a questo articolo della rivista MSDN sull'implementazione di un compilatore in C# per una determinata lingua: http://msdn.microsoft.com/en-us/magazine /cc136756.aspx –

+0

Il collegamento è morto. Ecco un'istantanea archive.org: https://web.archive.org/web/20150111033016/http://msdn.microsoft.com/en-us/magazine/cc136756.aspx – IInspectable

10

C'è un compilatore LOLCode integrato in C# che potrebbe essere un buon punto di partenza.

http://code.google.com/p/lolcode-dot-net/

Come per l'implementazione in Visual Studio, v'è un open source chiamato motore di visualizzazione Spark (http://www.sparkviewengine.com/), che ha fatto un certo lavoro con ottenere intellisense al lavoro. Il contesto è diverso, ma la lezione è la stessa, è dura e non è un processo molto ben documentato.

+0

Spark suona un sacco di divertimento. :) – Telavian

1

o c'è un livello più alto di astrazione?

Giusto per essere completa, si potrebbe uscita C# o VB.NET. Entrambi i compilatori fanno parte del runtime.

Discutibile se quello sarebbe un compilatore 'reale' però.

+3

Un compilatore è tutto ciò che converte da una forma all'altra. – Telavian

2

Un ottimo esempio per l'integrazione della propria lingua in Visual Studio è il progetto Lua Language Support.

5

Non sono sicuro se questo è quello che stai cercando, ma dopo che ho had a Question on SO Ho creato un .net Compiler for Brainf**k come excersize (Part 6 contiene l'attuale codice sorgente del compilatore ed è anche on GitHub)

In sostanza, l'attuale Il compilatore può essere scritto in qualsiasi lingua .net e utilizzare lo spazio dei nomi System.Reflection.Emit per creare assiemi, classi, metodi ecc. Ed emetterlo in essi.

L'effettivo lavoro di creazione di una nuova lingua implica ovviamente la scrittura di un parser/lexer/analizzatore/qualsiasi cosa possa suddividere il programma in classi e "alimentare" il compilatore - scusa, non ho esperienza in questo, ma controlla this list of resources come scrivere un compilatore.

Si desidera leggere ECMA-335 per sapere come funziona la CLI: quali tipi di dati supporta e quali comandi esegue effettivamente.

Problemi correlati