CSCI 344 Course Schedule and Homework


WEEK 1: 1/17 - 1/21

Tuesday, January 18th is the first day of class.

Homework due Thursday 1/27: Write a 1-2 page paper comparing two programming languages in terms of the evaluation criteria discussed in class; as many as are relevant for the language pair you consider. Research will be required to evaluate some of the criteria. You can focus on a particular application domain you are interested in if you like.
Introduction to Programming Languages. Types of languages. Compilation vs. Interpretation. Overview of Compilation.

WEEK 2: 1/24 - 1/28

Last day to drop without a "W": Friday, January 28th

Homework due Thursday 2/3: Write a working lexer for a programming language of your choice. Pay careful attention to keywords, format of legal identifiers (variable, function names), single- and double-quoted strings, representation of numeric literals (hex, octal, scientific notation, etc.), and the legal operators in the language (probably fewer than there are in C for most languages). You must add comments in your flex specification with links to language documentation justifying your choices. Also send me a sample program in the language that demonstrates that your tokenizer works correctly.
Tokenizing. Regular Expressions.

WEEK 3: 1/31 - 2/4

Regular languages and grammars. Chomsky Hierarchy.

WEEK 4: 2/7 - 2/11

Homework due Tuesday 2/15: Exercises from regular expression worksheet.
NFA, DFA, various approaches to dealing with non-determinism in parsing.

WEEK 5: 2/14 - 2/18

Homework due Tuesday 2/22: Exercises on NFA to DFA conversion, recognizing regular vs. non-regular, pumping lemma.
Context-Free languages, pumping lemma.

WEEK 6: 2/21 - 2/25

Details on CYK, Earley, LL(k), LR(k), LALR, etc.

WEEK 7: 2/28 - 3/4

Homework due Thursday 3/10: Exercises on CFG, CNF, CYK.

WEEK 8: 3/7 - 3/11

Midterm exam is Thursday, March 10th.


WEEK 9: 3/21 - 3/25

Withdrawal deadline is Friday, March 25th


WEEK 10: 3/28 - 4/1

Homework (LISP problems) due April 7th.
Lambda calculus.

WEEK 11: 4/4 - 4/8

Functional Programming Languages. Lisp. Material from "Structure and Interpretation of Computer Programs".

WEEK 12: 4/11 - 4/15

Homework (lambda calculus exercises) due April 26th.
More functional programming. Haskell, etc.

WEEK 13: 4/18 - 4/22

No class Thursday, April 21st (Holy Thursday).

Logic Programming. Prolog.

WEEK 14: 4/25 - 4/29

Scripting Languages. General characteristics, some history.

WEEK 14: 5/2 - 5/6

Thursday, May 6th is the last day of class.
The final exam is Thursday, May 12th from 2:00-3:50PM.

A few of my favorite things: bash, sed, and the existence of quines.