Compilador
A análise léxica (ou scanner) é a primeira etapa do processo de compilação e sua função é varrer o código‑fonte, caractere por caractere, compondo os elementos que de fato formam o programa e que são chamados de tokens ou lexemas. Adicionalmente, elementos tais como espaços em branco, tabulações, marcas de formatação de texto, comentários ou quaisquer outros que sejam irrelevantes ao processo de compilação são eliminados. Desse modo, dizemos que o analisador léxico é responsável por transformar o fluxo de caracteres em um fluxo de tokens.
Garantida a produção de uma sequência coerente de lexemas, precisamos ainda verificar a adequação da estrutura gramatical do programa. A próxima subfase é a análise sintática, em que se busca determinar se uma sequência de símbolos léxicos (cadeia) pode ser gerada pela gramática que define a linguagem em questão. Essa tarefa consiste em construir a árvore de derivação correspondente.
Resta ainda verificar o significado ou a semântica do programa, tarefa executada pela última etapa da análise, a chamada análise semântica. É de sua responsabilidade verificar certos aspectos que não foram investigados anteriormente por impossibilidade ou inadequação de propósito, tais como questões relativas a escopo, regras de visibilidade e compatibilidade entre tipos.
Uma vez garantido que o código‑fonte é válido e coerente, pode‑se passar ao processo de síntese. É durante a geração de código que efetivamente ocorre a produção do código equivalente ao programa original. Dado o nível de dificuldade inerente à diferença entre os níveis de abstração, uma primeira tentativa pode ser realizada e seu produto passa por uma fase de otimização, cujo objetivo é melhorar o código gerado e eliminar redundâncias, aumentando o