This is the homepage for CS241 for Fall 2023 at the University of Waterloo.
This course covers the relationship between high-level programming languages and the computer architecture that underlies their implementation. At the end of this course, you will hopefully learn the fundamentals of the compilation of computer programs to machine-executable code and how to implement simple versions of the algorithms that underpin this translation.
We will cover the following topics:
Functional components of a computer (CPU, memory, I/O) and their interactions. Representation of data in a computer and its manipulation at the machine-language level and in high-level languages.
Assembly language and the implementation of an assembler. Overall structure of a compiler and the functions of its components. Purpose and functions of linkers and loaders.
Specification and recognition of regular languages and their use in lexical analysis (lexical-analysis tools). Specification and parsing of context-free languages (parsing tools). Semantic analysis and code generation for procedural languages.