CSCI 485 Metaprogramming Spring 2018: lecture and lab topics

Sample solutions are available for assignment 1, assign2, assign3, and assign4
Bonus assignment
I have added a bonus assignment for the course, which can be used in place of any of the other five assignments. The bonus assignment is due just after the study break (5pm Tuesday March 6th).
The assignment involves adding a number of new features to our implementation of the IttyBitty language, with all the resulting changes to the tokenizer, checker, parser, and translator.
Details are in the readme in the git repository, which has now been posted.

The course labs will be used to conduct practical/applied experiments and exercises in metaprogramming with a variety of languages. These exercises are intended to assist you in the understanding and complete the five assignments (discussed below).

There are five assignments, each worth 6% of your total grade.

Assignments will be distributed and collected via the standard csci git processes, details are provided in the labs themselves. No other form of assignment submission will be accepted for grading.

Assignments are to be completed as strictly individual efforts: collaborative work is not permitted.

Late Penalties:

Week Wed. Lecture Fri. Lecture Labs
Week 1:
Jan 10-12
Course introduction, overview Assemblers, program meta data No lab
Week 2:
Jan 17-19
Compilers and interpretters Generative programming in Ruby (I) Lab 1: intro to generative programming in Ruby
Assignment 1: due Jan. 30th @5pm
Week 3:
Jan 24-26
Tokenizing and parsing techniques and examples in ruby
Week 4:
Jan 31-F2
Code translation techniques and examples in ruby, lex, and yacc Preprocessors and C macros Lab 2: the C preprocessor
Assignment 2: due Feb 13th @5pm
Week 5:
Feb 7- 9
Templates and use in metaprogramming (C++)
Week 6:
Feb 14-16
Generative programming in Ruby: writing a ruby preprocessor Lab 3: templates in C++
Assignment 3: due Mar 6th @5pm
Week 7:
Feb 21-23
Midterm Closure, reflection, self-aware programs
Study break: Feb 24-Mar 4
Week 8:
Mar. 7- 9
Higher order functions (in lisp) Closures (in lisp) Lab 4: closures in lisp,
Macros in lisp,
Self modifying code in lisp

Assignment 4: due Mar 27th @5pm

Week 9:
Mar 14-16
Macros in lisp cont. Self-modifying code
Week 10:
Mar 21-23
Self modifying code in lisp and Ruby
Week 11:
Mar 28-30
Self modifying Ruby University closed (Easter Friday)
Week 12:
Apr 4- 6
Course wrap-up/review Project presentations Lab 5: adv. metaprogramming in ruby
Assignment 5: due Apr 16th @5pm
Week 13:
Apr 11-13
Project presentations