Um compilador é um programa especial que processa instruções escritas em uma determinada linguagem de programação e as transforma em linguagem de máquina ou o “código” que o processador de um computador usa. Tipicamente, um programador escreve declarações de linguagem em uma linguagem como Pascal ou C uma linha de cada vez usando um editor. O arquivo que é criado contém o que são chamados de declarações de origem. O programador então executa o compilador de linguagem apropriado, especificando o nome do arquivo que contém as declarações de origem.
ao executar( em execução), o compilador analisa (ou analisa) todas as declarações da linguagem sintaticamente uma após a outra e então, em uma ou mais etapas sucessivas ou “passes”, constrói o código de saída, certificando-se de que as declarações que se referem a outras declarações são referidas corretamente no código final. Tradicionalmente, a saída da compilação tem sido chamada de código objeto ou às vezes um módulo objeto . (Note that the term “object” here is not related to object-oriented programming.) O código objeto é o código de máquina que o processador pode executar uma instrução de cada vez.
A linguagem de programação Java, uma linguagem utilizada na programação orientada a objeto, introduziu a possibilidade de compilar saída (chamado de bytecode ) que pode ser executado em qualquer sistema de computador da plataforma para o qual uma máquina virtual Java ou interpretador de bytecode é fornecido para converter o bytecode em instruções que podem ser executadas pelo hardware real do processador. Usando esta máquina virtual, o bytecode pode opcionalmente ser recompilado na plataforma de execução por um compilador just-in-time. (Ver: Compilador Java)
tradicionalmente em alguns sistemas operacionais, uma etapa adicional foi necessária após a compilação – a de resolver a localização relativa de instruções e dados quando mais de um módulo objeto deveria ser executado ao mesmo tempo e eles se referiam às sequências de instruções ou dados de cada um. Este processo foi às vezes chamado de edição de ligação e o resultado conhecido como um módulo de carga.
um compilador trabalha com o que às vezes são chamados de 3GL e línguas de nível superior. Um montador trabalha em programas escritos usando a linguagem de montagem de um processador.