Prévia do material em texto
1. Analisador Semântico É a terceira fase da etapa de compilação, é necessária para validar uma série de regras que não podem ser identificadas nas etapas anteriores, ou seja, é responsável por identificar erros com o significado das das instruções. O objetivo da análise semântica é, assim, criar, a partir de um texto-fonte, uma interpretação expressa em alguma notação adequada - geralmente uma linguagem intermediária do compilador. Para fazer a análise, utilizamos a tabela de símbolos e a árvore sintática. São as tarefas básicas do analisador semântico: ● verificação de tipos; ● verificação do fluxo de controle; ● verificação da unicidade da declaração de variáveis. 2. Analisador de contexto É a parte do analisador semântico que verifica o escopo das variáveis, procedimentos entre outros, por exemplo: ● Quando variável já está declarada e você tenta redeclara-la; ● Quando um tipo associado a uma variável não estiver de acordo; ● Quando se tenta acessar uma variável fora do seu escopo 3. Erro semântico Erros de semântica são erros com o significado do código, são códigos tecnicamente corretos em sintaxe. Já que os compiladores sempre apontam os erros, erros de semântica podem ser encontrados e diagnosticados, na maioria das vezes, sem muita dor de cabeça. Erros semânticos têm origem de regras dependentes da linguagem de programação. Os principais erros semânticos são listados abaixo: 3.1. Escopo dos identificadores O compilador deve garantir que variáveis e funções estejam declaradas em locais que podem ser acessados onde esses identificadores estão sendo utilizados. https://pt.wikipedia.org/wiki/compilador 3.2. Compatibilidade de tipos Verificar se os tipos de dados declarados nas variáveis e funções estão sendo utilizados e atribuídos corretamente. Pode ser verificado em tempo de compilação (checagem estática), ou em tempo de execução (checagem dinâmica). 3.3. Detectar unicidade de nomes dos identificadores Detecta situações tais como duplicação em declarações de variáveis, de componentes de estruturas e em rótulos do programa, isso implica em: ● diferentes identificadores podem ter o mesmo nome; ● o mesmo identificadores pode estar em um escopo diferente; ● sobrecarga de métodos deve gerar novas entradas na tabela de símbolos 3.4. Detectar o uso correto de comandos de controle de fluxo Comandos como continue e break executam saltos na execução de códigos, esse comandos devem ser utilizados em instruções que permitem os saltos. 4. Aviso de possíveis erro (warnings) Warnings são erros menos graves ou simplesmente a suspeita de erros, é tarefa do analisador semântico identificar esses erros. Exemplos de warnings no nosso compilador são: ● Quando declara uma variável mas não inicializa a mesma; ● Variáveis declaradas, inicializadas e não utilizadas; ● Expressões condicionais onde o resultado pode ser determinado pelo compilador como sendo true ou false, e usadas em estruturas de laço ou condicionais; ● Declaração de variáveis onde o uso ocorre somente dentro de uma estrutura condicional como if ou while; ● Inicialização de variáveis dentro de uma estrutura condicional ou repetição.