Universitatea Babeş-Bolyai Cluj-Napoca
Facultatea de Matematică şi Informatică
Ciclul de studii: Licenţă
Domeniul: Informatică
Programul de studii: Informatică - în limba engleză
Limba de predare: Engleză

SYLLABUS

I. General data
Code	Subject	
MIF0005	Advanced  Design of Compilers	

Semester	Hours: C+S+L	Category	Status	
6	2+0+2	speciality	optional	

II. Full status faculty members
Name and	Scientific	Didactic	Chair	Type of activity	
surname	title	title		C	S	L	
MOTOGNA Simona Claudia	Ph.D.	Assoc.Prof.	Programming  Languages and Methods	*			

Associated faculty members
Name and	Scientific	Institution	Type of	Type of activity	
surname	title		position	C	S	L	

III. Course objectives
Continue course in “Formal Languages and Compiler Design”. Back-end phases in a compiler. Introduce specific mechanisms in compiler for different programming paradigms, in order to understand their functioning and to be able to implement these techniques.	

IV. Course contents
The course will present techniques and algorithms for back-end of a general compiler: intermediary code generation, compiler optimizations and object code generation.
In the second part, several design strategies for language dependent-compilers are presented. The course will study, from a compiler point of views different programming paradigms: imperative, object-oriented, functional and logical. Java language will be presented as a special case.	

V. Bibliography
1. A.V. AHO, D.J. ULLMAN - Principles of computer design, Addison-Wesley, 1978.
2. GRUNE, DICK - BAL, H. - JACOBS, C. - LANGENDOEN, K.: Modern Compiler Design, John Wiley, 2000 
3. MITCHELL, JOHN: Foundations for Programming Languages, MIT Press, 1996 
4. MOTOGNA S.: Metode de proiectare a compilatoarelor, Ed. Albastra, 2006
5. Sun Java Systems, [http://docs.sun.com/db/prod/java.sys], 01.09.2004	

VI. Thematic of didactic activities per weeks
Course 1: Review compiler phases. Semantic analysis. Define attribute grammar. [1,4]
Course 2: Attribute grammar evaluators. L-attributed grammars, S-attributed grammars [2,4]
Course 3: Manual methods [2,4]: 
•	Control flow graph,
•	Symbolic interpretation
•	Data flow equations
Course 4: Intermediary code generation [1,2,4]. Three-address code: quadruples, triples
Course 5: Intermediary code optimization [1,4]
Course 6: Object code generation. Optimizations of the object code [1,2,4]
Course 7: Compiler design for imperative and object-oriented languages (I): Identification, Type checking, Type table, Source Language Data Representation & Handling [2]
Course 8: Compiler design for imperative and object-oriented languages (II):, Functions- activation records, Object Type, Inheritance, Polymorphism [2,3]
Course 9: Compiler design for functional languages [2,3]
Course 10: Compiler design for logical languages [2,3]
Course 11: Memory management: Garbage Collection mechanism [2,3,5]
Course 12: Java Language Design [3,5]	

VII. Didactic methods used
Exposure: desacription, explanation, presentation with proofs, introductive presentations
Conversation: Heuristic conversation, debate, dialog, introductive conversations, for consolidating information, for synthesis
Didactical Proof: proofs at the blackboard, with logical steps .
Modeling: using models and patterns. 
Algorithmization: algorithmic description. 
Problematization: QA session, problems and practical situations 
Othert methods: case study, individual study, exercise.	

VIII. Assessment
The final grade will reflect the lab activity and the knowledge obtained by the students.
The final mark will be compute from: 
40% Lab assignements
20% Presentation
40% Written exam	

IX. Additional references
***[lex & yacc] - http://dinosaur.compilertools.net/	

	Date,							Course responsible,
							Assoc.Prof. MOTOGNA Simona Claudia, Ph.D.