Existe alguma coisa no .NET que permita definir uma gramática e gerar uma linguagem de programação?

18

Tenho um curso em que o professor nos pediu para criar uma DSL para o nosso projeto final. Ele nos apresentou nos primeiros cursos xText com Eclipse. Sendo este um novo curso, ainda estou um pouco confuso sobre o que significa Idiomas Específicos de Domínio.

Este é o meu entendimento atual: uma linguagem específica de domínio é uma linguagem criada para problemas específicos no desenvolvimento de software. Exemplos de DSLs são PHP, SQL, JavaScript e, ao contrário, linguagens como Java, C #, C ++, Ruby etc.

Por favor, sinta-se livre para me corrigir se eu estiver errado.

O que eu gostaria de saber: existe alguma ferramenta para o .NET / Visual Studio semelhante ao Xtext, que permita definir uma gramática e gerar uma linguagem de programação baseada nela com um diagrama de atividades?

user1525474
fonte
6
PHP e Javascript não são realmente DSLs. Uma DSL é uma linguagem que aborda um domínio de problema específico, como serviços médicos. SQL é uma DSL porque é específica para o domínio do problema de trabalhar com conjuntos de dados relacionais. Veja en.wikipedia.org/wiki/Domain-specific_language para mais informações.
Robert Harvey
Nemerle talvez?
dez

Respostas:

11

O caminho mais fácil é uma interface fluente . Isso não requer nenhuma ferramenta e oferece um ótimo suporte ao IntelliSense, mas você ainda precisa escrever as coisas de uma maneira meio .NET, como

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

Como alternativa, você pode escrever belas DSLs no Boo . Há um livro inteiro sobre esse assunto.

pdr
fonte
10

Você pode experimentar o ANTLR (ou outra ferramenta para reconhecimento de idiomas), um gerador de analisador que está entre outros disponíveis para o dotnet. Na comunidade, você pode encontrar definições para sql, c # e muitos outros idiomas.

De acordo com o google, também há suporte ide:

k3b
fonte
Atualização: o ANTLR4 emite apenas Java, enquanto o ANTLR3 ainda suporta C #, mas não verá nenhuma atualização importante.
Stefano Sanfilippo
3

Sua primeira pergunta - o que é uma linguagem específica de domínio ... porque é grande demais para caber em um comentário.

Um idioma específico do domínio é um idioma projetado para funcionar em um domínio de problema específico. Por exemplo, dentro do mecanismo Unreal (usado para atiradores em primeira pessoa), existe uma linguagem específica de domínio chamada UnrealScript que permite modificar o comportamento do mecanismo Unreal. Essa linguagem foi projetada para resolver problemas gerais, mas é restrita ao seu domínio específico. Redcode (para corewars) seria outro idioma específico do domínio. A linguagem na Arte Livre de Contexto é específica ao seu domínio.

A idéia é que, com uma linguagem específica de domínio, seja possível criar uma DSL que mapeie de perto o problema em questão. Neste ponto, é mais fácil programar no DLS do que programar em uma linguagem geral, mesmo com as bibliotecas adicionadas para lidar com o domínio do problema.


Quanto à sua segunda pergunta - as ferramentas em C # ... eu não conheço C # e, portanto, não conheço bem as ferramentas. Dito isto, quando eu estava participando de uma aula de compilador na faculdade, duas das ferramentas que foram usadas (e que eu usei desde então) são lex e yacc. Em Stack Overflow ... Lex / Yacc para C #?

Comunidade
fonte