But that's not what's happening in the article -- he is showing a simple REPL and fork() exec(), which is about as much as you can expect to do in an article that long. lsh_split_line() in no way resembles a real shell lexer, and there is no parser, since there are no programming language features like function calls, loops, and conditionals. Not to mention pipelines, subshells, and redirects.
I think you're overestimating the power of flex, bison, and ANTLR. I actually ported the POSIX shell grammar to ANTLR -- it's not usable as the basis for a shell parser. The POSIX grammar also only covers 1 of 4 sublanguages in shell, and it's a significantly smaller language than bash.
Bash uses bison/yacc, and maintainer Chet Ramey talks about how it was a mistake here:
http://www.aosabook.org/en/bash.html
My blog is basically about parsing bash, and I discovered a lot of interesting things:
http://www.oilshell.org/blog/2016/10/20.html