Part of the course is understanding exactly when Regexps are good enough and when you need something more powerful.
Just would like to add a link: https://craftinginterpreters.com/contents.html
It explains parsing and other topics in a really clear and accessible way.
I had to write an interpreter, optimizer and engine for a declarative language plus bottom up knowledge base in Haskell as part of an assignment, and an exam in a graduate course on advanced programming. Haskell made the problem significantly easier compared to languages I am much more comfortable with, like Python or C.
[1] www.cs.nott.ac.uk/~pszgmh/pearl.pdf
[2] https://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/...
[3] https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA