I teach undergraduate and graduate courses in compilers and programming languages.

CS 314 Principles of Programming Languages

This course covers topics in programming languages and compilers such as parsing techniques; attribute grammars and their use in syntax-directed translation; models of programming language semantics (i.e., operational semantics through closure interpreters); data abstraction; functional and logical paradigms; intermediate representations of programs; concurrent programming models; logic programming.

CS 415 Compilers

This course covers the general concepts and theoretical foundations of programming language translation and implementation, as well as tools and techniques for the practice of compiler constructions. Emphasis is placed on imperative languages. Topics include parsing, run-time storage management, error recovery, code generation, and optimization. This course will also discuss some advanced topics in optimization techniques such as automatic parallelization/vectorization, quantum program compilation, and data locality analysis.

CS 515 Programming Languages and Compilers I

Advanced topics in the design and construction of compilers, including scanning, parsing, run-time storage management, error recovery, code generation, and optimization. This class will focus on code generation and optimization for a specific emerging architecture at each semester it is taught.

CS 516 Programming Languages and Compilers II

This course covers principal topics in understanding and transforming programs by the compiler and at run time. Specific techniques include data flow and dependence theories and analyses; resource allocation and instruction/thread scheduling; memory and cache management; static and dynamic program transformation; and performance analysis and modeling. Course projects include the design and implementation of program analysis and improvement tools. This class will have an emphasis on an emerging architecture each semeter it is taught.

CS 671/672 Seminar in Computer Science

This course mostly is focused on reading and discussing of recent papers on compiler construction for emerging architectures.