A compiler's main purpose is to translate source code (code that we write in Java, C++ etc) into machine readable code. Think of it like a machine which takes our document of code and translates it into 0's and 1's, i.e. a translator/mediator between us and the machine. Its secondary purpose, is to spot syntactical errors in our code or some possible runtime errors which might occur later and warn us about them. The process of translating source code into machine readable code and spotting such errors is known as compiling.