CS403/CS503: Programming Languages


Printable Version

Contact Information

Instructor: Dr. John C. Lusth Email: lusth@cs.ua.edu Web: http://beastie.cs.ua.edu/proglan/
Office: 3427 SEC Hours: signup sheet is on my office door Phone: 205-348-1618

Catalog Statement

Formal study of programming language specification, analysis, implementation, and run-time support structures; organization of programming languages with emphasis on language constructs and mechanisms; and study of non-procedural programming paradigms.

Implementing the Catalog Statement

Students will embed features from various languages into Scam, a lexically-scoped variant of LISP. Students will also individually implement a programming language of their own design and write a significant program demonstrating the language.

Additional and orthogonal subjects to be covered in this class are: lexical analysis, syntactical analysis, parameter passing strategies, and axiomatic semantics.

At the end of this class, a student should be understand the concepts of: syntax vs. semantics, data vs. procedures, objects and state, functional programming, evaluation strategies, and interpretation vs. compilation.


CS200 and CS201 (soon to be CS300 and CS301)

Textbook and Supplies

Ableson and Sussman, The Structure and Interpretation of Computer Programs, McGraw Hill, 2nd edition, 1996

A Linux-based laptop computer is required for this course. A Windows-10 installation that includes bash is acceptable. A Mac installation is possible with some work.

Larger Issues

This class is not only concerned with what you learn. but how fast you learn. The only way to learn quickly is read in advance, take your study group seriously, ask copious questions, and start all programming tasks early.


The reading schedule can be found at:

Make sure you read the assigned material, work any exercises, and explore answering any questions prior to class.


Attendance is not required. If you miss, you are expected to get any missing information from other members of the class, especially your study group. I will not tell you what you've missed as I am too lazy to lecture over the same material more than once.

An absence will be excused if you provide a written, university authorized, excuse.


Grades will be determined by the following percentages:
10% Prerequisite Exam
30% Periodic Concept Exams (2)
20% Final Exam
20% Large programming assignment
20% Small programming assignments (3)

Grading Methodology

The Prerequisite Exam is a multiple choice test consisting of questions that will be somewhat randomly selected from the set of questions found at:

Note that selected questions may be randomly tweaked.

For all programming assignments, you must pass all tests. If you fail even one test, you will have to resubmit. You are allowed three resubmissions, with each resubmission resulting in 8, 12, and 16 point deductions respectively. If you cannot pass all tests after your third resubmission, you will receive a score of 25% if you can pass a majority of the tests. Otherwise, you will receive a zero.

For your designer programming language, you should implement the following support modules in the order given:
The milestones for having these support modules completed are found in the schedule.

Your final project must have a certain level of functionality (given in the project description). Otherwise, you will receive a failing grade for the class.

Grading is straight scale with the following cut-offs: 90% and above is an A, 80% and above is a B, 70% and above is a C, 60% and above is a D, and anything lower than 60% is an F. These cut-offs are strict. For example, 79.99999% is a C. The delta for plus-minus is two points. For example, 90..92 will be an A-, while 98..100 will be an A+.

Undergraduate students will be able to omit a certain number of questions on exams. Graduate students will not be able to omit any questions.

Other Details

The following conventions will be followed in Programming Languages. Please make sure that you fully understand each of the items listed below.