Bison is an extremely useful and very fast CompilerCompiler. It takes an EBNF grammar, a small snippet of C/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 GoTos. The particular parser type created by Bison is !LALR(1)?.
You should investigate Bison for any non-trivial parsing tasks.
See also RecursiveDescentParser.