DOT DSL

DOT DSL

Médio

Instruções

Uma Linguagem Específica de Domínio (DSL) é uma pequena linguagem otimizada para um domínio específico. Como uma DSL é direcionada, pode ter um grande impacto na produtividade e na compreensão, ao permitir que quem a escreve declare o quê em vez de como.

Uma das áreas onde são aplicadas é a das personalizações e configurações complexas.

Por exemplo, a linguagem DOT permite-te escrever uma descrição textual de um grafo que é depois transformada numa imagem por uma das ferramentas Graphviz (como o dot). Um grafo simples tem este aspeto:

graph {
    graph [bgcolor="yellow"]
    a [color="red"]
    b [color="blue"]
    a -- b [color="green"]
}

Ao colocar isto num ficheiro example.dot e executar dot example.dot -T png -o example.png, crias uma imagem example.png com um círculo vermelho e outro azul, ligados por uma linha verde, sobre um fundo amarelo.

Escreve uma Linguagem Específica de Domínio semelhante à linguagem dot do Graphviz.

A nossa DSL é semelhante à linguagem dot do Graphviz, na medida em que será usada para criar estruturas de dados de grafos. No entanto, ao contrário da linguagem DOT, a nossa DSL será uma DSL interna, para uso exclusivo na nossa linguagem.

Sabe mais sobre a diferença entre DSLs internas e externas.

Descrição da DSL

Um grafo, nesta DSL, é um objeto do tipo Graph. Este recebe uma list de um ou mais tuplos que descrevem:

  • atributos
  • Nodes
  • Edges

As implementações de um Node e de uma Edge são fornecidas em dot_dsl.py.

Para mais detalhes sobre o design esperado da DSL e os tipos e mensagens de erro esperados, dá uma vista de olhos pelos casos de teste em dot_dsl_test.py

Mensagens de exceção

Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa para indicar qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso a depurar. Nas situações em que sabes que a origem do erro será de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.

Este exercício em particular exige que uses a instrução raise para "lançar" um TypeError quando um Graph está mal formado, e um ValueError quando um Edge, um Node ou um attribute está mal formado. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.

Para lançar um erro com uma mensagem, escreve a mensagem como argumento do tipo exception:

# Graph is malformed
raise TypeError("Graph data malformed")

# Edge has incorrect values
raise ValueError("EDGE malformed")

Fonte

WikipediaO link abre numa nova janela ou separador
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar DOT DSL?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.