Temos três grupos de módulos: os que compõe o Front-end, os que compõe o Back-end e outro que interage com todos os outros módulos (Manipulador de Erros e Tabela de Símbolos).
No Front-end, estão contidos os módulos de análise e produção (Análise Léxica, Análise Sintática, Análise Semântica e Gerador de Código) das estruturas necessárias para o processo de compilação que são independentes de conhecer a arquitetura de máquina em que o programa-fonte será executado.
O Back-end utiliza as estruturas fornecidas pelo Front-end para gerar programas para determinada arquitetura-alvo (por exemplo, binários para x86 e x86_64).
O Manipulador de Erros e a Tabela de Símbolos podem ser acessadas de todos os módulos do Front-end e do Back-end.
Analisador Léxico
É o módulo responsável por dividir o Programa-Fonte em tokens, ou seja, pequena unidades que possuem significado, como números, identificadores (nomes de variaveis e funções), sequências de caracteres e símbolos de operadores (+, -, *, /). Por ser o responsável por dividir o programa-fonte, é o único módulo que efetua operações de leitura sobre os arquivos de entrada e controla os buffers de forma eficiente, de forma a minimizar o custo de IO no processo de compilação.
Analisador Sintático
Este módulo verifica se a sequência de tokens reconhecido pelo Analisador Léxico é coerente para a Gramática (Linguagem) definida. Caso contrário, os erros encontrados devem ser reportados. Além disso, o Analisador Sintático produz uma Árvore Sintática que representa de forma estruturada a gramática da linguagem e sequência de execução das instruções do programa-fonte.
Analisador Semântico
O Analisador Semântico é o responsável, entre outras coisas, por efetuar a inferência de tipos, garantir que uma variável tenha sido declarada antes de sua utilização, caso a definição da gramática exija isso. Nessa fase da compilação, são feitas anotações na Árvore Sintática para facilitar a execução dos passos posteriores.
Gerador de código
Este é o módulo responsável por utilizar todas as informações coletadas pelos módulos anteriores e gerar o programa-objeto. Usualmente, o gerador de código gera um programa em linguagem assembly para a arquitetura alvo para, posteriormente, ser montada com um assembler da respectiva arquitetura que gerará o programa-executável.
Referência:
http://blog.bbcoimbra.com/2011/09/18/introducao-aos-compiladores.html
Gabarito D
Na compilação, a análise consiste em três fases:
Análise léxica, linear, esquadrinhamento (scanning): o fluxo de caracteres que constitui o programa é lido da esquerda para a direita e agrupado em tokens, que são seqüências de caracteres tendo um significado coletivo.
Análise sintática, hierárquica ou gramatical: os caracteres ou tokens são agrupados hierarquicamente em coleções aninhadas com significado coletivo. Em outras palavras agrupam-se os tokens em frases gramaticais. Estas frases são usadas pelo compilador para sintetizar uma saída. As frases gramaticais são representadas por árvores
Análise semântica: verificações são realizadas para assegurar que componentes de um programa se combinam de forma significativa.
Esta fase verifica erros semânticos no programa fonte e captura informações de tipo para a fase subseqüente de geração de código. Utiliza a estrutura hierárquica determinada pela fase de análise sintática, a fim de identificar os operadores e operandos das expressões e enunciados.
"Retroceder Nunca Render-se Jamais !"
Força e Fé !
Fortuna Audaces Sequitur !