CS 333: Syllabus

Syllabus for Fall 2009

Topics and Reading Assignments



In-class Exams (2) 20%
Final Exam 15%
Class Participation 10%
Assignments 35%
Homeworks 20%

Assignments and homeworks will account for over half of your grade, with exams and class participation accounting for the remainder. The grading policy on assignments is that the tasks specified explicitly in the lab description will constitute about 85% of the assignment. If you complete the specified parts of the assignment properly, and produce a high-quality writeup, it's worth up to a B+ grade. In addition, the lab description will include a variety of extensions to the assignment, or you can come up with your own. Completing one or more extensions, in addition to the specified parts of the assignment, will earn you some flavor of A.

In the second half of the course, you'll divide into groups and learn two languges of different types in depth. You'll be responsible for presenting your languages to the rest of the class, describing how the language deals with various issues and going over syntax, semantics, and example programs.


Weekly homeworks will mostly be small programming assignments or problem sets, which are expected to take less than two hours to complete. Homeworks are due by class time on the given due date. The homework deadline is a hard deadline, since we will usually discuss them in class. Homeworks should be your own work. You are encouraged to discuss the homework concepts among yourselves, but your code and your answers should be your own.

Assignments will be longer projects. You may work in pairs, but expectations will be higher. For full credit, assignments need to be submitted prior to midnight on the due date. Assignments submitted late will be penalized 20% per day.

Collaboration on assignment concepts and ideas between groups is acceptable, but you need to understand everything you do, and your code should be your own group's code. If you use ideas from another group, be sure to indicate that within your code or writeup. Err on the side of caution. The worst thing that can happen is the professor noticing disturbing similarities in homeworks or assignments with no attribution of credit.


For the assignments, you will need to put together writeup on a wiki page or web page (you are free to do either). The writeup should describe the assignment, explain any required theory, and present the results. Your audience for the writeup is your fellow students who might be interested in what you're doing. To hand in your code, create a single zip file and email it to me. Please do not link code to your wiki/web page.

Weekly Topics and Readings

  • Introduction, course concept, background
  • History of Programming Languages
T. & N. Chapter 1
  • Syntax
  • Grammars, Backus Naur Form
  • Concrete syntax
T. & N. Chapters 2-3
  • Abstract syntax
  • Names
  • Variables
T. & N. Chapters 2-4
  • Scope
  • Symbol tables and lifetime
  • Types
T. & N. Chapters 4-5
  • Basic types
  • Conversions
  • Pointers, arrays, and strings
T. & N. Chapters 5-6
  • Functions
  • Structures and Variants
  • Polymorphism
T. & N. Chapter 5-6
  • Exam I
  • Practical expression semantics
  • Program state and semantics
T. & N. Chapters 7-8
  • Assignment and expression semantics
  • Conditional and Loop semantics
  • Blocks and for loop semantics
T. & N. Chapter 7-8
  • I/O semantics
  • Exception semantics
  • Function semantics
T. & N. Chapter 7-9
  • Function optimization
  • Memory management
  • Concurrent programming
T. & N. Chapters 9-11
  • Synchronization
  • VHDL: explicitly parallel
  • Review
T. & N. Chapter 17
  • Exam II
  • VHDL
  • Functional programming
  • Presentations (logic)
T. & N. Chapter 12
  • Presentations (imperative/scripting)
T. & N. chapter 14