Computação |
A partir da análise sintática, o compilador obtém uma estrutura em forma de árvore, refletindo a organização hierárquica do código-fonte.
No entanto, compreender a estrutura não é suficiente: é necessário atribuir significados às construções reconhecidas.
A tradução dirigida por sintaxe cumpre esse papel, permitindo que ações semânticas sejam executadas durante a análise da gramática.
Essas ações são responsáveis por construir representações intermediárias, validar regras da linguagem e até iniciar a geração de código.
A tradução é conduzida a partir de atributos ligados aos símbolos da gramática.
Tais atributos podem ser sintetizados, quando calculados a partir dos filhos de um nó na árvore, ou herdados, quando passam informações do pai para os filhos.
A cada regra gramatical pode ser associada uma ação semântica que define como os atributos devem ser computados. Por exemplo, em uma regra que define uma soma entre duas expressões, os atributos das expressões filhas são usados para determinar o valor ou tipo da expressão resultante.
Assim, já nesse estágio o compilador pode tanto gerar uma árvore de tradução como também verificar se os tipos são compatíveis para a operação.
É nesse mesmo contexto que entra a checagem de tipos, uma das ações mais importantes realizadas pelo compilador durante essa fase.
O sistema de tipos de uma linguagem define quais operações são válidas entre quais tipos de dados, e cabe ao compilador garantir que essas regras sejam respeitadas.
Em linguagens com tipagem estática, essa verificação ocorre em tempo de compilação.
Por exemplo, tentar somar um número com uma string em C ou Java causaria um erro, pois os tipos são incompatíveis.