Analisador semântico
Sumário
Introdução 1
Verificações Semânticas Usuais 2
Tabela de Símbolos 3
Atributos mais comuns 4
Tratamento ou Recuperação de ERROS 5
Bibliografia 6
Exercicios 7
-------------------------------------------------
Introdução
Até agora a preocupação foi em analisar sintaticamente os programas-fonte de acordo com as suas respectivas gramáticas, considerando que um programa-fonte fosse simplesmente uma sequência de caracteres. Entretanto, para gerar corretamente os códigos objeto de um programa-fonte, um compilador deve ser capaz de reconhecer os tipos de símbolos (por exemplo, se eles são do tipo inteiro, do tipo ponto flutuante ou de um novo tipo construído) e a consistência do seu uso (por exemplo, o operador aritmético modo em Pascal ou o operador /).
Os programas em linguagem de alto nível contém normalmente uma seção de declaração de dados (identificadores) e uma de comandos e expressões propriamente ditos. A consistência do uso de um identificador na seção de comandos depende da sua declaração (explícita ou implícita). Este tipo de dependência só pode ser satisfatoriamente contemplado por uma gramática sensitiva ao contexto. Entretanto, existem poucos resultados práticos que formalizam e processam, de forma satisfatória, as gramáticas sensitivas.
O analisador semântico verifica se estruturas sintáticas pelo analisador sintático, embora corretas sintaticamente, têm significado admissível na linguagem. Por exemplo, A + B pode ser uma expressão sintaticamente correta, mas pode não ter significado em muitas linguagens se A for inteiro e B for caractere.
O compilador executa ainda a análise semântica3. O analisador semântico utiliza a árvore sintática determinada pelo analisador sintático para: identificar operadores e operandos das expressões, reconhecer erros semânticos, fazer verificações de compatibilidade de tipo, analisar o escopo das variáveis, fazer verificações de