Bison is an extremely useful and very fast CompilerCompiler. It takes an EBNF grammar, a small snippet of C code for each rule, and a source of tokens and generates a table based parser. The grammar may not contain right recursive rules. The parser generated is usually paired with a lexer generated by Flex. The generated parser is a FiniteStateMachine---a big function with lots of Goto?s.
You should investigate Bison's use for any non-trivial parsing tasks.
See also RecursiveDescentParser
5 pages link to Bison: