SlideShare a Scribd company logo
DSL
Domain-Specific Language
Предметно-ориентированный язык
*Какие есть примеры DSL?
Cпециализированный синтаксис или элементы синтаксиса, которые помогают лучше выразить
намерения, что данная часть программы должна
Примеры DSL
• Regular Expressions
• LINQ
• Fluent API (ORM, Automappers, IoC containers, …)
• Attributes
*А какова роль DSL в приложении?
Модель
DSL
Роль в приложении
*Легко понять, что сложнее. Примеры моделей?
Примеры моделей
State-машинаСинтаксическое дерево
*Модели сложны. В какой форме Dsl может помочь?
DSL
Внешний Внутренний
*А еще есть классификация?
Паттерны
https://martinfowler.com/dslCatalog/
*А есть примеры паттерна и реализации?
Method Chaining
* Какая есть обычно альтернатива?
Annotations
Expression Builder
Nested Functions
*Чёт это простые. А сложные есть?
Dependency Network
Program started…
Hello, World!
Program finished.
Templated generation
Parser generator
Quokka by ANTLR
https://github.com/mindbox-moscow/Quokka/tree/master/Grammar/Quokka
@{ if Recipient.IsMale } Добрый день, господин ${ Recipient.FirstAndLastName }!
@{ else } Добрый день, госпожа ${ Recipient.FirstAndLastName }! @{ end if }
Описано множество возможных выражений, для которых гененируется парсер,
который может строить синтаксическое дерево или манипулировать/наполнять модель напряму
Tokenizer + Recursive Decent Parcer + Tree Contruction
• C# Compiler
• V8 JavaScript Interpreter
• GCC
Основные советы от Фаулера:
• Используйте DSL
• Используйте внешние DSL
• Начинайте с простых паттернов

More Related Content

Similar to Domain-Specific Languages

Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. Algorithm
Ihor Porotikov
 
DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
Andrey Bibichev
 
03 т сервис
03 т сервис03 т сервис
03 т сервисGoudron1979
 
MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...
MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...
MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...
mpk-club
 
IronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использованияIronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использования
Alexander Byndyu
 
Multilanguage Drupal
Multilanguage DrupalMultilanguage Drupal
Multilanguage DrupalInna Tuyeva
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
Sergey Staroletov
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
Alexander Lisachenko
 
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Sergey Polazhenko
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
SBTech
 
Deep storm presentation
Deep storm presentationDeep storm presentation
Deep storm presentation
Alexandr Babenko
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasickvlar
 
Dbus intro
Dbus introDbus intro
Dbus intro
Garrikus
 
Формирование описания грамматики языка программирования Modelica и его внедр...
Формирование описания грамматики языка программирования Modelica  и его внедр...Формирование описания грамматики языка программирования Modelica  и его внедр...
Формирование описания грамматики языка программирования Modelica и его внедр...
Boris Chumichev
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложений
KewpaN
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
Alexander Gornik
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
Igor Shkulipa
 
паскаль язык структурного программирования
паскаль   язык структурного программированияпаскаль   язык структурного программирования
паскаль язык структурного программированияЕлена Ключева
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
Pavel Tsukanov
 

Similar to Domain-Specific Languages (20)

Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. Algorithm
 
Languages b6cc1c17
Languages b6cc1c17Languages b6cc1c17
Languages b6cc1c17
 
DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
 
03 т сервис
03 т сервис03 т сервис
03 т сервис
 
MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...
MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...
MПК3 - SDL - Опыт внедрения решений SDL Trados в российских переводческих ком...
 
IronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использованияIronRuby: внутренности и примеры использования
IronRuby: внутренности и примеры использования
 
Multilanguage Drupal
Multilanguage DrupalMultilanguage Drupal
Multilanguage Drupal
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
 
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
 
Deep storm presentation
Deep storm presentationDeep storm presentation
Deep storm presentation
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
 
Dbus intro
Dbus introDbus intro
Dbus intro
 
Формирование описания грамматики языка программирования Modelica и его внедр...
Формирование описания грамматики языка программирования Modelica  и его внедр...Формирование описания грамматики языка программирования Modelica  и его внедр...
Формирование описания грамматики языка программирования Modelica и его внедр...
 
9 структура компонентных приложений
9 структура компонентных приложений9 структура компонентных приложений
9 структура компонентных приложений
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
паскаль язык структурного программирования
паскаль   язык структурного программированияпаскаль   язык структурного программирования
паскаль язык структурного программирования
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 

Domain-Specific Languages