# Site ## Pages - [Page not found](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/404/): That page doesn't exist, or it has moved since you last looked - [Assessment](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/assessments/): Every piece of graded work in the course, what it is worth, and when it is due. - [Checkpoint 1](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/assessments/checkpoint-1/): Complete a partially-implemented OCaml starter — literals, arithmetic, variables, and string concatenation — matching Movement I's four sessions - [Checkpoint 2](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/assessments/checkpoint-2/): Complete a partially-implemented OCaml starter — the goto field, failure propagation, and DEFINEd functions — matching Movement II's two sessions - [Checkpoint 3](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/assessments/checkpoint-3/): Complete a partially-implemented OCaml starter — pattern values, backtracking match, and capture — matching Movement III's three sessions - [Final project](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/assessments/final-project/): Extend Checkpoint 3's pattern-matching engine along a chosen direction, differentially test it against CSNOBOL4, and write up what it cost - [Lectures](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/): What is covered, week by week, and which topics each lecture draws on. - [Why SNOBOL](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-01/): Bell Labs, 1962 — where SNOBOL came from, why this course builds SNOBOL4 specifically, and why OCaml is the implementation language - [Blanks that mean something](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-02/): SNOBOL4's blank-sensitive lexing and its one statement grammar — why whitespace changes the parse, not just the layout - [Everything is global](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-03/): SNOBOL4's variable model — no lexical scoping, no nested functions, one flat namespace, by design - [Strings without a plus sign](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-04/): Strings as first-class values, and concatenation by juxtaposition — no operator token, adjacency is the operator - [Failure is a value, not an exception](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-05/): The goto field made precise — every statement succeeds or fails, and that signal is SNOBOL4's entire branching mechanism - [DEFINE and the shape of a call](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-06/): User-defined functions, the save/restore discipline behind them, and recursion that needs no special-casing at all - [The cursor, made visible](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-07/): Patterns as first-class values, Griswold's cursor model, and two legitimate ways to implement the backtracking search underneath them - [What a pattern is made of](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-08/): ANY, NOTANY, SPAN, BREAK, LEN, ARB, ARBNO, and BAL — the primitive vocabulary that concatenation and alternation compose - [What backtracking leaves behind](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-09/): Conditional and immediate assignment, the cursor-position operator, and the quickscan/fullscan heuristics that make matching fast in practice - [Eleven kinds of thing](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-10/): 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 - [The error message you'd want](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-11/): 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 - [Where your interpreter's time actually goes](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/lectures/week-12/): 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 - [OCaml crash course](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/ocaml-crash-course/): The handful of OCaml features this course's own interpreter leans on hardest, for anyone who hasn't written OCaml before. - [People](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/people/): Who teaches the course, and how to reach them. - [Idris Fenn](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/people/idris-fenn/): A tutor running the weekly studios where the interpreter actually gets written, and marking the four checkpoints. - [Marisol Quaye](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/people/marisol-quaye/): The founding convenor, responsible for the course's shape and its weekly lecture programme. - [Policies and support](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/policies/): The course-wide rules for late work, extensions, academic integrity and getting help. - [Getting started](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-01/): Toolchain setup, and a skeleton hand-rolled lexer that recognises integer literals — the smallest thing the course can call a running compiler - [Arithmetic expressions](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-02/): Extending week 1's lexer to arithmetic, and parsing it with a small Pratt parser - [Assignment and a symbol table](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-03/): Implementing assignment statements over a single flat symbol table — variables as SNOBOL4 actually has them, not as most languages have them - [Strings, concatenation, and a working evaluator](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-04/): String literals and concatenation by juxtaposition, wiring weeks 1–4 into one evaluator that runs real toy SNOBOL-subset programs - [The goto field](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-05/): Turning Movement I's evaluator into a statement executor — the goto field, failure propagation, and a couple of predicates to branch on - [DEFINE, call frames, and RETURN/FRETURN/NRETURN](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-06/): User-defined functions on top of last week's statement executor — call frames, save/restore, and recursion that needs no special case - [Building the backtracking search](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-07/): Literal, concatenation, and alternation as pattern values, matched against a subject with an explicit backtracking stack — or OCaml's own call stack, your choice - [The primitives, not the search](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-08/): Extending last week's matcher with ANY, NOTANY, SPAN, BREAK, ARB, ARBNO, and BAL — no change to how backtracking itself works - [Getting something back from a match](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-09/): Wiring conditional and immediate assignment, @X, and the enumerate-all-matches idiom into last week's matcher - [The exhaustiveness checker earns its keep](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-10/): Widening the interpreter's value type to cover ARRAY and TABLE, and turning on the compiler warning that catches an unhandled case - [Making CSNOBOL4 disagree with you](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-11/): Attaching source positions to every value your parser produces, and building a small differential-testing harness against CSNOBOL4 - [Finishing, not adding](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/sessions/week-12/): The last studio before the final project is due — cutting scope, proving the extension actually works, and drafting the retrospective - [Setup](https://comp4020-agentic-coding-studio.github.io/comp4020-ass2-yarramoo/setup/): The toolchain this course actually runs on, and how to build and run any week's starter or solution once you have it.