Study

Computing

Programming Language Translation

  • Class 60
  • Practice 0
  • Independent work 90
Total 150

Course title

Programming Language Translation

Lecture type

Obligatory

Course code

183425

Semester

5

ECTS

5

Lecturers and associates

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,

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
SHARE : Facebook Twitter