1) Обычно сначала применяют лексер, затем парсер.
2) Вы должны создать грамматику в виде дерева.
3) Есть хорошие примеры в функциональном программировании (Haskell, F#).
Книги надо, скорее всего, гуглить, я видел такие:
а) 1972-73. The theory of parsing, translation, and compiling (2 тома), Aho, Ullman.
б) 1988. Parsing theory. Sippu, Soisalon-Soininen
в) 2008. Parsing techniques. Grune, Jacobs.