Generative programming 2013 — различия между версиями
Mikhail (обсуждение | вклад) |
Mikhail (обсуждение | вклад) |
||
Строка 21: | Строка 21: | ||
<b>2. [[Generative Programming Homework 2|Модель домена калькуляторов]] </b>, срок сдачи продлен <b>до 29.09</b> <br> | <b>2. [[Generative Programming Homework 2|Модель домена калькуляторов]] </b>, срок сдачи продлен <b>до 29.09</b> <br> | ||
Предполагается генерировать калькулятор по описанию. | Предполагается генерировать калькулятор по описанию. | ||
− | Необходимо проанализировать домен калькуляторов (Вы выступаете экспертом и пользователем | + | Необходимо проанализировать домен калькуляторов (домен задачи) и смоделировать его. Вы выступаете и экспертом, и пользователем. |
Структуру домена записать на MPS 3.0. <br/> | Структуру домена записать на MPS 3.0. <br/> | ||
− | Калькулятор должен уметь выполнять арифметические операции (+-*/) с числами. Должна быть предусмотрена возможность добавления | + | Калькулятор должен уметь выполнять арифметические операции (+-*/) с числами. Должна быть предусмотрена возможность добавления новых (специфических для данного калькулятора) операций, например, возведение в степень или извлечение квадратного корня. UI фичи - на усмотрение. |
Модель должна уметь описывать стандартный (минимальный) калькулятор Windows (или любой другой ОС). <br/> | Модель должна уметь описывать стандартный (минимальный) калькулятор Windows (или любой другой ОС). <br/> | ||
+ | Для описания пользовательских операций можно использовать FunctionType и/или ClosureLiteral из языка jetbrains.mps.baseLanguage.closures. Например, UserOperation ::= Expression, где typeof(Expression)==FunctionType, соответствующий операции. Или UserOperation ::= ClosureLiteral, который тоже проверяется на правильность типа. Ограничение на тип можно пока не задавать, это не будет влиять на оценку. <br/> | ||
− | + | Ожидаемый результат: проект MPS с описанием домена калькуляторов (language) и редактором, sandbox с моделью, описывающей примерно такой калькулятор: | |
− | + | [[Файл: calc_pict.gif]] | |
− | + | ||
<br><br> | <br><br> | ||
− | + | Баллы: <br/> | |
− | <br> 5 - | + | 5 - Домен задачи проработан, редактор позволяет легко вводить описание калькулятора, есть примеры разных описаний <br/> |
− | <br> 4 - | + | 4 - Домен задачи проработан, есть пример "стандартного" калькулятора <br/> |
− | <br> 3 - | + | 3 - Домен задачи недостаточно проработан или описание домена запутано, но "стандартный" калькулятор можно описывать (есть пример) <br/> |
− | <br> 1 - задание | + | 1 - Невозможно описать "стандартный" калькулятор или задать пользовательские операции. <br/> |
+ | |||
+ | Первое сданное задание получает +1 балл. | ||
== Список литературы == | == Список литературы == |
Версия 01:29, 26 сентября 2013
Преподаватели - Власьев Михаил Игоревич (mailto:michael.vlassiev@jetbrains.com),
Мухин Михаил Александрович (mailto:Mihail.Muhin@jetbrains.com)
Лекции
04.09.2013:
О чем курс,
Textmapper,
Textmapper example
11.09.2013:
Введение в MPS
18.09.2013:
Domain engineering, пример
25.09.2013: Практическое занятие (проект)
Домашние задания
1. Парсер упрощенного XML, срок сдачи до 15.09
2. Модель домена калькуляторов , срок сдачи продлен до 29.09
Предполагается генерировать калькулятор по описанию.
Необходимо проанализировать домен калькуляторов (домен задачи) и смоделировать его. Вы выступаете и экспертом, и пользователем.
Структуру домена записать на MPS 3.0.
Калькулятор должен уметь выполнять арифметические операции (+-*/) с числами. Должна быть предусмотрена возможность добавления новых (специфических для данного калькулятора) операций, например, возведение в степень или извлечение квадратного корня. UI фичи - на усмотрение.
Модель должна уметь описывать стандартный (минимальный) калькулятор Windows (или любой другой ОС).
Для описания пользовательских операций можно использовать FunctionType и/или ClosureLiteral из языка jetbrains.mps.baseLanguage.closures. Например, UserOperation ::= Expression, где typeof(Expression)==FunctionType, соответствующий операции. Или UserOperation ::= ClosureLiteral, который тоже проверяется на правильность типа. Ограничение на тип можно пока не задавать, это не будет влиять на оценку.
Ожидаемый результат: проект MPS с описанием домена калькуляторов (language) и редактором, sandbox с моделью, описывающей примерно такой калькулятор:
Баллы:
5 - Домен задачи проработан, редактор позволяет легко вводить описание калькулятора, есть примеры разных описаний
4 - Домен задачи проработан, есть пример "стандартного" калькулятора
3 - Домен задачи недостаточно проработан или описание домена запутано, но "стандартный" калькулятор можно описывать (есть пример)
1 - Невозможно описать "стандартный" калькулятор или задать пользовательские операции.
Первое сданное задание получает +1 балл.
Список литературы
Generative Programming: Methods, Tools, and Applications
Krysztof Czarnecki, Ulrich Eisenecker
Addison-Wesley Professional; 1 edition (June 16, 2000)
Перевод: Чернецки К., Айзенекер У. Порождающее программирование: методы, инструменты, применение / Пер. с англ. СПб: Питер, 2005.
Domain-Specific Languages
Martin Fowler
Addison-Wesley; 2011
Полезные ссылки
JetBrains MPS: http://www.jetbrains.com/mps
Отчеты об ошибках MPS писать сюда: http://youtrack.jetbrains.com/issues/MPS