[WIP] generate an AST, then codegen from that