Pergunta
Para um pequeno projeto noite eu gostaria de escrever um componente de validação que poderia ser usado na aplicação .NET para fazer a validação de costume e tedioso de objeto, os parâmetros de entrada e pós-condições.
A minha primeira ideia era despejar toda a lógica de configuração esta validação em um arquivo configuation XML e fornecer uma interface líquido para as pessoas que gostariam de tê-lo no código.
Porque eu gostaria de entregar algo que é pensamento realmente utilizável I sobre o fornecimento de um DSL especializado (linguagem específica de domínio). A questão é o que ferramentas devo usar para fazer isso?
Eu pensei sobre analisá-lo à mão usando regex. Mas pessoalmente eu gostaria de ter algo mais ... utilizável.
Então, o que você sugeriria?
Solução
Se você está procurando especificamente para um DSL, ter um olhar para o href="http://www.antlr.org/" rel="nofollow noreferrer"> ANTLR projeto . Nós usamos isso na minha empresa com bastante sucesso no passado.
Outras dicas
Parece que você está falando sobre a implementação de uma das características .NET 4.0 de, contratos de código .
Então eu acho que a minha ferramenta recomendada seria VS.Net de 2010.
A coisa com DSL é que eles raramente são eficazes em isolamento. Para ser útil para escrever software real, você realmente precisa para ser capaz de incorporar o DSL dentro de uma linguagem hospedeira. Compare, por exemplo, a forma como Linq funciona vs apenas SQL reta. Outro bom exemplo é característica literal XML em VB. Ambos permitem que você escrever código real, em um propósito geral PL e inter tecer-lo com simples código de DSL declaritive.
O resultado é algo muito mais poderoso do que o autônomo SQL ou um editor XML simples.
A desvantagem para isso, infelizmente, é que nem C # ou VB ofertas quaisquer recursos de programação meta, então a única maneira de fazer isso para dominante .net devs é construir seu próprio idioma. Se isso é algo que você está fazendo apenas por diversão que você pode ser capaz de modificar o mono compilador C # para adicionar os recursos que você está interessado em que a linguagem. Outra alternativa poderia ser a de tentar rubi. Ele tem uma sintaxe flexível whic lhe permite sair com um monte de loucura. Pessoalmente, porém, eu preferiria a abordagem hackeada C #.
pode querer verificar para fora Edifício Domain Specific Languages ??em Boo (Boo é uma linguagem CLR, conceitos devem transitar para C #). Um projeto de exemplo é Simples Máquina de Estado .
Por que ir tão longe? Comece usando os genéricos e uma interface fluente. Comece simples e trabalhá-lo através de alguma produção. Se o atrito é muito alto negociação com uma interface fluente, então olhar para utilizar uma ligação DSL.
Você pode tentar DSL Tools para Visual Studio.
Você deve olhar para projeto Ironia em http://irony.codeplex.com/