Lexer and parser generators: lex, yacc, bison, JavaCC, ANTLR, CUP.
Strongly recommended: read the JFlex and CUP manuals. Several times.
See file:demo.flex.