Compiladores
• A análise sintática consegue verificar se uma expressão obedece às regras de formação de uma dada gramática.
• No entanto, seria muito difícil expressar através de gramáticas algumas regras usuais em linguagem de programação, como “todas as variáveis devem ser declaradas” e situações onde o contexto em que ocorre a expressão ou o tipo da variável deve ser verificado.
Análise Semântica
• O objetivo da análise semântica é trabalhar no 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
– Verificação da unicidade da declaração de variáveis Análise Semântica
• Dependendo da linguagem de programação, outros tipos de verificações podem ser necessários.
• Exemplo de código em C: int f1(int a, float b) { return a%b;
}
• A tentativa de compilar esse código irá gerar um erro detectado pelo analisador semântico, mais especificamente pelas regras de verificação de tipos, indicando que o operador módulo % não pode ter um operador real.
• No compilador gcc, essa mensagem é
– In function `f1': ...: invalid operands to binary %
Análise Semântica
• Em alguns casos, o compilador realiza a conversão automática de um tipo para outro que seja adequado à aplicação do operador.
• Por exemplo, na expressão em C
– a = x - '0';
• A constante do tipo caractere '0' é automaticamente convertida para inteiro para compor corretamente a expressão aritmética na qual ela toma parte
• Todo char (caractere) em uma expressão é convertido pelo compilador para um int.
• Esse procedimento de conversão de tipo é denominado coerção (cast).
Análise Semântica
• Em C, a sequencia de regras determina a realização automática de coerção em expressões aritméticas:
1. char e short são convertidos para int, float para double;
2. se um dos operandos é double, o outro é convertido