AST generating parser