Generative programming 2013 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(Лекции)
м (Лекции)
 
(не показаны 33 промежуточные версии этого же участника)
Строка 8: Строка 8:
 
[https://dl.dropboxusercontent.com/u/34699053/Study/TextmapperTest.zip Textmapper example] <br/>
 
[https://dl.dropboxusercontent.com/u/34699053/Study/TextmapperTest.zip Textmapper example] <br/>
  
== Домашние задания ==
+
11.09.2013:
 +
[[Медиа: Lect_2.pdf‎ | Введение в MPS]] <br/>
  
<b>1. Парсер упрощенного XML</b>, срок сдачи до 15.09 <br>
+
18.09.2013:
Написать на Textmapper (плагин к IntelliJ IDEA) парсер текста вида:
+
[[Медиа: Lect_3.pdf‎ | Domain engineering]], [[Медиа: Sample_3.zip | пример]] <br/>
<br><asdf1>  
+
 
<br>    <abc>text 123</abc>  
+
25.09.2013: Практическое занятие ([[Медиа: DialogDemo.zip |проект]]) <br/>
<br>  <zxcv2> text text</zxcv2>  
+
 
<br></asdf1>
+
02.10.2013:
Написать программу, использующую сгенеренный парсер. На вход программе подается файл с текстом. Программа выписывает в консоль полученное от парсера AST или выводит ошибки, возникшие при разборе (в случае, когда они есть). Как передается файл и как выводится дерево - не важно, главное, чтобы было понятно, как запустить программу, и что получилось в итоге.
+
Пример [[Медиа: calc_design.pdf‎ |"Калькулятор"]] ([[Медиа: calc0.zip |проект]]) <br/>
<br><br>
+
 
'''Спецификация языка'''
+
09.10.2013:
*Теги бывают вида <xyz> и </xyz>, но не <xyz/>
+
[[Медиа: Lect_4.pdf‎ | Generation]], [[Медиа: calc.zip | пример]]<br/>
*Внутри каждого тега может быть '''либо''' несколько тегов, '''либо''' один кусок текста. Текст состоит из слов, каждое из которых - набор букв. Имя тега - набор букв (без цифр). Корневой тег - ровно один
+
 
*Теги должны образовывать правильную скобочную структуру. Hint: проверку соответствия идентификаторов открывающего и закрывающего тегов проще всего сделать через semantic actions (см. документацию).
+
16.10.2013: Практическое занятие ([[Медиа: PersonHelloDemo.zip |проект]])<br/>
<br><br>
+
 
'''Приблизительная разбалловка'''
+
23.10.2013:
<br> 5 - задание сделано и полностью работает
+
[[Медиа: Lect_5.pdf‎ | Aspect programming]], [[Медиа: LogDemo.zip | пример]]<br/>
<br> 4 - небольшие недочеты, в целом все работает
+
 
<br> 3 - не работает в некоторых случаях
+
30.10.2013: Практическое занятие<br/>
<br> 1 - задание не сдано
+
 
 +
06.11.2013: Контрольная работа<br/>
 +
 
 +
13.11.2013: нет занятия (devdays)<br/>
 +
 
 +
20.11.2013: Spoofax ([http://strategoxt.org/Spoofax homepage])<br/>
 +
 
 +
27.11.2013: Forth<br/>
 +
 
 +
4.12.2013: XText<br/>
 +
 
 +
11.12.2013: Kotlin<br/>
 +
 
 +
18.12.2013: bonus: mbeddr languages<br/>
 +
 
 +
25.12.2013: выставление зачетов<br/>
 +
 
 +
== Домашние задания ==
  
<br>+1 балл - все то же самое, но имя тега может включать цифры и буквы, а текст внутри тега состоит из букв, цифр, точек, запятых и знаков пробелов, другие символы в тексте запрещены (см. lexer states в документации textmapper'а).  
+
<b>1. [[Generative Programming Homework 1|Парсер упрощенного XML]]</b>, срок сдачи до 15.09 <br/>
<br>+1 балл - найти максимальное кол-во ошибок в Textmapper (5 лучших результатов по состоянию на 15.09)
+
<b>2. [[Generative Programming Homework 2|Модель домена калькуляторов]]</b>, срок сдачи до 29.09 <br/>
<br>Максимум за все задание можно получить 6 баллов
+
<b>3. [[Generative Programming Homework 3|Генератор калькуляторов]]</b>, срок сдачи до 27.10 <br/>
 +
<b>4. [[Generative Programming Homework 4|Генерация HTML-расписания]]</b>, срок сдачи до 10.11 <br/>
 +
<b>5. [[Generative Programming Homework 5|Spoofax: Expressions]]</b>, срок сдачи до 02.12 <br/>
 +
<b>6. [[Generative Programming Homework 6|XText: Subscribers graph]]</b>, срок сдачи до 16.12 <br/>
 +
<b>7. [[Generative Programming Homework 7 (opt)|Kotlin: state machines]]</b>, срок сдачи до 22.12 <br/>
  
----
+
<b>Результаты</b>
'''NB!'''
+
[https://docs.google.com/spreadsheet/ccc?key=0Anpvyfja13p5dHktX2lldFBIMU56aUVnUTRYOVBNSFE&usp=sharing здесь]<br>
Не забудьте отключить external build (File->Preferences->Compiler->Use external build -- disable) и написать в начале .tm-файла магические строчки:
+
Мы никогда не удаляем Ваши работы, поэтому, если Вы заметили ошибку в этой таблице - никогда не поздно о ней сообщить, поправим.
<br> gentree = true
+
<br> genast = true
+
<br> positions = "offset,line"
+
<br> endpositions = "offset"
+
  
 
== Список литературы ==
 
== Список литературы ==
Строка 55: Строка 73:
 
== Полезные ссылки ==
 
== Полезные ссылки ==
 
JetBrains MPS: http://www.jetbrains.com/mps <br>
 
JetBrains MPS: http://www.jetbrains.com/mps <br>
Отчеты об ошибках писать сюда: http://youtrack.jetbrains.com/issues/MPS <br>
+
Отчеты об ошибках MPS писать сюда: http://youtrack.jetbrains.com/issues/MPS <br>

Текущая версия на 04:53, 25 декабря 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: Практическое занятие (проект)

02.10.2013: Пример "Калькулятор" (проект)

09.10.2013: Generation, пример

16.10.2013: Практическое занятие (проект)

23.10.2013: Aspect programming, пример

30.10.2013: Практическое занятие

06.11.2013: Контрольная работа

13.11.2013: нет занятия (devdays)

20.11.2013: Spoofax (homepage)

27.11.2013: Forth

4.12.2013: XText

11.12.2013: Kotlin

18.12.2013: bonus: mbeddr languages

25.12.2013: выставление зачетов

Домашние задания

1. Парсер упрощенного XML, срок сдачи до 15.09
2. Модель домена калькуляторов, срок сдачи до 29.09
3. Генератор калькуляторов, срок сдачи до 27.10
4. Генерация HTML-расписания, срок сдачи до 10.11
5. Spoofax: Expressions, срок сдачи до 02.12
6. XText: Subscribers graph, срок сдачи до 16.12
7. Kotlin: state machines, срок сдачи до 22.12

Результаты здесь
Мы никогда не удаляем Ваши работы, поэтому, если Вы заметили ошибку в этой таблице - никогда не поздно о ней сообщить, поправим.

Список литературы

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