
Computing
Programming Language Translation
- Class 60
- Practice 0
- Independent work 90
Course title
Programming Language Translation
Lecture type
Obligatory
Course code
183425
Semester
5
ECTS
5
Lecturers and associates
- Associate Professor PhD Goran Delač
- Assistant Professor PhD Ante Đerek
- Full Professor PhD Siniša Srbljić
- Associate Professor PhD Marin Šilić
- Associate Professor PhD Dejan Škvorc
- Assistant Professor PhD Klemo Vladimir
Course objectives
Programs that take (other) programs as input such as interpreters, compilers, type-checkers, documentation, generators; Data structures to represent code for execution, translation, or transmission; Interpretation vs. compilation to native code vs. compilation to portable intermediate representation; Language translation pipeline: parsing, optional type-checking, translation, linking, execution.
Lexical analysis using regular expressions; Lexical analyser generators.
Top-down parsing (S, Q, and LL(k) grammar, recursive descent parsing).
Bottom-up parsing (shift-identify, shift-reduce, LR parsing).
Parser generators.
Abstract syntax trees; Attributed syntax trees; High-level program representations such as abstract syntax trees; Scope and binding resolution.
Type checking; Attribute and attribute-translation grammars.
Midterm exam.
Run-time representation of core language constructs such as objects (method tables) and first-class functions (closures); Run-time layout of memory: call-stack, heap, static data; Procedure calls and method dispatching.
Memory management; Manual memory management: allocating, de-allocating, and reusing heap memory; Automated memory management: garbage collection as an automated technique using the notion of reachability; Dynamic memory management approaches and techniques: malloc/free, garbage collection.
Data layout for objects and activation records; Just-in-time compilation and dynamic recompilation; Other common features of virtual machines, such as class loading, threads, and security; Static and dynamic linking.
Basic blocks; Static single assignment; Source code, native code, and virtual machine code; Separate compilation; Linking; Absolute, relocatable, and virtual machine target code; Syntax-driven code generation; Intermediate code generation.
Control-flow graphs; Def-use chains; Instruction scheduling; Instruction selection; Register allocation.
Implementing loops, recursion, and tail calls; Machine-independent optimization; Machine-dependent optimization; Peephole optimization.
Final exam.
Required reading
(.), Prevođenje programskih jezika, S. Srbljić, Element,
(.), Modern Compiler Design, D. Grune, H. E. Bal, C. J. H. Jacobs, K. G. Langendoen, Wiley,
(.), Compilers: Principles, Techniques, and Tools, A. V. Aho, R. Sethi, J. D. Ullman, Addison-Wesley,
(.), Engineering a Compiler, K. Cooper, L. Torczon, Morgan Kaufmann,(.), Advanced Compiler Design and Implementation, S. S. Muchnick, Morgan Kaufmann,
(.), Algorithms for Compiler Design, O. G. Kakde, Charles River Media,
Online education during epidemiological measures
- Study program duration
- 6 semesters (3 years)
- Semester duration
- 15 weeks of active teaching + 5 examination weeks
- Total number of ECTS points
- 180
- Title
- Bacc.ing.comp (Bachelor of Science in Computing)
Academic calendar
Minimal learning outcomes
- Breakdown the design of a computer system into problem analysis phase and solution synthesis phase
- Describe lexical, syntax, and semantic properties of a programming language using formal grammar
- Select optimal formal grammar for formal description of a programming language
- Select optimal parsing technique for programming language translation
- Design and implement a compiler from formal specification of a programming language
- Design an efficient language translation process with respect to processor resources and memory hierarchy