seperate the front end —— compiler from the back end —— interpreter