¿Hay algo en .NET que me permita definir una gramática y generar un lenguaje de programación?

18

Tengo un curso en el que el profesor nos ha pedido que creemos un DSL para nuestro proyecto final. Nos presentó en los primeros cursos xText con Eclipse. Siendo un curso nuevo, todavía estoy un poco confuso sobre lo que significa Lenguajes específicos de dominio.

Esta es mi comprensión actual: un lenguaje específico de dominio es un lenguaje creado para problemas específicos en el desarrollo de software. Ejemplos de DSL son PHP, SQL, JavaScript y, por el contrario, lenguajes como Java, C #, C ++, Ruby, etc.

Por favor, siéntase libre de corregirme.

Lo que me gustaría saber: ¿hay alguna herramienta para .NET / Visual Studio que sea similar a Xtext, que me permita definir una gramática y se me permita generar un lenguaje de programación basado en eso con un diagrama de actividad?

usuario1525474
fuente
66
PHP y Javascript no son realmente DSL. Un DSL es un lenguaje que aborda un dominio problemático particular, como los servicios médicos. SQL es un DSL porque es específico del dominio del problema de trabajar con conjuntos de datos relacionales. Consulte en.wikipedia.org/wiki/Domain-specific_language para obtener más información.
Robert Harvey
Nemerle tal vez?
cnd

Respuestas:

11

La forma más fácil de hacerlo es una interfaz fluida . Esto no requiere herramientas en absoluto y le brinda una gran compatibilidad con IntelliSense, pero aún tiene que escribir cosas de una manera similar a .NET, como

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

Alternativamente, puedes escribir hermosas DSL en Boo . Hay un libro completo sobre ese tema.

pdr
fuente
10

Puede probar ANTLR (u OTRA herramienta para el reconocimiento de idiomas) un generador de analizador que está entre otros disponible para dotnet. En la comunidad puede encontrar definiciones para sql, c # y muchos otros idiomas.

Según Google, también hay soporte ide:

k3b
fuente
Actualización: ANTLR4 solo emite Java, mientras que ANTLR3 aún admite C #, pero no verá ninguna actualización importante.
Stefano Sanfilippo
3

Su primera pregunta: qué es un lenguaje específico de dominio ... porque es demasiado grande para caber en un comentario.

Un lenguaje específico de dominio es un lenguaje diseñado para funcionar dentro de un dominio problemático particular. Por ejemplo, dentro del motor Unreal (usado para tiradores en primera persona), hay un lenguaje específico de dominio llamado UnrealScript que permite modificar el comportamiento del motor Unreal. Este lenguaje está diseñado para resolver problemas generales, sino que está limitado a su dominio específico. Redcode (para corewars) sería otro lenguaje específico de dominio. El lenguaje dentro de Context Free Art es específico de su dominio.

La idea es que con un lenguaje específico de dominio, uno podría crear un DSL que mapee de cerca el problema en cuestión. En este punto, es más fácil programar en el DLS que programar en un lenguaje general incluso con las bibliotecas agregadas para manejar el dominio del problema.


En cuanto a su segunda pregunta: las herramientas en C # ... No sé C # y, por lo tanto, no conozco bien las herramientas. Dicho esto, cuando estaba tomando una clase de compilación en la universidad, dos de las herramientas que se usaron (y desde entonces he usado) son lex y yacc. En Stack Overflow ... Lex / Yacc para C #?

Comunidad
fuente