DOT DSL

DOT DSL

Складна

Вказівки

Предметно-орієнтована мова (DSL) - це невелика мова, оптимізована для конкретної предметної області. Оскільки DSL має конкретне призначення, вона може суттєво підвищити продуктивність і полегшити розуміння, дозволяючи авторові оголосити що він хоче, а не як.

Однією з проблемних областей, де їх застосовують, є складні налаштування та конфігурації.

Наприклад, мова DOT дозволяє записати текстовий опис графа, який потім перетворює на зображення один з інструментів Graphviz (наприклад, dot). Простий граф має такий вигляд:

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

Якщо помістити це у файл example.dot і виконати dot example.dot -T png -o example.png, отримаємо зображення example.png, де червоний і синій кружечки зʼєднані зеленою лінією на жовтому тлі.

Напишіть предметно-орієнтовану мову, подібну до мови dot від Graphviz.

Наша DSL подібна до мови dot від Graphviz тим, що нашу DSL будемо використовувати для створення структур даних графів. Однак, на відміну від мови DOT, наша DSL буде внутрішньою DSL, призначеною лише для використання в нашій мові.

Дізнаймося більше про різницю між внутрішніми та зовнішніми DSL.

Синтаксис Lean

У цій вправі нам потрібно буде визначити синтаксис для DSL, схожої на мову DOT.

Імовірно, для цього завдання нам доведеться використовувати нотації або макроси. Можливо, варто звернутися до довідки.

Note

У цій вправі ребра позначаються одним символом - між вузлами, на відміну від --, який використовується у справжній мові DOT. Це дозволяє уникнути конфліктів із синтаксисом однорядкових коментарів Lean.

Крім того, кожна інструкція закінчується ;, навіть коментарі на рівні графа.


Джерело

WikipediaПосилання відкривається в новому вікні або вкладці
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Lean Exercism

Час розпочати DOT DSL?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Lean, а також 100 вправ та справжнє наставництво від людей, і все це безкоштовно.