Universidade Estadual da Paraíba - UEPB
Curso de Licenciatura em Computação
Análise Semântica
Disciplina: Compiladores
Equipe: Luiz Carlos dos Anjos Filho
José Ferreira Júnior
Compiladores

Um compilador é um programa que traduz um programa
escrito numa linguagem fonte para outro equivalente escrito
numa linguagem alvo.
2
Compiladores

•
Podemos dividir o processo de compilação em duas fases:
•
Análise : Parte o programa fonte em peças constituintes e cria
uma representação intermediaria do programa fonte.
•
Síntese : Constrói o desejado programa alvo (código de
máquina) a partir da representação intermediária.
O processo de síntese requer técnicas mais especializadas.
Compiladores

Fases do Processo de Compilação
4
Análise Léxica

É o processo de analisar a entrada de linhas de caracteres
(código-fonte de um programa de computador) e produzir
uma seqüência de símbolos chamados "símbolos léxicos"
(lexical tokens), ou somente "símbolos" (tokens).

A Análise Léxica é a forma de verificar determinado alfabeto.
Quando analisamos uma palavra, podemos definir através da
análise léxica se existe ou não algum caracter que não faz
parte do nosso alfabeto
5
Análise Sintática

Reconhece a estrutura global do programa, descrita através
de gramáticas livres de contexto.

A análise sintática transforma um texto de entrada em uma
estrutura de dados, em geral uma árvore, o que é
conveniente para processamento posterior, e captura a
hierarquia implícita desta entrada.
6
Analise Semântica

Embora a análise sintática consiga verificar se uma
expressão obedece às regras de formação de uma dada
gramática, 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.
7
Analise Semântica

O objetivo da análise semântica é trabalhar no nível de interrelacionamento 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;
 atribuição de um literal para outro tipo, como um inteiro em uma string
ou vice-versa;
 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.
8
Analise Semântica

Não é possível representar em uma gramática livre de
contexto uma regra como "Todo identificador deve ser
declarado antes de ser usado", e a verificação de que essa
regra foi aplicada cabe à análise semântica.
9
Analise Semântica - exemplo

Considere o seguinte 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 %
10
Analise Semântica - exemplo

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 caracter '0' é automaticamente convertida
para inteiro para compor corretamente a expressão aritmética
na qual ela toma parte; todo char em uma expressão é
convertido pelo compilador para um int. Esse procedimento
de conversão de tipo é denominado coerção (cast).
11
Analise Semântica - exemplo

Verificação de fluxo de controle
Objetivo: Detectar se comandos que controlam o fluxo da
execução são usados de forma correta.
Exemplos de situações com erros em C++

Uso inadequado do comando break
 Uso inadequado do comando continue
12
Analise Semântica - exemplo

Verificação de unicidade
Objetivo: Detectar se identificadores são únicos dentro de
um mesmo escopo.
Exemplos de situações com erros em C++

Nome de variável duplicado
13
Analise Semântica
14
Fim
15
Download

Analise Semântica