parse and compile