Category of tooling (e.g. Yacc-style generators) that, given a grammar for a language, produces a lexer and parser emitting tokens and an AST or other internal representation. Halasz's practical recommendation: nobody writes compilers from scratch; use these generators together with existing virtual machines.