pretty complete compiler