Computer Science 164 — Programming Languages and Compilers (4 Units)

Course Overview


CS164 is an introduction to the design of programming languages and the implementation of translators for them. In the class, you'll do some general exploration of programming language design and its implications for implementation, and look at a dialect of at least one particular language.

One goal of the course is to explore the structure of programming languages and to consider alternatives to familiar programming language features. You'll also study the problem of translating programming languages into machine-executable forms, abstracted to a platform-agnostic language. You'll study language translation to: (1) learn some of techniques used that are useful for many programming problems outside of language translation, (2) gain a better intuitive feel for the tools used when programming and the costs of the programs, and (3) (possibly most important) gain experience with the engineering problems associated with building and validating a substantial piece of software.


  • CS61B, 61C

Topics Covered

  • Lexical Analysis
  • Parsing
  • Static Analysis: Scope and Types
  • Operational Semantics
  • Code Generation
  • Lightweight Optimization


Course Work

  • Homework due weekly/biweekly
  • 2 midterms
  • 1 final
  • ~7 Solo programming assignments

Time Commitment

Medium time commitment, especially around project deadlines. Expect to spend 5 hours per project. This class consumes about 15-20 hours a week.

Choosing the Course

When to take

This course should be taken after the prerequisites, and preferably as soon as possible as the graduate courses are not offered regularly. Would highly recommend taking one of CS162/CS164 and having a solid understanding of the other.

What next?

  • CS264, a graduate level class in analysis of programs.
  • CS263, a graduate level class focusing on theory behind language theory
  • CS294-15, a graduate level special topics course focusing on program analysis and testing.

Usefulness for Research or Internships

Domain Specific Languages yield specialized positions, usually in a HCI/HPC context. General compilers knowledge is useful for optimization and analysis roles.

Additional Comments/Tips

Go to discussion - CS164 GSIs usually do research in a related area (including the undergraduates).