Estrutura de um Compilador

No processamento de uma linguagem a análise semântica deve, sempre que possível, garantir que o programa faz sentido.

Erros semânticos comuns:

  • Variável/função não definida.

  • Tipos incompatíveis (ex. atribuir um número real a uma variável inteira).

  • Definir instrução num contexto errado (ex. utilizar em Java a instrução break fora de um ciclo switch).

  • Aplicação sem sentido de instrução (ex. importar um pacote inexistente).

Em alguns casos, estes erros podem ser avaliados ainda durante a análise sintática, em outros casos só é possível fazer essa verificação após uma análise sintática bem sucedida, fazendo uso da informação retirada dessa análise.

Avaliação dirigida pela sintaxe

No processamento de linguagens, a avaliação semântica pode ser feita associando informação e acções às regras sintácticas da gramática (i.e. aos nós da árvore sintáctica).

Este procedimento designa-se por avaliação dirigida pela sintaxe.

Por exemplo, numa gramática para expressões aritméticas podemos associar aos nós da árvore uma variável com o tipo da expressão, e acções que permitam verificar a sua correcção (e não permitir, por exemplo, que se tente somar um booleano com um inteiro).

Em ANTLR4, a associação de atributos e acções à árvore sintáctica, pode ser feita durante a própria análise sintáctica, e/ou posteriormente recorrendo a visitors e/ou listeners.

Deteção estática ou dinâmica

A variação de cada propriedade semântica de uma linguagem pode ser feita em dois tempos distintos:

  • Tempo dinâmico: durante o tempo de execução.

  • Tempo estático: durante o tempo de compilação.

Só os compiladores fazem verificações estáticas de propriedades semânticas.

Em interpretadores as fases de análise e síntese da linguagem são ambas feitas em tempo de execução, pelo que as verificações são sempre dinâmicas.

A verificação estática tem a vantagem de garantir, em tempo de execução, que certos erros nunca vão ocorrer (dispensando a necessidade de proceder à sua depuração e teste).

Last updated