Skip to main content

Studios

The twelve-week teaching schedule: what happens in each studio, what to prepare, and what leaves the room.

The internal collection and URL stay sessions. Set the visible singular and plural names once in src/site-config.ts and use the language your course deserves everywhere readers see it.

Getting started

Toolchain setup, and a skeleton hand-rolled lexer that recognises integer literals — the smallest thing the course can call a running compiler

Week 1 · 22 February 2027

Arithmetic expressions

Extending week 1's lexer to arithmetic, and parsing it with a small Pratt parser

Week 2 · 1 March 2027

Assignment and a symbol table

Implementing assignment statements over a single flat symbol table — variables as SNOBOL4 actually has them, not as most languages have them

Week 3 · 8 March 2027

Strings, concatenation, and a working evaluator

String literals and concatenation by juxtaposition, wiring weeks 1–4 into one evaluator that runs real toy SNOBOL-subset programs

Week 4 · 15 March 2027

The goto field

Turning Movement I's evaluator into a statement executor — the goto field, failure propagation, and a couple of predicates to branch on

Week 5 · 22 March 2027

DEFINE, call frames, and RETURN/FRETURN/NRETURN

User-defined functions on top of last week's statement executor — call frames, save/restore, and recursion that needs no special case

Week 6 · 29 March 2027

Building the backtracking search

Literal, concatenation, and alternation as pattern values, matched against a subject with an explicit backtracking stack — or OCaml's own call stack, your choice

Week 7 · 5 April 2027

The primitives, not the search

Extending last week's matcher with ANY, NOTANY, SPAN, BREAK, ARB, ARBNO, and BAL — no change to how backtracking itself works

Week 8 · 12 April 2027

Getting something back from a match

Wiring conditional and immediate assignment, @X, and the enumerate-all-matches idiom into last week's matcher

Week 9 · 19 April 2027

The exhaustiveness checker earns its keep

Widening the interpreter's value type to cover ARRAY and TABLE, and turning on the compiler warning that catches an unhandled case

Week 10 · 26 April 2027

Making CSNOBOL4 disagree with you

Attaching source positions to every value your parser produces, and building a small differential-testing harness against CSNOBOL4

Week 11 · 3 May 2027

Finishing, not adding

The last studio before the final project is due — cutting scope, proving the extension actually works, and drafting the retrospective

Week 12 · 10 May 2027