Skip to main content

What is covered, week by week, and which topics each lecture draws on.

Every lecture the course claims to run gets a dated page and a teaching-team reference. A course decides how many lectures it needs; one of them carries a real deck. related: connects lectures to the sessions and assessments they feed.

Why SNOBOL

Bell Labs, 1962 — where SNOBOL came from, why this course builds SNOBOL4 specifically, and why OCaml is the implementation language

Week 1 · 22 February 2027

Blanks that mean something

SNOBOL4's blank-sensitive lexing and its one statement grammar — why whitespace changes the parse, not just the layout

Week 2 · 1 March 2027

Everything is global

SNOBOL4's variable model — no lexical scoping, no nested functions, one flat namespace, by design

Week 3 · 8 March 2027

Strings without a plus sign

Strings as first-class values, and concatenation by juxtaposition — no operator token, adjacency is the operator

Week 4 · 15 March 2027

Failure is a value, not an exception

The goto field made precise — every statement succeeds or fails, and that signal is SNOBOL4's entire branching mechanism

Week 5 · 22 March 2027

DEFINE and the shape of a call

User-defined functions, the save/restore discipline behind them, and recursion that needs no special-casing at all

Week 6 · 29 March 2027

The cursor, made visible

Patterns as first-class values, Griswold's cursor model, and two legitimate ways to implement the backtracking search underneath them

Week 7 · 5 April 2027

What a pattern is made of

ANY, NOTANY, SPAN, BREAK, LEN, ARB, ARBNO, and BAL — the primitive vocabulary that concatenation and alternation compose

Week 8 · 12 April 2027

What backtracking leaves behind

Conditional and immediate assignment, the cursor-position operator, and the quickscan/fullscan heuristics that make matching fast in practice

Week 9 · 19 April 2027

Eleven kinds of thing

Tagged values and the eleven built-in types DATATYPE names, CONVERT as explicit coercion, and ARRAY/TABLE/DATA as functions that return data rather than syntax that declares it

Week 10 · 26 April 2027

The error message you'd want

What a diagnostic actually needs to say, why LR and recursive-descent parsers recover from a syntax error differently, and what CSNOBOL4 can and can't tell you about either

Week 11 · 3 May 2027

Where your interpreter's time actually goes

Real 1981 profiling data from the Arizona SIL implementation, what it says about where a SNOBOL4 interpreter's time goes, and the final project's menu of extensions

Week 12 · 10 May 2027