«زبان دامنهاختصاصی» (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 است که برای ساختن ساختارهای دادهی گراف به کار میرود. اما برخلاف زبان DOT، DSL ما یک DSL درونی است که فقط در زبان خودمان به کار میرود.
دربارهی تفاوت DSLهای درونی و بیرونی بیشتر بدانید.
در این تمرین باید نحوهی نگارشی برای یک DSL شبیه به زبان DOT تعریف کنید.
این کار احتمالاً نیاز دارد که از نمادگذاریها یا ماکروها استفاده کنید. ممکن است بخواهید یک مرجع را ببینید.
در این تمرین، یالها با یک - تنها بین گرهها نمایش داده میشوند، برخلاف -- که در زبان واقعی DOT به کار میرود.
این کار از تداخل با نحوهی نگارش کامنت تکخطی Lean جلوگیری میکند.
همچنین، هر دستور با ; به پایان میرسد، حتی کامنتهای سطح گراف.