Following the first lecture of "Building a Parser from scratch" By Dmitry Soshnikov. Lecture 1: Phases: Data - Text Content Processor - Tokenizer Data - Tokens Processor - Parser Data - AST Example of syntaxes : S-Expression : (class Point (begin (def constructor (self x y) (begin (set (prop self x) x) (set (prop self y) y) ) ) (def calc (self) (+ (prop self x) (prop self y) ) ) ) ) (var p (new Point 10 20)) ((prop p calc) p) User Syntax : class Point { def constructor( x, y ) { this.x = x; this.y = y; } def calc() { return this.x + this.y; } } let p = new Point(10, 20); p.calc(); Tokenizer - Lexial Analysis : Uses Regular Expressions (Optimal) Parser - Syntactic Analysis : Uses Backus-Naur Form Backus-Naur Example : Program : StatementList ; StatementList : BlockStatement | IfStatement | FunctionDeclaration ... ; FunctionDeclaration : def Identifier ( Arguments ) BlockStatement ; Hand-written parsers : Use recursive descent. Automatically generated All kinds of stuff...