Paradigmas de Programação
Curso de Análise e Desenvolvimento de Sistemas
Turma: 309-5 Semestre - 2014.2
FACULDADE LEÃO SAMPAIO
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 1
PARADIGMAS DE PROGRAMAÇÃO
CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS
Analisador semântico
Análise Semântica
Analisador Léxico Analisador
Sintático Analisador Semântico Gerador de Código
Intermediário Otimização de
Código Gerador de Código
Scanner do código-fonte em tokens.
Agrupamento dos tokens (símbolos) do programa em uma arvore gramatical
Identifica operandos e operadores. Verifica se cada
operador recebe os operandos dos tipos que são permitidos .
Gera um código mais fácil de ser traduzido.
Melhora o código intermediário para gerar um código de maquina mais rápido.
Instruções de máquinas são traduzidas em uma sequência de instruções de máquina.
(Front-end)(Back-end)
Análise Semântica
Analisador Léxico Analisador
Sintático Analisador Semântico Gerador de Código
Intermediário Otimização de
Código Gerador de Código Código Fonte
Código Alvo Tabela de
Símbolos
Análise Semântica
•
O analisador Semântico utiliza a árvore sintática para:
• Operandos e operadores das expressões
• Reconhecer erros semânticos
• Fazer verificação de compatibilidade de tipos
• Analisar o escopo das variáveis
• Fazer verificações de correspondência entre parâmetros atuais e formais.
Análise Semântica
•
Exemplo:
• Para o comando de atribuição SOMA := SOMA + 35; é necessário fazer a seguinte análise:
• O identificador SOMA foi declarado? Caso negativo, erro semântico.
• O identificador SOMA é uma variável? Caso negativo, erro semântico.
• Qual o escopo da declaração da variável SOMA? Local ou Global?
• Qual o tipo da variável SOMA? O valor atribuído do lado direito do comando de atribuição é compatível?
Análise Semântica
•
A Semântica trata os aspectos sensíveis ao contexto da linguagem de programação.
• Exemplo: NÃO é possível representar em uma gramatica livre de contexto uma regra como “Todo identificados deve ser declarado antes de ser usado”, essa verificação cabe ao analisador semântico.
• Entretanto, uma gramatica livre de contexto pode ser usada como guia na tradução de programas
• Técnica denominada: Tradução Dirigida pela Sintaxe
Análise Semântica
•
Função: verificação do uso adequado
• Análise contextual: declarações prévias de variáveis, procedimentos, etc.
• Checagem de tipos
• Coisas que vão além do domínio da sintaxe
• Sensitividade ao contexto!
•
Tipos de análise semântica
• Estática, em tempo de compilação: linguagens tipadas, que exigem declarações
• C, Pascal, etc.
• Dinâmica, em tempo de execução: linguagens em que as variáveis são determinadas pelo contexto de uso
• LISP, PROLOG
Análise Semântica
•
Devido às variações de especificação semântica das linguagens de programação, a análise semântica
• Não é tão bem formalizada
• Não existe um método ou modelo padrão de representação do conhecimento
• Não existe um mapeamento claro da representação para o algoritmo correspondente
•
Análise é artesanal, dependente da linguagem de programação
Análise Semântica
• Semântica dirigida pela sintaxe
•
Conteúdo semântico fortemente relacionado à sintaxe do programa
•
Maioria das linguagens de programação modernas
• Em geral, a semântica de uma linguagem de programação não é especificada
•
O projetista do compilador tem que analisar e extrair a
semântica
Análise Semântica
• Formalização e implementação
•
Assim como a sintaxe, a semântica precisa ser formalizada/descrita antes de ser implementada
• Sintaxe: por exemplo, BNFprocedimentos recursivos
Como?
•
Gramática de atributos é o formalismo de descrição da semântica comumente utilizado
Análise Semântica
•
Gramática de atributos
•
Método usualmente utilizado
•
Conjunto de atributos e regras semânticas para uma gramática
• Cada regra sintática/gramatical pode ter regras semânticas associadas
•
Atributos associados aos símbolos gramaticais (seja terminais ou não-terminais)
• Por exemplo considere x um símbolos gramatical, onde os atributos valor e escopo serão associados a ele.
•
x.valor, x.escopo
•
Regras semânticas que manipulam os atributos
• Por exemplo, regra para somar os atributos valores de duas variáveis
•
x:=a+b, cuja regra é x.valor:=a.valor+b.valor
Análise Semântica
• Gramática de atributos
• Atributos podem ser fixados durante a compilação ou a execução de um programa
•
A associação de um valor a um atributo é chamada
“amarração” (ou vinculação) do atributo
•
Acontece em “tempo de amarração”
•
Em tempo de compilação, tem-se a amarração estática
•
Em tempo de execução, tem-se a amarração dinâmica
Gramática de atributos
•
Exemplo:
exp exp + termo | exp - termo | termo
termo termo * fator | termo div fator | fator
fator ( exp ) | num
Gramática de atributos
•
Exemplo:
De uma gramática de atributos para a gramática abaixo
númeronúmero dígito | dígitodígito0|1|2|3|4|5|6|7|8|9
Gramática de atributos
•
Exemplo:
De uma gramática de atributos para a gramática abaixo
númeronúmero dígito | dígitodígito0|1|2|3|4|5|6|7|8|9
Gramática de atributos
•
Exemplo: Árvore sintática com visualização da computação de atributos, para o valor 345
númeronúmero dígito | dígito dígito0|1|2|3|4|5|6|7|8|9
BNF
Gramática de atributos
•
Exemplo: Árvore sintática com visualização da computação de atributos, para o valor 345
númeronúmero dígito | dígito dígito0|1|2|3|4|5|6|7|8|9
BNF
• númeronúmero dígito
• número dígito
• número dígito dígito
• dígito dígito dígito
• 3 dígito dígito
Gramática de atributos
•
Exemplo: Árvore sintática com visualização da computação de atributos, para o valor 345
númeronúmero dígito | dígito dígito0|1|2|3|4|5|6|7|8|9
BNF
• númeronúmero dígito
• número dígito
• número dígito dígito
• dígito dígito dígito
• 3 dígito dígito
• 3 4 dígito
• 3 4 5
Árvore
Gramática de atributos
•
Exemplo: Árvore sintática com visualização da computação de atributos, para o valor 345
númeronúmero dígito | dígito dígito0|1|2|3|4|5|6|7|8|9
BNF
• númeronúmero dígito
• número dígito
• número dígito dígito
• dígito dígito dígito
• 3 dígito dígito
• 3 4 dígito
• 3 4 5
Árvore
Gramática de atributos
•
Exemplo: Árvore sintática com visualização da computação de atributos
•
Ex.: 345
número
número dígito
número dígito 5
dígito 4
3
Árvore
Gramática de atributos
Gramática de atributos
• Exemplo: Árvore sintática com visualização da computação de atributos
• Ex.: 345
número (val=34*10+5=345)
número dígito
(val=3*10+4=34) (val=5)
número dígito 5
(val=3) (val=4)
dígito 4
(val=3) 3
Árvore
Gramática de atributos
•
Atenção
• Nem todo símbolo gramatical tem atributos
• Pode haver manipulação de mais de um atributo em uma mesma regra e para um mesmo símbolo
• Pode não haver regras semânticas para uma regra sintática
•
Em geral, a gramática de atributos de uma gramática pode especificar
• Comportamento semântico das operações
• Checagem de tipos
• Manipulação de erros
• Tradução do programa
Gramática de atributos
•
Gramática para geração de números binários ou decimais, indicados pelos sufixos b ou d, respectivamente BNF
número num sufixo sufixo b | d
num num dígito | dígito dígito 0|1|2|3|4|5|6|7|8|9 Exemplos:
10b 02b
Árvore para 10b número num sufixo num digito b dígito 0
1
Gramática de atributos
•
Gramática para geração de números binários ou decimais, indicados pelos sufixos b ou d, respectivamente BNF
número num sufixo sufixo b | d
num num dígito | dígito dígito 0|1|2|3|4|5|6|7|8|9 Exemplos:
10b
Árvore para 02b número num sufixo num digito b dígito 2
0
Gramática de atributos
•
Gramática para geração de números binários ou decimais, indicados pelos sufixos b ou d, respectivamente BNF
número num sufixo sufixo b | d
num num dígito | dígito dígito 0|1|2|3|4|5|6|7|8|9 Exemplos:
10b 02b
Árvore para 02b número num sufixo num digito b dígito 2
0
A sintaxe permitiria o número 02b, mas a semântica não
Gramática de atributos
Gramática de atributos
•
Para 10b
BNF
número num sufixo sufixo b | d
num num dígito | dígito dígito 0|1|2|3|4|5|6|7|8|9
•
Para 02b
BNF
número num sufixo sufixo b | d
num num dígito | dígito dígito 0|1|2|3|4|5|6|7|8|9 Alguns valores sobem (val) Outros descem (base)