Análise semântica

Origem: Wikipédia, a enciclopédia livre.
 Nota: Para outros significados de Semântica, veja Semântica (desambiguação).

Análise semântica é um processo de um compilador (de uma linguagem de programação) na qual são verificados os erros semânticos (por exemplo, divisão de um número inteiro por outro número real (float) no padrão ANSI) no código fonte e coletadas as informações necessárias para a próxima fase da compilação, que é a geração de código objeto.

A análise semântica trata a entrada sintática e transforma-a numa representação mais simples e mais adaptada a geração de código. Esta camada do compilador fica igualmente encarregada de analisar a utilização dos identificadores e de ligar cada uma delas a sua declaração. Nesta situação verificar-se se o programa respeita as regras de visibilidade e de porte dos identificadores. Além disso, é também esperado que no processo da compilação verifique se cada expressão definida tem um tipo adequado conforme as regras próprias da linguagem.

O objetivo da análise semântica é trabalhar nesse nível de inter-relacionamento entre partes distintas do programa. As tarefas básicas desempenhadas durante a análise semântica incluem a verificação de tipos, a verificação do fluxo de controle e a verificação da unicidade da declaração de variáveis. Dependendo da linguagem de programação, outros tipos de verificações podem ser necessários.

Etapas da análise[editar | editar código-fonte]

A análise semântica engloba duas tarefas principais: análise de contexto com geração de código e, verificação de erros em frases sintaticamente corretas.

A saída da fase de análise semântica é anotada na árvore do analisador gramatical. As gramáticas de atributo são usadas para descrever a semântica de estática de um programa.

A fase de geração de código intermediário permite a geração de instruções para uma máquina abstrata, normalmente em código de três endereços, mais adequadas à fase de otimização. Esta forma intermediária não é executada diretamente pela máquina alvo.

A fase de otimização analisa o código no formato intermediário e tenta melhorá-lo de tal forma que venha a resultar um código de máquina mais rápido em tempo de execução, usando as réguas que denotam a semântica da linguagem-fonte. Uma das tarefas executadas pelo otimizador é a detecção e a eliminação de movimento de dados redundantes e a repetição de operações dentro de um mesmo bloco de programa.

E por fim, a fase de geração de código tem como objetivo analisar o código já otimizado e gerar um código objeto definitivo para uma máquina alvo. Normalmente este código objeto é um código de máquina relocável ou um código de montagem. Nesta etapa as localizações de memória são selecionadas para cada uma das variáveis usadas pelo programa. Então, as instruções intermediárias são, cada uma, traduzidas numa seqüência de instruções de máquina que realizam a mesma tarefa.

Exemplos típicos de erros semânticos são: uma variável não declarada; uma multiplicação entre tipos de dados diferentes, e; atribuição de um literal para outro tipo, como um inteiro em um texto (string) ou vice-versa.

Ver também[editar | editar código-fonte]

Ligações externas[editar | editar código-fonte]

Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.