Dokument pre predmet MaGSA.
Dva základné spôsoby generovania zdrojových kódov z pohľadu implementácie generátora:
- Transformácia programom
- Generovanie prostredníctvom šablón
6. 6
Oddelenie generovaného kódu
Generovaný kód je £asto potrebné manuálne prispôsobi´. Generovaný kód
zárove¬ nie je moºné priamo upravova´, pretoºe pri opätovnom vygenerovaní
budú úpravy prepísané. V objektovo-orientovaných jazykoch je moºné oddeli´
generovaný a manuálne písaný kód prostredníctvom dedi£nosti. Táto technika
sa ozna£uje termínom generation gap [4].
Pri tomto spôsobe je generovaná nadtrieda a manuálne úpravy sú vykoná-
vané v triede, ktorá od nej dedí. V¤aka dedi£nosti je moºné v podtriede
jednoducho doplni´ potrebnú funkcionalitu, ale aj nahradi´ generované metódy
vlastnými. Pritom podtrieda má prístup ku funkcionalite generovanej triedy. V
kóde aplikácie sa potom odkazuje vºdy len na manuálne vytvorenú podtriedu.
Niekedy sa pouºíva e²te ¤al²ia trieda, od ktorej dedí generovaná trieda. V
nej je moºné umiestni´ tú £as´ kódu, ktorá sa nemení v závislosti od vstupných
dát generátora. Výsledná hierarchia tried je zobrazená na obr. 0.3.
Manuálne
vytvorená
nadtrieda
Generovaná trieda
Manuálne
vytvorená
podtrieda
Obr. 0.3: Hierarchia tried pri oddelení generovaného kódu dedi£nos´ou
Niektoré jazyky poskytujú iné prostriedky, ktoré sa dajú pouºi´ na odde-
lenie generovaného kódu a jeho prispôsobenie. Napríklad jazyk C# umoº¬uje
rozdeli´ deníciu triedy do viacerých súborov (tzv. £iasto£né triedy, angl. par-
tial classes). Niektoré jazyky ako napr. Ruby umoº¬ujú jednoducho dynamicky
doplni´ deníciu triedy.
7. Literatúra
[1] Cordy, J. R. Txl - a language for programming language tools and appli-
cations. Electron. Notes Theor. Comput. Sci. 110 (December 2004), 331.
[2] Czarnecki, K. Overview of generative software development. In Un-
conventional Programming Paradigms, J.-P. Banâtre, P. Fradet, J.-L. Gi-
avitto, and O. Michel, Eds., vol. 3566 of Lecture Notes in Computer Science.
Springer Berlin / Heidelberg, 2005, pp. 326341.
[3] Fields, D. K., Kolb, M. A., and Bayern, S. Web Development with
Java Server Pages, 2nd ed. Manning Publications Co., Greenwich, CT,
USA, 2001.
[4] Fowler, M. Domain Specic Languages. Addison-Wesley Professional,
2010.
[5] Gradecki, J., and Cole, J. Mastering Apache Velocity. Wiley, 2003.
[6] Kollár, J. Preklada£e. elfa, s.r.o., Ko²ice, 2009.
[7] Visser, E. Stratego: A language for program transformation based on
rewriting strategies system. description of stratego 0.5. In Rewriting Tech-
niques and Applications, A. Middeldorp, Ed., vol. 2051 of Lecture Notes in
Computer Science. Springer Berlin / Heidelberg, 2001, pp. 357361.
7