Time flies like an arrow; Fruit flies like a banana: Parsers for Great Good
summary
Examines how code gets tokenized and parsed, showing a Ruby lexer/tokenizer and hand‑written expression parser that handles parentheses and operator precedence, and explaining how a parser.rb generated from parser.y (via racc or bison) differs from ad‑hoc regexes. Demonstrates recursive descent vs shift‑reduce parsing, explains why many inputs (URLs, lockfiles) are not regex‑parsable, shows RubyGems using a lexer+parser while Bundler uses fragile regexes, and argues parsers give faster, more reliable results (routing becomes logarithmic).
AI-written summary · about
chapters (22)
- 0:00Intro
- 0:53My name
- 1:31How I found parsers
- 3:38Lets play a game
- 6:12Garden path sentences
- 8:00Grammar rules
- 8:48BNF notation
- 10:13Production rules
- 11:50Tokenizing
- 13:40More complicated rules
- 14:23Topdown parser
- 17:34Recursion parser
- 18:32Shift reduce parser
- 22:10Parser generators
- 23:18Parser tables
- 23:43Parser in action
- 24:21When to use a parser
- 25:25The savage hierarchy
- 26:54A B language
- 28:02Grammar
- 29:24Lockfile
- 30:36Conclusion
related talks
31mTime flies like an arrow, fruit flies like a banana
31mTime flies like an arrow; Fruit flies like a banana: Parsers for Great Good
32mParsing Ruby
43mGrammars, Parsers, and Interpreters, In Ruby
38mParsing Expressions in Ruby
46mGrammar a BNF like Ruby DSL Parsing
26mLiberating Ruby's Parser from Lexer Hacks
52mA bird's eye view of a parser
