Análise semântica: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Linha 2:
 
'''Análise semântica''' é a terceira fase da [[compiladores|compilação]] onde se verificam os erros semânticos, (por exemplo, fazer a divisão de um número inteiro por outro numero float, na linguagem C padrão ANSI)) no [[código fonte]] e coletam-se as informações necessárias para a próxima fase da compilação, que é a [[Gerador de código|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 que o programa respeita as regras de visibilidade
e de porte dos identificadores. Nesta fase é também esperado que no processo da compilação verifique que cada expressão definida tenha 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 desempenhada 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 SEMÂNTICA'''
 
A análise semântica engloba duas tarefas principais:
 
A Análise de contexto e a Geração de código.
Verificação de erros em frases que estão sintaticamente corretos.
 
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 é a gerar o 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
Atribuição de um literal para outro tipo, como um inteiro em uma string ou vice-versa.
 
 
== {{Ver também}} ==