Анотация
Обсъждат се теоретичните аспекти на методите за транслация на езици за програмиране от високо ниво, архитектурата и организацията на работа на транслаторите, както и техники за реализацията им. Като курсов проект се разработва компилатор, превеждащ минимално подмножество на език от високо ниво в термините на език-мнемокод (Assembler, Java Bytecode, .NET IL и др.). Придобитите знания и умения са полезни при разработката на подобни реални системи, при по-доброто използването на такива системи в практиката, както и за по-дълбокото разбиране на езиците за програмиране и някои аспекти на тяхната ефективност.
КОНСПЕКТ (виж видео лекциите в ClassRoom и презентациите в помощните материали в края на тази страница)
Изисквания към проекта
Всеки студент трябва да разработи проект по Методи на транслация. Проекта трябва да представлява транслатор (компилатор) преобразуващ програми на език от високо ниво (SimpleC или SimpleP) до език от ниско ниво (машинен език или асемблер за платформите базирани на x86, .Net IL или Java ByteCode). Синтаксиса на възможните входни езици е даден в помощните материали за курса.
Вие можете да:
- използвате произволен език за програмиране;
- използвате произволна среда за разработка;
- използвате произволна операционната система;
- използвате произволен метод на синтактичен разбор;
- използвате произволен метод за генерация на код;
- реализирате компилатора като конзолно, графично, WEB или друго приложение;
- работите в групи от двама човека (на изпита всеки решава самостоятелно задачата);
- използвате стартовия проект scsc (даден е в помощните материали), като основа за създаване на собствен проект;
- обсъждате проблема, изискванията и материалите с всеки;
Вие НЕ можете да:
- използвате проекти (или части от тях) създадени от други лица за целите на този курс, включително създадени в предишни учебни години;
- използвате проекти (или части от тях) създадени от други лица за сходни цели;
- използвате код, който не сте реализирали собственоръчно (с изключение на код от стартовия проект);
- използвате компилатори/генератори на компилатори;
Критерии за оценяване
В зависимост от сложноста на избраната от вас граматика на език и в зависимост от степента на завършеност на реализацията, вие получавате точки както следва:
- Simple-C-1 или Simple-P-1 (лексикален, синтактичен и генерация): (10-15 точки);
- Simple-C-3 или Simple-P-3 (лексикален, синтактичен и част. ген.): (15-25 точки);
- Simple-C-3 или Simple-P-3 (лексикален, синтактичен и генерация): (25-35 точки);
- Simple-C-5 или Simple-P-5 (лексикален, синтактичен и част. ген.): (25-35 точки);
- Simple-C-5 или Simple-P-5 (лексикален, синтактичен и генерация): (40 точки);
- За допълнителни конструкции в езика или възможности на компилатора: (0-10 бонус точки);
- За тестови примери за езиците Simple-C#, Simple-C, Simple-P: (0-20 бонус точки).
Оценката на проект се формира по формулата: (20 + Брой точки)/10. Оценката се получава на практическата част от изпита при решена задача и при представен проект. Задачата се състои в промяна на разработения проект в определена насока (например добавяне на нова синтактична конструкция в езика и др.). Всеки който получи 3.00 или повече на практическата част има право да се яви на теоретичната част на изпита (тест носещ общо до 40 точки). Оценката от теория се формира по същата формула, както тази от практическата част. Крайната оценка от изпита се формира като средно аритметично от двете оценки (практическа и от теория). Ако една от оценките е слаб, то студента трябва да се явяви на поправка.
Работа през семестъра и предаване на проекта
Всеки судент е длъжен да работи по проекта си през семестъра. Работата задължително става с използването на GitLab сървъра на ФМИ (повече информация за достъпа и начина на използването на тази система за контрол на версиите вижте ТУК).
Задължително е в хранилището да бъдат качени всички съществени промени от началото на развитие на проекта до окончателното му завършване. Всеки решава дали да изпраща промените (commit) си в сървъра по-често или по-рядко, но задължително по всеки проект трябва да има поне 4 commit-а в течение на семестъра. Наличието или липсата на такива регилярни версии, както и конкретното съдържание на кода на проекта може да окаже влияние върху общия брой на точките, които ще получите. Работата по проекта може да продължи до изпита (както между изпита и евентуалната поправка) и съответно качва промени в хранилището да продължи.
Задължително е проекта да се намира в хранилището, като той трябва да е във вид готов за сваляне и компилация. Проекти не отговарящи на изискванията няма да бъдат проверявани и оценявани.
На изпита всеки ще използва последното състояние на работното копие, като след решение на задачата трябва да я качи като нова версия в хранилището.
Проектите подлежат и ще бъдат проверявани автоматично и ръчно. Автоматичната проверка включва (но не се ограничава само до) използване на системи за автоматизирана проверка за плагиатство (т.е. преписване от ваши колеги и/или от чужди проекти в Интернет). Ръчната проверка представлява преглед и експерементиране с проекта от страна на преподавател. При установяване на плагиатство или съмнение за такова точките на съответните студенти ще бъдат драстично намалени (пропорционално на процента на "взаимстваните" части от код), в допълнение на това ще бъде публикуван списък с провинилите се студенти, както и ще се вземат всички други мерки в съответствие с Регламента за реакция при нечестни прояви.
Литература
- A. V. Aho, M. S. Lam, R. Sethi, and J. D. Ullman, Compilers: Principles, Techniques, and Tools (Second Edition), Addison-Wesley, 2007, 1009 pages, ISBN 0-321-48681-1;
- Niklaus Wirth, Compiler construction, Addison-Wesley, 1996, 176 pages, ISBN 0-201-40353-6;
- A.A.Puntambekar, Compiler Construction, Technical Publications, 2009, 572 pages, ISBN 8-184-31717-4;
- Д. Грис, Конструирование компиляторов для ЦВМ, Москва, МИР, 1975 г., 544 стр;
- http://llvm.org
- и други.
Регистрирай се за курса и изпита
Внимание!!!
Всеки студент трябва да се регистрира в Google Classroom със университетската си поща (т.е. с адрес завършващ на @uni-plovdiv.bg) и да се присъедини към курс с код: czleg6d
Информация за лекциите, упражненията и други текущи ще може да намерите след присъединяаването си в Classroom.
Ако се наложи онлайн връзка ще ползваме Meet бутона "Присъединяване" горе в ляво в класрума на дисциплината. (за извънредни онлайн лекции, упражнения, изпити, консултации и др.)