2010-09-03 12 views
9

Estoy pensando en escribir un DSL para ejecutar en el entorno .Net. Es muy probable que implemente esto en C#, aunque soy flexible en esto.escribir un DSL para la plataforma .Net

¿Hay recursos recomendados en línea que muestren los principales pasos para escribir una DSL para la plataforma .Net?

Idealmente, me gustaría un recurso que proporcionaría al menos una visión general de lo siguiente:

  • 'spec'ing una conexión DSL
  • cómo asignar las especificaciones para el marco .Net
  • preferiblemente, un ejemplo holamundo de un DSL trivial implementado en un lenguaje .Net

[Editar]

En realidad, acabo de ver this article - pero está un poco anticuado. ¿Alguien tiene una opinión sobre si el artículo es un buen punto de partida o no (el .Net framework y C# parecen evolucionar a un ritmo muy rápido)

+0

Puede consultar ANTLR (http://www.antlr.org/). No estoy seguro de a qué se refiere cuando dice mapear las especificaciones a .NET Fx. ¿Está buscando construir un lenguaje y compilador que genere código IL y pueda usar tipos de FCL fácilmente? Si es así, puede que esto no funcione. Había usado ANTLR para analizar una expresión de fórmula (que solía referirme a entidades comerciales y funciones personalizadas), pero el árbol analizado fue luego interpretado por mi programa. – VinayC

+0

Quiero evitar los compiladores de compiladores/compiladores de analizadores de "bajo nivel" como lexx/yacc/antlr, etc. Básicamente, estoy buscando crear un lenguaje .Net 'de juguete' (como plantilla inicial). Para ser más específico, este lenguaje de "juguetes" generará código CIL y puede usar el CLR. – morpheous

+1

Dada la "D" en "DSL", la primera pregunta que preguntaría es, "¿cuál es el dominio?" Un DSL no es sinónimo de "lenguaje de juguete". Parece que estás buscando un lenguaje de propósito general pequeño/simple, no exactamente específico de un dominio. – nerraga

Respuesta

7

Si está dispuesto a comprar un libro sobre el tema, recomiendo "DSLs in Boo: Domain Specific Languages in .NET" por Ayende Rahien. Muy informativo y gentilmente lo lleva por el proceso de escribir un DSL. El autor utiliza un lenguaje ligero .NET llamado Boo para servir como base para la sintaxis de la DSL.

También se puede mirar en la esquina VS2012:

+0

Esta es la ruta que elegí al final. Ya conozco a Python, por lo que Boo representa la curva de aprendizaje más superficial para mí. Por cierto, desde entonces he ordenado el Libro de Amazon (esto fue incluso antes de su publicación, ya que hice un poco más de investigación, poco después de publicar la pregunta) – morpheous

+0

Los enlaces de Microsoft están muertos –

1

Puede probar JetBrains 'MPS. Es un ecosistema muy rico y robusto para generar DSL. Nunca lo he usado yo mismo, así que caveat emptor, pero es gratis, así que supongo que no puede doler (mucho) intentarlo.

+0

¿Esto genera código para la plataforma .Net? Busqué en el foro + sitio en sí y la respuesta parece ser no, ¿me falta algo? – morpheous

+0

Hmm. Pensé que sí, pero parece que hay solo un esfuerzo muy preliminar en esa dirección: http://mps-csharp.googlecode.com/svn/trunk/. –

5

Hay un montón de diferentes soluciones que puede utilizar, incluyendo el artículo se conectó, pero algunos otros ejemplos de MS ...

  • FsLex/FsYacc - Puertos de las populares Lex y Yacc lexer/analizadores para F #, pero no se apague de inmediato. Si no lo ha usado antes, F # tiene una función llamada "coincidencia de patrones", que le permite hacer coincidir construcciones muy complejas (como caminar sobre un árbol), sin una gran cantidad de bloques de if/else/o de todo. Esto se adapta perfectamente a la compilación de idiomas, porque casi todas las soluciones DSL que encontrará funcionarán analizando el lenguaje en un AST (árbol sintáctico abstracto). En esta solución F #, obtienes un árbol fuertemente tipado para trabajar. Puede tomar el F# Parsed Language Started para comenzar. (Hay muchas gramáticas existentes para Lex/Yacc que también pueden ayudarte).

  • SQL Server Modeling Tools (antes conocida como "Oslo") - Contiene un lenguaje llamado M, anteriormente divide en varias partes, una de ellas MGrammar. Es un analizador bastante avanzado y puede ahorrarle mucho tiempo con respecto a otras gramáticas: los patrones de código (o reglas de gramática genéricas) y la precedencia están integrados y son fáciles de usar. Quizás te recomiende esto si comienzas con el análisis porque viene con una herramienta visual: Intellipad, que tiene un modo DSL de 3 paneles, donde escribes tu idioma y un código de ejemplo, y te mostrará la salida AST mientras escribe, es bastante productivo de usar. El AST generado es un constructor de lenguaje M válido (MGraph), que se puede usar con servicios como SQL y XML. Una desventaja de MGrammar IMO es que caminar el AST desde C# o en cualquier otro lugar es un proceso tedioso. No hay nada fuertemente tipado, y estás trabajando con objetos y buscando con cadenas: incómodo y fácil de cometer errores. Hay algunas muestras en MSDN, y algunos vids en Channel9 que puede ayudar a empezar como esto lengthy overview

  • El Visualization and Modeling SDK - Una solución completa integrada en VS, que se centra en gran medida en la construcción de su con herramientas de diseño de Visual Studio más de código. Viene con una plantilla mínima de inicio de idioma para ayudarte. No tengo ninguna experiencia con esto para recomendarlo.

Hay un montón de otras soluciones no-MS, como la que usted ha mencionado, C# objetivos para antlr etc. Estos son particularmente útiles si usted está reutilizando las gramáticas existentes - porque hay decenas ya está ahí fuera .

+0

+1: phew, mucha lectura pesada. Gracias por los enlaces ... – morpheous

1

Salida proyecto meta# mi fuente abierta. Suena como lo que estás buscando.

Cuestiones relacionadas