EBNF parser and generic parser generator