2010-10-04 29 views
33

He creado algunos lenguajes de programación completos diferentes utilizando algunas de las diversas herramientas de análisis disponibles. Sin embargo, ¿cómo podría alguien crear un lenguaje de programación que ejecute el framework .Net? ¿Tendré que generar el .Net IL y compilar eso o hay un nivel más alto de abstracción?¿Cómo crear un lenguaje de programación .Net?

Además, ¿hay una manera fácil de hacer que el lenguaje funcione en Visual Studio?

+2

Deberías generar el .NET IL. El tiempo de ejecución de .NET manejaría compilar y ejecutar ese código. No estoy seguro sobre las otras piezas. –

+1

Similar [recursos-para-aprender-cómo-crear-un-compilador-intérprete-para-la-red] (http://stackoverflow.com/questions/1448643/resources-to-learn-how-to- create-a-compiler-intérprete-para-la-red-framework) – nawfal

Respuesta

13

Querrá echarle un vistazo al proyecto Microsoft Research Common Compiler Infrastructure (CCI). Proporciona todo lo que necesita para generar los metadatos y MSIL para un ensamblaje. Y el archivo .pdb de depuración, bastante importante para que su lenguaje funcione.

Hay un proyecto hermano, Modelo de código CCI y AST, que también puede ser útil, depende de qué tan avanzado esté.

+1

¿Ha sido esto obsoleto por Roslyn o sigue siendo relevante? –

+0

CCI es útil para crear * cualquier * idioma, Roslyn solo se enfoca en C# y VB.NET –

6

Su compilador es responsable de convertir el código que obtiene a ILCode. ILCode es el lenguaje común que todos y cada uno de los lenguajes .NET compilan. Este código es interpretado por JIT-Compiler en tiempo de ejecución. Por supuesto, puede confiar en las clases de CodeDom en el marco para lograr eso, si escribe el compilador en C# por ejemplo.

+1

Echa un vistazo a este artículo de la revista MSDN sobre la implementación de un compilador en C# para un idioma determinado: http://msdn.microsoft.com/en-us/magazine /cc136756.aspx –

+0

El enlace está muerto. Aquí está una instantánea de archive.org: https://web.archive.org/web/20150111033016/http://msdn.microsoft.com/en-us/magazine/cc136756.aspx – IInspectable

10

Hay un compilador LOLCode construido en C# que podría ser un buen punto de partida.

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

En cuanto a la aplicación en Visual Studio, no es un proceso abierto motor de vista del origen de llamada Chispa (http://www.sparkviewengine.com/) que hizo algunos trabajos con conseguir intelisense a trabajar. El contexto es diferente, pero la lección es la misma, es difícil, y no es un proceso muy bien documentado.

+0

Spark suena muy divertido. :) – Telavian

1

o hay un mayor nivel de abstracción?

Solo para completar, puede generar C# o VB.NET. Ambos compiladores son parte del tiempo de ejecución.

Sin embargo, es dudoso si fuera un compilador "real".

+3

Un compilador es cualquier cosa que se convierte de una forma a otra. – Telavian

2

Un buen ejemplo para integrar su propio idioma en Visual Studio es el proyecto Lua Language Support.

5

No estoy seguro si esto es lo que está buscando, pero después de que had a Question on SO He creado un .net Compiler for Brainf**k como excersize (Part 6 contiene el código fuente del compilador real y es también on GitHub)

En esencia, el actual El compilador puede escribirse en cualquier idioma .net y usar el espacio de nombres System.Reflection.Emit para crear conjuntos, clases, métodos, etc. y emitir IL en ellos.

El trabajo real de crear un nuevo idioma obviamente implica escribir un analizador/analizador/analizador/lo que sea que pueda analizar tu programa en clases y "alimentar" tu compilador. Lo siento, no tengo experiencia en eso, pero comprueba this list of resources en cómo escribir un compilador

Quiere leer ECMA-335 para aprender cómo funciona la CLI: qué tipos de datos admite y qué comandos lo hace en realidad.

Cuestiones relacionadas