C BNF parser