The project will provide an opportunity to either do a substantial programming task or investigate a contemporary topic in programming language design. The former will provide experience with a significant sotware project, and will include a 1-2 page write-up of your results. The latter will include a more modest programming part, along with a 4-6 page narrative that uses two or three outside sources beyond the text for the course. Projects will be done individually. A brief presentation of your project during the final exam period will conclude the course. Here are some sample project topics:
Week of | Topics | Readings | Work Due |
Jan 26 | Introduction: programming language design, paradigms, implementation, syntax, formal methods, EBNF | Chapter 1, 2 | Assignment 1 |
Feb 2 | Concete and abstract syntax; syntax of statements, expressions, and programs | Chapter 2 | Assignment 2 |
Feb 9, 16 | Type systems and formal semantics | Chapter 3 | Assignment 3 |
Feb 23 | Syntax and semantics of imperative program elements: elementary types, statements, and method call | Chapter 4 | Test 1 |
Mar 1, 8 | Memory management for imperative programs: stack, heap, and garbage collection for arrays and other dynamic structures. | Chapter 5 | Assignment 4 |
Mar 15, 22 | ***Spring Break*** | ||
Mar 29, Apr 5 | The functional programming paradigm: lambda calculus and Haskell | Chapter 8 | |
Apr 12, 19 | Logic programming: Horn clauses, relations, facts, and Prolog; resolution, unification, applications in natural language processing. | Chapter 9 | Assignment 5 |
Apr 26, May 3 | Concurrent programming: Java threads, concurrent control, and applications | Chapter 11 |
Assignment 6
|
May 10 (1/2 week) |
Final project selection and discussion |
Test 2
|
|
May 17 | *** Project presentations *** |