Home | Lectures | Written Assignments | Programming Assignments | Exams | Cool | Piazza Forum

CS 4610 — Programming Languages — Programming Assignments

Instructions

Start the programming assignments early! Completing the course project is a large, complex, and rewarding task, which is made much easier by giving adequate forethought to design. The course schedule allows ample time to complete the assignments -- take advantage of it.

Documentation and structuring should be incorporated into programs from the beginning. Neither instructors nor teaching assistants will help with incomprehensible programs.

I highly recommend that you find an account on a Unix (or Mac OSX) machine or that you install Cygwin on your Windows machine.

The instructional lab machines should have OCaml, Ruby and Python pre-installed.

Language Guides

C. C is a structured, imperative, weakly-typed language designed for efficient systems programming. This class assumes a passing familiarity with the C programming language. If you are not familiar with it and choose to continue with the class, many tutorials are available online. For example, try this tutorial from Drexel University. Cool. Cool is an imperative, strongly-typed classroom object-oriented programming language. It can be viewed as a simplified version of Java. Haskell. Haskell is a statically-typed, lazy, purely functional language. The HaskellWiki lists a number of tutorials. Note: Of the languages available, Haskell is likely to be the most different from what you are used to. You are not required to use Haskell for any assignment. JavaScript. JavaScript is a dynamically-typed language with object-oriented, imperative and functional support; it is often used in web and asynchronous programming. Many popular JavaScript tutorials are available. OCaml. OCaml is an efficient, functional, strongly-typed, object-oriented language with imperative support. Start with Jason Hickey's Introduction to Objective CAML and move on to the OCaml.org tutorials. Python. Python is a structured, imperative programming language with a high emphasis on readability and support for object-oriented and functional programming. Try the official Beginner's Guide or Guido's Tutorial. Ruby. Ruby is an imperative, dynamically typed, object-oriented language with functional support. You might consider the official Ruby in Twenty Minutes.

Automatic Grading

PA1: The Rosetta Stone

PA2: The Lexer

PA3: The Parser

PA4: The Semantic Analyzer

PA5: The Interpreter


CS 4501 — Compilers Practicum — Programming Assignments

Language Guides

x86-64. A number of on-line resources are available. I used these when making the Reference Compiler. Cool Assembly Language. The definitive source for the assembly language definition as well as the machine model is the Cool Reference Manual.

PA6: The Compiler

PA7: The Optimizer