A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago.

Apresentações semelhantes


Apresentação em tema: "Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago."— Transcrição da apresentação:

1 Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago A. S. Pardo, ICMC- USP/São Carlos

2 Estrutura geral de um compilador programa-fonte analisador léxico analisador sintático analisador semântico gerador de código intermediário otimizador de código gerador de código programa-alvo Tabela de símbolos Tabela de palavras e símbolos reservados Manipulação de erros dados de entrada saída

3 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

4 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

5 Análise semântica Semântica dirigida pela sintaxe 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

6 Análise semântica Em geral, a gramática de atributos de uma gramática especifica Comportamento semântico das operações Checagem de tipos Manipulação de erros Tradução do programa Tabela de símbolos: estrutura essencial para a análise semântica

7 Tabela de símbolos Captura a sensitividade ao contexto e as ações executadas no decorrer do programa Atrelada a todas as etapas da compilação Permite a realização da análise semântica Fundamental na geração de código

8 Tabela de símbolos tipovalor escopo parâmetros Permite saber durante a compilação de um programa o tipo e o valor de seus elementos (números e identificadores), escopo destes, número e tipo dos parâmetros de um procedimento, etc. Cada token tem atributos/informações diferentes associadas CadeiaTokenCategoriaTipoValor... iidvarinteger1... fatidproc num-integer2...

9 Tabela de símbolos Exemplo de atributos de identificador de variável Tipo de variável (inteira, real, etc.), nome da variável, endereço na memória, escopo (global, local, etc.), etc. Para vetores, ainda seriam necessários atributos de tamanho do vetor, o valor de seus limites, etc.

10 Tabela de símbolos Principais operações efetuadas Inserir: armazena na tabela informações fornecidas pelas declarações no programa Busca: recupera da tabela informações de um elemento declarado no programa quando esse elemento é utilizado Remover: remove (ou torna inacessível) da tabela informações sobre um elemento declarado que não se mostra mais necessário no programa As especificidades dessas operações são dependentes da linguagem de programação em questão

11 Tabela de símbolos A tabela é acessada pelo compilador sempre que um elemento é mencionado no programa Verificar ou incluir sua declaração Verificar seu tipo, seu escopo ou alguma outra informação Atualizar alguma informação associada ao identificador (p.e., valor) Remover um elemento quando este não se faz mais necessário ao programa

12 Tabela de símbolos Estrutura da tabela de símbolos: determinada pela eficiência das operações de inserir, verificar e remover Várias possibilidades Implementação Estática Dinâmica (Melhor opção) Estrutura Listas lineares Árvores de busca (por exemplo, B e AVL) Hashing

13 Tabela de símbolos Questões de projeto Tamanho da tabela: tipicamente, de algumas centenas a mil campos Dependente da forma de implementação Na implementação dinâmica, não é necessário se preocupar com isso Uma única tabela para todas as declarações ou várias tabelas, sendo uma para cada tipo de declaração (constantes, variáveis, tipos, procedimentos e funções) Diferentes declarações têm diferentes informações/atributos por exemplo, variáveis não têm número de argumentos, enquanto procedimentos têm

14 Tabela de símbolos Representação de escopo de identificadores do programa Várias tabelas ou uma única tabela com a identificação do escopo (como um atributo) para cada identificador Tratamento de escopo Inserção de identificadores de mesmo nome, mas em níveis diferentes Remoção de identificadores cujos escopos deixaram de existir A tabela de símbolos pode ser utilizada para armazenar as palavras reservadas e símbolos especiais da linguagem, podendo dispensar o uso da tabela de palavras e símbolos reservados

15 Tabela de símbolos Descritores Registros (campos) que formam a tabela de símbolos Diferentes identificadores têm diferentes descritores Tem que se levar isso em consideração no projeto da tabela de símbolos para sua otimização

16 Tabela de símbolos Inserção de elementos na tabela Associação de regras semânticas às regras gramaticais Verificar se o elemento já não consta na tabela Busca de informação na tabela Realizada antes da inserção Busca de informações para análise semântica Remoção de elementos da tabela Tornar inacessíveis dados que não são mais necessários por exemplo, após o escopo ter terminado Linguagens que permitem estruturação em blocos

