Програмски преводиоци 1/Пројекат
Пројекат на предмету важи за једну од најтежих активности на њему због тога што захтева практичну примену знања стечених у трећем блоку (и понеких из првог и другог блока). Његова израда може захтевати око недељу дана константног рада (у зависности од нивоа за који радите) али се такође велики део тога може искористити из постојећих материјала са вежби и званичних видео водича за пројекат, на које ће се овај водич надаље ослањати.
Основно
Идеја пројекта јесте конструкција преводиоца за Микројаву — поједностављену, школску варијанту језика Јава чија се спецификација помало мења из године у годину (али неке суштинске ствари остају исте). Преводилац из једног фајла са изворним кодом чита Микројава код по спецификацији датој уз текст пројекта (а одвојеној од саме поставке), пролази кроз четири фазе превођења (лексичку анализу, синтаксну анализу, семантичку анализу и генерисање кода) и његов крајњи резултат јесте објектна датотека са Микројава бајткодом. Тај објектни фајл се затим може извршавати преко Микројава виртуелне машине (чија је имплементација већ дата и не може се мењати) и на основу неког уноса произвести неки излаз.
За пројекат је потребно гледати вежбе трећег блока из табеле симбола и Микројава виртуелне машине, и евентуално вежбе првог и другог блока из JFlex и CUP. Такође су доступни видео водичи за пројекат са странице предмета, које је корисно погледати као увод у алате и нека генерална очекивања. Ти водичи су енкодовани неким јако застарелим кодеком, а реенкодовани снимци се могу наћи овде.
Пре него што пређете на даље одељке, препоручује се да прочитате поставку пројекта. Микројава спецификацију не морате читати, јер ће вам она највише значити приликом самог развијања пројекта.
Поставка
Сада када сте прочитали поставку, о њој је потребно рећи пар речи.
- Структура пројекта уопште не мора да буде онаква каква пише у поставци. То значи:
- Пакет не мора да се зове
rs.ac.bg.etf.pp1. - Не постоји конкретан директоријум у који морате да сместите спецификације лексера и парсера.
- Није обавезно коришћење JDK 1.8 (мада је препоручено)
- Класе не морају да се зову
Compiler,SemanticAnalyzeriCodeGenerator.
- Пакет не мора да се зове
- На одбрани се мање-више гледа само излаз преведеног Микројава програма за модификацију и за јавни тест одговарајућег нивоа за који радите. Ово у пракси значи:
- Нико неће проверавати формат грешке лексера.
- Нико неће проверавати да ли се успешно ради опоравак од грешке.
- Ипак, препоручује се да пробате овај део да одрадите, али ако на неком месту не ради то није велики проблем.
- Нико неће проверавати да ли нисте користили
%precedence(али нико неће ни објаснити како се користи). - Нико неће проверавати како су именовани нетерминали нити класе које одговарају гранама тих нетерминала.
- Нико неће проверавати да ли сте додали акције у спецификацију парсера.
- Свакако се препоручује да потребне акције обављате кроз одговарајуће посетиоце стабла, јер у спецификацији парсера није доступан IntelliSense.
- Није много вероватно да ће предметни сарадници погледати да ли користите њихову табелу симбола, да ли сте је распаковали и превели поново или користите неку потпуно другу имплементацију.
- Ипак, коришћење њихове табеле симбола носи са собом погодност да ћете увежбати рад са њом па нећете много морати да обнављате за такве задатке на испиту.
- Нико неће проверавати да ли сте имплементирали методу
tsdump(). - Нико неће проверавати да ли исписујете симболе при њиховој детекцији.
- Слабо ће се проверавати да ли се пријављују семантичке грешке.
- Ипак, пошто током семантичке обраде свакако мора да се попуни табела симбола, вреди додати ове провере, у крајњем случају зато што ће вама значити уколико будете писали своје тест примере и напишете нешто семантички неисправно.
- Може да се деси да неке ствари из јавних тестова или тестова за модификације које су закоментарисане морају да пријаве семантичке грешке, и да их предметни сарадници откоментаришу приликом одбране.
- Нико неће проверавати да ли се путање до улазних и излазних фајлова прослеђују кроз аргументе командне линије.
- На одбрани се не тражи да се било шта покреће из командне линије, нити преусмерава стандардни излаз и излаз за грешке.
- Примери Микројава кода из поставке и спецификације могу често бити синтаксно или семантички неисправни. Ово је због тога што предметни сарадници не напишу преводилац за спецификацију Микројаве коју су задали, а пример вероватно ископирају из поставке односно спецификације од претходне године, па не провере да ли је исправан.
- На одбрани нико не погледа извештај са пројекта.
- Нико неће тражити да се покрену студентски тестови пројекта.
- Супротно поставци, дорада пројеката на одбрани је дозвољена.
- У одељку за контекстне услове у оквиру спецификације могу бити описане ствари које се не раде у фази семантичке анализе, већ или описују генерално функционисање тог програмског конструкта, или описују ствари које се морају обезбедити у фази генрисања кода.
- Приликом спецификације синтаксе користи се EBNF нотација.
- Подела функционалности по нивоима може бити јако конфузна. Спецификација Микројаве може посебно напоменути за само пар ствари да се имплементирају само на одређеним нивоима (остављајући утисак да је потребно препознати синтаксу за методе и класе чак и у пројекту А нивоа), док поставка може непотпуно излиставати смене које су потребне да се имплементирају за одређени ниво. Најбољи начин за одређивање шта се имплементира за који ниво јесу одговарајући јавни тестови.
Алати
У овом одељку наведене су све напомене у вези са алатима које ћете користити на пројекту, од којих ће неке имати смисла тек након што погледате видео водиче.
- Једна од првих ствари поменутих у видео водичима јесте инсталирање Ant. За овиме нема потребе, јер је Ant већ инсталиран у оквиру Eclipse. Такође, Ant правила се доста лакше могу покретати одласком на Window → Show View → Ant, и затим додавањем
build.xmlфајла у пројекту. - У рачунарским лабораторијама би требало да је доступан и IntelliJ, па можете у њему такође радити пројекат.
- Није неопходно користити Log4j библииотеку за испис уколико не желите.
- Обавезно преузети библиотеке са странице предмета уместо коришћења оних из шаблона пројекта или видео водича, јер њихове верзије могу бити застареле и проузроковати проблеме.