Estrutura de um Compilador

Tal como na linguagem natural, as linguagens high-level, a sua compilação envolve mais que uma linguagem:

  • Análise léxica:

    • Composição de letras e outros caracteres em palavras.

  • Análise sintáctica:

    • Composição destas palavras em estruturas sintácticas adequadas.

  • Análise semântica:

    • Verificação se a estrutura sintáctica tem significado.

Análise lexical

Conversão da sequência de caracteres em sequência de elementos lexicais.

Cada elemento lexical pode ser definido por um tuplo, com uma identificação do elemento e do seu valor.

Exemplo:

  • pos = pos + vel + 5;

  • <id,pos> <=> <id,pos> <+> <id, vel> <+> <int, 5> <;>

Os espaços brancos são eliminados pelo analisador lexical.

Análise Sintáctica

Chamada também de parsing.

Onde se verifica a conformidade da sequência de elementos lexicais com a estrutura sintática da linguagem.

Podemos fazer uma aproximação à sua estrutura formal através duma representação tipo árvore. Para isso, é necessário que se especifique um estrutura desejada, baseada numa gramática.

Duas características das árvores sintácticas:

  1. Não incluem alguns elementos lexicais.

  2. Definem sem ambiguidade a ordem das operações.

Análise Semântica

Parte final do front end do compilador.

São verificadas restrições que não o foram nas duas fases anteriores. Exemplo:

  • verificar se um identificador foi declarado,

  • verificar a conformidade no sistema de tipos da linguagem.

Note-se que apenas restrições com verificação estática, podem ser objecto de análise.

Utiliza a árvore sintáctica da análise sintáctica assim como uma estrutura de dados designada por tabela de símbolos (assente em arrays associativos).

Esta última fase de análise deve garantir o sucesso das fases subsequentes.

Síntese

Havendo garantia de que o código da linguagem fonte é válido, então podemos passar aos efeitos pretendidos com esse código.

Podem ser:

  1. simplesmente a indicação de validade do código fonte;

  2. a tradução do código fonte numa linguagem destino;

  3. ou a interpretação e execução imediata.

Pode haver interesse na identificação e localização precisa de eventuais erros.

É usual indicar não só a instrução mas também a linha onde cada erro ocorre.

Last updated