Possibly a difficult grammar is the grammar of OCaml value definition... structure_item: LET rec_flag let_bindings ; rec_flag: /* empty */ | REC ; val_ident: LIDENT | LPAREN operator RPAREN ; let_bindings: let_binding | let_bindings AND let_binding ; let_binding: val_ident fun_binding | pattern EQUAL seq_expr ; fun_binding: strict_binding | type_constraint EQUAL seq_expr ; strict_binding: EQUAL seq_expr | labeled_simple_pattern fun_binding ; Indeed there are some "unknown" items, but the difficult part here is trying to parse the function declaration with variable number of parameters, using no (slow) recursion. Hm... maybe, I don't know, I found this both hard to think of and hard to understand. - Tom