implement prlimilary compiler