Programming Languages and Compilers I
198:515, Fall 2018


Course Description

This course covers topics in programming languages and compilers such as: LL(1) and LR parsing techniques with error handling; attribute grammars and their use in syntax-directed translation; type systems and polymorphism; models of programming language semantics (i.e., operational semantics through closure interpreters ); data abstraction; functional, logical, and object-oriented paradigms; intermediate representations of programs; parallel programming models; automatic parallelization/vectorization, GPU and CUDA programming, model, data, and computational approximations.

The follow-up course 198:516 will focus on advanced, optimizing compiler design and typically includes a programming project to write an optimizing compiler.


The prerequisites include familiarity with an imperative programming language (e.g., C), an undergraduate or graduate compilers course, and an undergraduate or graduate data structures / algorithms course. Permission of the instructor must be obtained if you lack a prerequisite.



Academic Integrity

This course requires that every student adheres to the DCS Academic Integrity Policy. DO NOT CHEAT ! If you have any questions whether a particular activity is considered cheating, talk to the instructor. You have to make sure that all your project files are read protected. If you don't know how to do this in Linux, ask your TA. Leaving a project file unprotected and thereby visible to your fellow students is considered cheating.

If you need an extension to a project or homework, let the instructor know as early as possible.

Read/Post questions

Please post questions regarding homeworks and projects using Rutgers's Sakai/Piazza system . DO NOT send homework or project questions directly to me. THANKS!
You should read the sakai/piazza 515 site at least every other day!






Tuesdays, noon - 3:00pm, SEC 220, Busch campus

Homeworks and Practice Problems

Homeworks will not be graded. They are meant for exam and project preparation.


For the projects, we use the machines in the ilab cluster and a set of ARM-based multi-core boards. The ilab cluster machines contains the listing of valid hostnames available for projects. You have the same home directory across all machines of the ilab cluster .