17 Tabela de símbolos programidcorpo. programa inserir(cadeia,token=id,cat=nome_prog) CadeiaTokenCategoriaTipoValor... meu_progidnome_prog--... program meu_prog... Inserção de elementos na tabela Declaração, principalmente

18 Tabela de símbolos varidreal declaração de variáveis inserir(cadeia,token=id,cat=var) CadeiaTokenCategoriaTipoValor... meu_progidnome_prog--... xidvarinteger... yidvarinteger..., : integer inserir(tipo=real) inserir(tipo=integer) var x, y: integer Obs: não esta sendo ilustrado o controle das posições na tabela!

19 Tabela de símbolos Exercício: inclua as funções adequadas procedure idreal declaração de procedimentos, : integer id ( ) corpo ; Obs: não esta sendo ilustrado o controle das posições na tabela! procedure meu_proc(a: integer; b,c: real)...

20 Tabela de símbolos Exercício: inclua as funções adequadas procedure idreal declaração de procedimentos, : integer id ( ) corpo ; inserir(cadeia,token=id,cat=proc) CadeiaTokenCategoriaTipoValor... meu_procidproc--... procedure meu_proc(a: integer; b,c: real)... Obs: não esta sendo ilustrado o controle das posições na tablea!

21 Tabela de símbolos Exercício: inclua as funções adequadas procedure idreal declaração de procedimentos, : integer id ( ) corpo ; inserir(cadeia,token=id,cat=proc) inserir(cadeia,token=id,cat=par) inserir(tipo=real) a partir de... inserir(tipo=integer) a partir de... procedure meu_proc(a: integer; b,c: real)... Obs: não esta sendo ilustrado o controle das posições na tabela!

22 Tabela de símbolos Exercício: inclua as funções adequadas CadeiaTokenCategoriaTipoValor... meu_progidnome_prog--... xidvarinteger... yidvarinteger... meu_procidproc--... aidparinteger... bidparreal... cidparreal... procedure meu_proc(a: integer; b,c: real)...

23 Tabela de símbolos Tratamento de escopo Como diferenciar variáveis globais de locais Tratamento de variáveis de mesmo nome, mas de escopos diferentes program meu_prog var x, y: integer procedure meu_proc(x: integer) var y: real begin read(y); x:=x+y end; begin read(y); x:=x*y end.

24 Tabela de símbolos Possibilidades para tratamento de escopos Inclusão de um campo a mais na tabela de símbolos indicando o nível da variável no programa Tabelas diferentes para diferentes escopos Busca de informação Sempre que um elemento do programa é utilizado comando e fator Verifica-se se foi declarado, seu tipo, etc.

25 Tabela de símbolos id fator número real número inteiro ( expressão ) busca(cadeia,token=id,cat=var)

26 Tabela de símbolos comando read write ( ) id, := id expressão ( ) id ; busca(cadeia,token=id, cat=var) busca(cadeia,token=id,cat=proc) busca(cadeia,token=id,cat=par) busca(cadeia,token=id,cat=var)

27 Tratamento semântico Verificação do uso adequado dos elementos do programa Declaração de identificadores Erro: identificador não declarado ou declarado duas vezes Compatibilidade de tipos em comandos Checagem de tipos Concordância entre parâmetros formais e atuais, em termos de número, ordem e tipo

28 Tratamento semântico Declaração de identificadores Verificado durante a construção da tabela de símbolos Compatibilidade de tipos Dependente do contexto Atribuição: inteiro:=inteiro, real:=inteiro, string:=cadeia de caracteres Erro: inteiro:=real Comandos de repetição: while booleano do..., if booleano then... Expressões e tipos esperados pelos operadores: inteiro+inteiro, real*real, inteiro+real, inteiro/inteiro, booleano and booleano Erro: inteiro+booleano Arrays: vetor[integer]

29 Tratamento semântico Concordância entre parâmetros formais e atuais, em termos de número, ordem e tipo Por exemplo, se declarado: procedure p(var x: integer; var y: real) Erros procedure p(x:integer, y:integer) procedure p(y:real, x:integer) procedure p(x:integer) Tratamento de escopo Erro: variável local a um procedimento utilizada no programa principal


Carregar ppt "Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago."

Apresentações semelhantes


Anúncios Google