Generative programming 2013 — различия между версиями
(→Лекции) |
(→Лекции) |
||
Строка 6: | Строка 6: | ||
[[Медиа: Lect_1_1.pdf | О чем курс]], | [[Медиа: Lect_1_1.pdf | О чем курс]], | ||
[[Медиа: AMSE_4.9.pdf | Textmapper]], | [[Медиа: AMSE_4.9.pdf | Textmapper]], | ||
− | [https://dl.dropboxusercontent.com/u/34699053/Study/TextmapperTest.zip | + | [https://dl.dropboxusercontent.com/u/34699053/Study/TextmapperTest.zip Textmapper example] <br/> |
== Домашние задания == | == Домашние задания == |
Версия 11:22, 5 сентября 2013
Преподаватели - Власьев Михаил Игоревич (mailto:michael.vlassiev@jetbrains.com),
Мухин Михаил Александрович (mailto:Mihail.Muhin@jetbrains.com)
Лекции
04.09.2013:
О чем курс,
Textmapper,
Textmapper example
Домашние задания
1. Парсер упрощенного XML, срок сдачи до 15.09
Написать на Textmapper (плагин к IntelliJ IDEA) парсер текста вида:
<asdf1>
<abc>text 123</abc>
<zxcv2> text text</zxcv2>
</asdf1>
Написать программу, использующую сгенеренный парсер. На вход программе подается файл с текстом. Программа выписывает в консоль полученное от парсера AST или выводит ошибки, возникшие при разборе (в случае, когда они есть). Как передается файл и как выводится дерево - не важно, главное, чтобы было понятно, как запустить программу, и что получилось в итоге.
Спецификация языка
- Теги бывают вида <xyz> и </xyz>, но не <xyz/>
- Внутри каждого тега может быть либо несколько тегов, либо один кусок текста. Текст состоит из слов, каждое из которых - набор букв. Имя тега - набор букв (без цифр). Корневой тег - ровно один
- Теги должны образовывать правильную скобочную структуру. Hint: проверку соответствия идентификаторов открывающего и закрывающего тегов проще всего сделать через semantic actions (см. документацию).
Приблизительная разбалловка
5 - задание сделано и полностью работает
4 - небольшие недочеты, в целом все работает
3 - не работает в некоторых случаях
1 - задание не сдано
+1 балл - все то же самое, но имя тега может включать цифры и буквы, а текст внутри тега состоит из букв, цифр, точек, запятых и знаков пробелов, другие символы в тексте запрещены (см. lexer states в документации textmapper'а).
+1 балл - найти максимальное кол-во ошибок в Textmapper (5 лучших результатов по состоянию на 15.09)
Максимум за все задание можно получить 6 баллов
NB!
Не забудьте отключить external build (File->Preferences->Compiler->Use external build -- disable) и написать в начале .tm-файла магические строчки:
gentree = true
genast = true
positions = "offset,line"
endpositions = "offset"
Список литературы
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
Отчеты об ошибках писать сюда: http://youtrack.jetbrains.com/issues/MPS