Independent Study: Chris Thomas
    Sewickley Academy, 2000-2001

Link to Independent Study Course Home Page.

Project 1:  Introduction to Compilers
 
Week # Date Goal
Week 1 Mon 4-Sep n/a
Week 2 Mon 11-Sep Project Definition
Week 3-4 Mon 18-Sep
Mon 25-Sep
A Simple One-Pass Compiler
Read and understand ASU Ch. 1 and 2
Write and modify the simple one-pass compiler in Ch 2
Week 5-6 Mon 2-Oct
Mon 9-Oct
Lexical Analysis
Read and understand ASU Ch. 3
Write code to demonstrate mastery of material
Week 7-9 Mon 16-Oct
Mon 30-Oct
Syntax Analysis
Read and understand ASU Ch. 4
Write code to demonstrate mastery of material
Week 10-13 Mon 6-Nov
Mon 13-Nov
Mon 20-Nov
Mon 27-Nov
Syntax-Directed Translation
Read and understand ASU Ch. 5
Write code to demonstrate mastery of material
Week 14 Mon 4-Dec More Robust Lisp Implementation
Document and eliminate all crashes
Acquire, install, use Franz Allegro CL
Assert
Half of:
  Maintain ongoing, easy-to-read bug list
  I/O:  read/write from console and file
  --> Preliminary debug suite in file
Week 15 Mon 11-Dec More Robust Lisp Implementation (continued)
Change your set to setq
Maintain ongoing, easy-to-read bug list
I/O:  read/write from console and file
  --> Preliminary debug suite in file
Iteration -- While
Progn, Let with implicit Progn
Week 16 Mon 18-Dec More Robust Lisp Implementation (continued)
Add comments to lexer
Expand debug suite with more examples + comments
Implicit Progn in Defun
Ability to redefine defun's
let -> let*
Variable typed values
const int TYPE_INT = 0;
const int TYPE_LIST = 1;
const int TYPE_STRING = 2;

class CValue
{
public:
   int valueType;
   void* pValue;
  /*
   int intValue;
   List* pListValue;
   String* pString;
  */
};

String* pString = (String*) pValue;

Define getType and is* functions (either as below or as defined in Steele):
(setq x 3)
--> 3
(getType x)
--> "Integer"
(isString x)
--> NIL
(isInteger x)
--> TRUE
Strings and Characters (either as below or as defined in Steele):
(setq x "foo")
--> "foo"
(setq y (nth x 1))
--> 'o'
(setq z "bar")
--> "bar"
(setq x (plus x z))
--> "foobar"
; Look at Allegro CL for more string + char stuf
Lists:  NIL, cons, first (car), rest (cdr), nth
setf equivs:  setFirst, setRest, setNth
Garbage collection
(setq x NIL)
NIL
(setq y (cons 3 x))
(3)
(setq z (cons y y))
( (3) 3 )
(car y) ; same as (first y)
3
(car z)
(3)
(cdr y) ; same as (rest y)
NIL
(cdr z)
(3)
The Brass Ring:  Othello, using Alpha-Beta search, in your Lisp

Possible Addenda to Project 1:

Project 2:  Writing a Cross-Compiler and Interpreter for Ct (Chris Thomas's C-Lite)

Project 3:  Write a Lightweight IDE for Ct including Step-Wise Debugging

Project 4:  Introduction to Distributed Programming

Project 5:  Adding Distributed Programming Primitives to Ct

Project 6:  Writing Distributed Applications Using Distributed-Ct


Link to Independent Study Course Home Page.