Em seu livro "Domain-Specific Languages", Martin Folwer descreve DSLs internas e externas .
Internal DSL
= é um subconjunto da linguagem de programação existente, por exemplo, Ruby / Java etc.
External DSL
= você define uma sintaxe e um vocabulário.
Uma DSL externa pode ser muito mais expressiva, mas pode exigir uma análise externa e geração de código.
Embora uma DSL interna não exija um processamento adicional, às vezes é difícil de entender para especialistas em domínio que não são de programação (por exemplo, analistas de negócios, testadores).
Ao escolher seu tipo de DSL, é importante analisar quem são seus usuários. Se na maior parte são pessoas não técnicas, uma DSL externa pode ser uma escolha melhor. Para uma pequena equipe de programadores experientes, uma DSL interna pode ser escolhida, se a linguagem de programação usada for expressiva o suficiente.