DOT DSL

DOT DSL

Közepes

Utasítások

A tartományspecifikus nyelv (DSL) egy adott területre optimalizált kis nyelv. Mivel a DSL célzott, nagyban növelheti a termelékenységet és a megértést azzal, hogy az író azt deklarálhatja, amit szeretne, nem pedig azt, hogy hogyan.

Az egyik problématerület, ahol ezeket alkalmazzák, a bonyolult testreszabások és konfigurációk.

Például a DOT nyelv segítségével szövegesen leírhatsz egy gráfot, amelyet aztán a Graphviz egyik eszköze (például a dot) képpé alakít. Egy egyszerű gráf így néz ki:

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

Ha ezt egy example.dot fájlba írod, és lefuttatod a dot example.dot -T png -o example.png parancsot, létrejön egy example.png kép, amelyen sárga háttéren egy piros és egy kék kör látható, zöld vonallal összekötve.

Írj egy tartományspecifikus nyelvet, amely hasonlít a Graphviz dot nyelvéhez.

A mi DSL-ünk abban hasonlít a Graphviz dot nyelvéhez, hogy gráf adatszerkezetek létrehozására fogjuk használni. A DOT nyelvvel ellentétben azonban a mi DSL-ünk belső DSL lesz, amelyet csak a saját nyelvünkben használunk.

Tudj meg többet a belső és a külső DSL közötti különbségről.

A DSL leírása

Ebben a DSL-ben egy gráf egy Graph típusú objektum. Ez egy vagy több tuple-t tartalmazó list-et vár, amelyek a következőket írják le:

  • attribútumok
  • Nodes
  • Edges

A Node és az Edge implementációját a dot_dsl.py tartalmazza.

A DSL várt felépítéséről, valamint a várt hibatípusokról és hibaüzenetekről a dot_dsl_test.py tesztesetei adnak részletes felvilágosítást.

Kivételüzenetek

Néha szükség van arra, hogy kivételt dobj. Amikor ezt teszed, mindig adj meg egy beszédes hibaüzenetet, amely megmutatja, mi a hiba forrása. Ettől a kódod olvashatóbb lesz, és a hibakeresést is jelentősen megkönnyíti. Ha tudod, hogy a hiba forrása egy adott típusú, választhatsz a beépített hibatípusok közül, de ilyenkor is adj meg beszédes üzenetet.

Ez a feladat megköveteli, hogy a raise utasítás használatával „dobj” TypeError-t, ha egy Graph hibás, és ValueError-t, ha egy Edge, Node vagy attribute hibás. A tesztek csak akkor lesznek sikeresek, ha raise-eled a exception-t, és üzenetet is fűzöl hozzá.

Ha üzenettel szeretnél hibát dobni, írd az üzenetet a exception típus argumentumaként:

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

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

Forrás

WikipediaA hivatkozás új ablakban vagy lapon nyílik meg
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Python Exercism

Készen állsz elkezdeni a(z) DOT DSL feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.