Overview: In this course, we have three main objectives.
(A) We will study features of programming languages and how they are implemented. For instance, when passing parameters to functions, is it pass-by-value, pass-by-reference, or pass-by-name? What is the difference? What are the benefits of one design choice over another? How does one implement pass-by-name?
(B) We will study how to implement a compiler. How do we specify the syntax? How do we scan? How do we parse?
(C) We will learn several practical and programming languages (Excel VBA, Kotlin, C++,) as time permits to add to the ones you already know, or else learn new features of a programming language you know (e.g. generators, enumerate and zip in Python).