- Дефиниши софтверски језик.
- Дефиниши домен.
- Шта је језик специфичан за домен?
- Када језик можемо сматрати ЈСД?
- У чему је разлика између језика специфичног за домен и језика опште намене?
- Шта је главни разлог подизања продуктивности употребом ЈСД?
- Опиши проблем менталног мапирања код развоја софтвера.
- Како ЈСД утиче на квалитет софтвера?
- Како ЈСД утиче на еволуцију и одржавање апликација?
- Опиши главне архитектуре приликом израде ЈСД. Предности и мане.
- Градивни елементи језика.
- Шта је апстрактна синтакса језика? Наведи пример.
- Шта је конкретна синтакса језика? Наведи пример.
- Како можемо дефинисати семантику језика?
- Класификација језика према врсти конкретне синтаксе.
- Текстуалне синтаксе - предности и мане.
- Графичке синтаксе - предности и мане.
- Подела ЈСД према врсти домена. Наведи пример.
- Подела ЈСД према начину имплементације (интерни/екстерни). Предности и мане. Наведи пример.
- Мане/критике ЈСД.
- Шта су језичке радионице?
- Приступи у изради језичких радионица.
- Шта су пројекциони едитори? У чему се разликују од радионица базираних на парсирању.
- Шта је парсирање или синтаксна анализа?
- Шта је стабло парсирања или стабло конкретне синтаксе?
- Шта је стабло апстрактне синтаксе? По чему се разликује од стабла парсирања?
Објасни на примеру.
- Шта је секундарна нотација/синтакса?
- Како дефинишемо модел?
- Које су основне карактеристике модела?
- Шта је мета-модел?
- Шта је мета-метамодел? Које мета-метамоделе познајеш?
- Шта је мета-језик?
- Објасни стек за мета-моделовање. Паралела са класичним програмским језицима.
- Шта представљају “мета” везе (conformsTo) између мета-нивоа? Каква је
разлика између веза истанцирања унутар једног мета-нивоа и између
мета-нивоа?
- Које операције користимо при мета-моделовању?
- Шта је апстракција? Између којих мета-нивоа стека за мета-моделовање се користи?
- Шта је класификација? Каква је веза са мета-нивоима стека за
мета-моделовање? Где се може користити?
- Шта је генерализација?
- Шта су токен модели а шта модели типова?
- Шта је MOF?
- Шта је ECore?
- Објасни усклађеност елемената кроз мета-нивое на примеру.
- Објасни како се спроводи анализа домена.
- Шта је свеприсутни језик?
- Објасни трансформације програма. Која је разлика између трансформације унутар истог језика и између различитих језика? Наведи примере.
- Шта је рефакторисање у контексту трансформације програма?
- Опиши индуктивни и дедуктивни приступ при дефинисању домена.
- Објасни однос између скупа програма домена (\(P_D\)) и скупа програма написаног на неком језику (\(P_l\)).
- Шта је надапроксимација и подапроксимација домена језиком? Које су практичне импликације?
- Објасни концепт хијерархије домена и које користи доноси.
- Шта је лексичка анализа? Дефиниши токен и лексему.
- Опиши проблеме који се могу јавити приликом лексичке анализе (“lexer hack”).
- Шта је формална граматика и од којих елемената се састоји?
- Објасни хијерархију граматика по Чомском.
- Шта је извођење (деривација)? Која је разлика између реченичне форме и реченице?
- Објасни лево и десно извођење.
- Шта је вишезначна граматика? Објасни на примеру “висећег else” (dangling else).
- Како се може разрешити вишезначност граматике?
- Шта је лева рекурзија и зашто представља проблем код неких врста парсера?
- Како се елиминише директна лева рекурзија?
- Упореди силазне (top-down) и узлазне (bottom-up) стратегије парсирања.
- Објасни концепт предувида (lookahead) у процесу парсирања.
- Шта је стратегија враћања (backtracking) код парсера? Које су предности и мане?
- Упореди LL и LR парсере.
- Шта су граматике израза за парсирање (PEG) и по чему се разликују од контекстно слободних граматика?
- Шта је “packrat” парсер и како обезбеђује линеарно време извршавања?
- Упореди приступ израде парсера помоћу генератора и помоћу интерпретера граматика.
- Шта су генерализовани парсери и која је њихова основна предност у односу на детерминистичке LL/LR парсере?
- Како генерализовани парсери, попут GLR, рукују са вишезначним граматикама?
- Шта је шума парсирања (Parse Forest) и у ком контексту се користи?
- Након што генерализовани парсер врати више могућих стабала, како се може извршити разрешавање вишезначности (дисамбигвација)?
- Објасни принцип рада GLR парсера. Како он симулира недетерминистички алгоритам?
- Шта су синтаксни предикати у PEG граматикама и чему служе? Наведи пример.
- Која је разлика између оператора избора (
|) у CFG и оператора уређеног избора (/) у PEG?
- Која су два основна прагматична начина за дефинисање семантике језика? Укратко их објасни.
- Наведи и укратко опиши основне приступе у генерисању програмског кода.
- Објасни приступ генерисању кода помоћу шаблона (Template Engines). Који су основни елементи те архитектуре?
- Упореди “print” приступ генерисању кода са приступом базираним на шаблонима. Које су предности и мане?
- Шта је ин-лајн генерисање кода и који алат се најчешће користи за његову имплементацију? Наведи пример.
- Које су добре праксе приликом генерисања кода у циљу очувања читкости и лакшег одржавања?
- Опиши проблем интеграције ручно писаног и генерисаног кода. Зашто је важно решити овај проблем?
- Упореди два начина за очување ручних измена у коду: заштићене секције (protected regions) и коришћење могућности језика (нпр. наслеђивање).
- Какав је однос између генерисаног кода и система за контролу верзија (VCS)? Када генерисани код треба, а када не треба додавати у репозиторијум?
- Наведи и укратко опиши (може и дијаграмом) барем два обрасца за интеграцију генерисаног и ручно писаног кода у објектно-оријентисаним језицима.
- Шта је интерпретер у контексту извршавања модела? Упореди предности и мане интерпретирања у односу на генерисање кода.
- Када бисте се одлучили за генерисање кода, а када за интерпретацију приликом имплементације ЈСД? Наведи факторе који утичу на одлуку.
- Објасните протокол језичких сервера (Language Server Protocol - LSP).
Који проблем решава?